TSPi
Technology Solutions Provider, Inc.
We are inspired by sustainability and conservation principles of reuse, reduce, and recycle. We apply these principles to all aspects of systems and software development.
Our R3 Platform leverages these principles to incubate high-impact productized accelerators.
We reduce time to market, tech debt, and customer spend.
We automate repeating processes, configurations, and code.
We reduce time to market, tech debt, and customer spend.
We incubate and productize high-impact accelerators.
A suite of sophisticated, pre-built loan origination and management components, including a MISMO compliant data model, decision engine, workflow orchestration, and ML based unstructured data recognition, that enables modernization of federal direct and guaranteed loan program systems. Learn More
A set of automated, highly configurable, DataOps, Data Analytics and Edge Data Fabric components that accelerate the transformation of raw data into actionable information. Learn More
A library of reusable modular components, with pre-written logic and enhancements of out-of-the-box Appian objects, allowing agencies to accelerate the delivery of robust enterprise case management solutions, to improve the intuitiveness and transparency of citizen and stakeholder engagement. Learn More
A collection of preconfigured modules built on the Pega platform that accelerate delivery of full lifecycle Grants administration from decision making through payment and post-award management. Learn More
TSPi designs and implements IT solutions that improve efficiency, increase performance, and accelerate customer success.
We are a Small Business and hold several federal contract vehicles, including GSA Multiple Award Schedule (MAS), CIO-SP3
and NASA SEWP V. Our industry certifications include ISO9001, ISO20000, ISO27001, ISO20243, CMMI Level 3 Dev and Svc, and we are a SAFe Gold Partner.
window.onload = function () {
'use strict';
if (!Array.from) {
Array.from = function () {
var toStr = Object.prototype.toString;
var isCallable = function isCallable(fn) {
return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
};
var toInteger = function toInteger(value) {
var number = Number(value);
if (isNaN(number)) {
return 0;
}
if (number === 0 || !isFinite(number)) {
return number;
}
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
};
var maxSafeInteger = Math.pow(2, 53) - 1;
var toLength = function toLength(value) {
var len = toInteger(value);
return Math.min(Math.max(len, 0), maxSafeInteger);
};
// The length property of the from method is 1.
return function from(arrayLike /*, mapFn, thisArg */) {
// 1. Let C be the this value.
var C = this;
// 2. Let items be ToObject(arrayLike).
var items = Object(arrayLike);
// 3. ReturnIfAbrupt(items).
if (arrayLike == null) {
throw new TypeError("Array.from requires an array-like object - not null or undefined");
}
// 4. If mapfn is undefined, then let mapping be false.
var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
var T;
if (typeof mapFn !== 'undefined') {
// 5. else
// 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
if (!isCallable(mapFn)) {
throw new TypeError('Array.from: when provided, the second argument must be a function');
}
// 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (arguments.length > 2) {
T = arguments[2];
}
}
// 10. Let lenValue be Get(items, "length").
// 11. Let len be ToLength(lenValue).
var len = toLength(items.length);
// 13. If IsConstructor(C) is true, then
// 13. a. Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.
// 14. a. Else, Let A be ArrayCreate(len).
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
// 16. Let k be 0.
var k = 0;
// 17. Repeat, while k < len… (also steps a - h)
var kValue;
while (k < len) {
kValue = items[k];
if (mapFn) {
A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
} else {
A[k] = kValue;
}
k += 1;
}
// 18. Let putStatus be Put(A, "length", len, true).
A.length = len;
// 20. Return A.
return A;
};
}();
}
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
[].concat(_toConsumableArray(document.querySelectorAll('p, td, h1, h2, h3'))).slice(3, 9999).forEach(function (d) {
d.tabIndex = 0;
});
[].concat(_toConsumableArray(document.getElementById('gallery-1').children)).forEach(function (d) {
d.children[0].children[0].tabIndex = 0;
});
[].concat(_toConsumableArray(document.getElementById('gallery-2').children)).forEach(function (d) {
d.children[0].children[0].tabIndex = 0;
});
}