falcotura-atv-sdk
Version:
Librería (SDK) de Javascript/NodeJS para acceder al API de Administración Tributaria Virtual (ATV) del Ministerio de Hacienda.
118 lines • 4.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getClave = exports.parseOptions = exports.stringToClave = exports.genString = exports.genClaveObj = exports.consecutivoStr = void 0;
const tipoDocumento_1 = require("../../data/tipoDocumento");
const dateUtils_1 = require("../../utils/dateUtils");
const DEFAULT_VALUES = {
tipoDocumento: '01',
tipoIdentificacion: '01',
codigoPais: '506'
};
function getConsecutivo(opts) {
// @ts-expect-error pending-to-fix
const tipoDocNum = tipoDocumento_1.tipoDocumento[opts.tipoDocKey];
return {
sucursal: opts.sucursal || '001',
terminal: opts.terminal || '00001',
tipoDocumento: tipoDocNum.code || '01',
consecutivo: String(opts.consecutivo).padStart(10, '0')
};
}
function consecutivoStr(consecutivoObj) {
const cons = getConsecutivo(consecutivoObj);
return Object.values(cons).join('');
}
exports.consecutivoStr = consecutivoStr;
function getSender(frontEndRequest) {
const sender = frontEndRequest.Emisor;
return {
tipoIdentificacion: sender.Identificacion.Tipo || DEFAULT_VALUES.tipoIdentificacion,
numeroIdentificacion: sender.Identificacion.Numero
};
}
function getDateInfo(date) {
return (0, dateUtils_1.getCostaRicaDateInfo)(date);
}
function getCountryCode(code) {
if (!code || !code.length) {
return DEFAULT_VALUES.codigoPais;
}
return code.padStart(3, '0');
}
function getIssuerCard(issuerCard) {
return issuerCard.padStart(12, '0');
}
function genClaveObj(opts) {
const today = (0, dateUtils_1.getCostaRicaDate)();
return {
codigoPais: getCountryCode(opts.codigoPais),
fecha: getDateInfo(today),
cedulaEmisor: getIssuerCard(opts.cedulaEmisor),
consecutivo: getConsecutivo(opts),
situacionCE: opts.situacionCE,
codigoSeguridad: opts.codigoSeguridad
};
}
exports.genClaveObj = genClaveObj;
function genString(claveObj) {
const clave = {
codigoPais: claveObj.codigoPais,
fecha: Object.values(claveObj.fecha).join(''),
cedulaEmisor: claveObj.cedulaEmisor,
consecutivo: Object.values(claveObj.consecutivo).join(''),
situacionCE: claveObj.situacionCE,
codigoSeguridad: claveObj.codigoSeguridad
};
return Object.values(clave).join('');
}
exports.genString = genString;
function genClave(opts) {
const claveObj = genClaveObj(opts);
return genString(claveObj);
}
exports.default = genClave;
function stringToClave(claveStr) {
return {
codigoPais: claveStr.slice(0, 3),
fecha: {
dia: claveStr.slice(3, 5),
mes: claveStr.slice(5, 7),
ano: claveStr.slice(7, 9)
},
cedulaEmisor: claveStr.slice(9, 21),
consecutivo: {
sucursal: claveStr.slice(21, 24),
terminal: claveStr.slice(24, 29),
tipoDocumento: claveStr.slice(29, 31),
consecutivo: claveStr.slice(31, 41)
},
situacionCE: claveStr.slice(41, 42),
codigoSeguridad: claveStr.slice(42, 51)
};
}
exports.stringToClave = stringToClave;
function parseOptions(frontEndRequest) {
const sender = getSender(frontEndRequest);
return {
cedulaEmisor: sender.numeroIdentificacion,
// @ts-expect-error pending-to-fix
codigoPais: frontEndRequest.codigoPais,
codigoSeguridad: frontEndRequest.codigoSeguridad,
consecutivo: frontEndRequest.consecutivo,
situacionCE: frontEndRequest.situationEC,
// @ts-expect-error pending-to-fix
sucursal: frontEndRequest.sucursal,
// @ts-expect-error pending-to-fix
terminal: frontEndRequest.terminal,
tipoCedula: sender.tipoIdentificacion,
// @ts-expect-error pending-to-fix
tipoDocKey: frontEndRequest.tipoDocumento
};
}
exports.parseOptions = parseOptions;
function getClave(frontEndRequest) {
const claveOptions = parseOptions(frontEndRequest);
return genClave(claveOptions);
}
exports.getClave = getClave;
//# sourceMappingURL=index.js.map