facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
167 lines (166 loc) • 7.73 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const xml2js_1 = __importDefault(require("xml2js"));
const removeUndefinedValues_1 = require("../helpers/removeUndefinedValues");
const ComplementariosGen_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/ComplementariosGen.XMLSG"));
const DocAsociado_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/DocAsociado.XMLSG"));
const AutoFactura_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/AutoFactura.XMLSG"));
const ComplementariosEsp_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/ComplementariosEsp.XMLSG"));
const Condicion_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/Condicion.XMLSG"));
const Factura_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/Factura.XMLSG"));
const Items_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/Items.XMLSG"));
const NotaCreditoDebito_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/NotaCreditoDebito.XMLSG"));
const NotaRemision_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/NotaRemision.XMLSG"));
const Transporte_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/E-section/Transporte.XMLSG"));
const General_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/General.XMLSG"));
const Totales_XMLSG_1 = __importDefault(require("./e-doc-xml-structure-generators/Totales.XMLSG"));
class EDocXMLGenerator {
defaultConfig = {
redondeoSedeco: true,
decimals: 2,
taxDecimals: 2,
pygDecimals: 0,
partialTaxDecimals: 8,
pygTaxDecimals: 0,
userObjectRemove: false,
test: false, //Para ambiente de test se debe informar true por "config" exterior..
};
xmlBuilder = new xml2js_1.default.Builder({
xmldec: {
version: '1.0',
encoding: 'UTF-8',
standalone: false,
},
renderOpts: {
//Para firmar tiene que estar normalizado
pretty: false,
},
});
generateXMLDocument(params, data, config) {
return new Promise((resolve, reject) => {
try {
// DELETE: si ya no se usa
config = { ...this.defaultConfig, ...config };
const xmlStructure = this.transformToXMLStructure(params, data);
const xml = this.xmlBuilder.buildObject(xmlStructure);
resolve(xml);
}
catch (error) {
reject(error);
}
});
}
transformToXMLStructure(params, data) {
return {
rDE: this.get_rDE(params, data),
};
}
get_rDE(params, data) {
// ver: "7.2.2.1. Particularidad de la firma digital"
// todos los valores dentro del $ son atributos de la etiqueta
return (0, removeUndefinedValues_1.removeUndefinedValues)({
$: {
xmlns: 'http://ekuatia.set.gov.py/sifen/xsd',
'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
// aunque parezca un error, ese espacio en el link es necesario
'xsi:schemaLocation': 'http://ekuatia.set.gov.py/sifen/xsd siRecepDE_v150.xsd',
},
dVerFor: params.version,
DE: this.get_DE(params, data),
// I. Información de la Firma Digital del DTE (I001-I049)
Signature: undefined,
// J. Campos fuera de la Firma Digital (J001-J049)
gCamFuFD: undefined,
});
}
/**A. Campos firmados del Documento Electrónico (A001-A099) */
get_DE(params, data) {
return {
$: {
// A002
Id: data.Id,
},
// A003
dDVId: data.dvId,
// A004
dFecFirma: data.fechaFirmaDigital,
// A005
dSisFact: data.sistemaDeFacturacion,
// B. Campos inherentes a la operación de Documentos Electrónicos (B001-B099)
gOpeDE: this.get_gOpeDE(data),
// C. Campos de datos del Timbrado (C001-C099)
gTimb: this.get_gTimb(params, data),
// D. Campos Generales del Documento Electrónico DE (D001-D299)
gDatGralOpe: General_XMLSG_1.default.get_gDatGralOpe(params, data),
// E. Campos específicos por tipo de Documento Electrónico (E001-E009)
gDtipDE: this.get_gDtipDE(data),
// F. Campos que describen los subtotales y totales de la transacción documentada (F001-F099)
gTotSub: Totales_XMLSG_1.default.get_gTotSub(data),
// G. Campos complementarios comerciales de uso general (G001-G049)
gCamGen: ComplementariosGen_XMLSG_1.default.get_gCamGen(data),
// H. Campos que identifican al documento asociado (H001-H049)
gCamDEAsoc: DocAsociado_XMLSG_1.default.get_gCamDEAsoc(data),
};
}
/**B. Campos inherentes a la operación de Documentos Electrónicos (B001-B099) */
get_gOpeDE(data) {
return {
// B002
iTipEmi: data.tipoEmision,
// B003
dDesTipEmi: data.descripcionEmision,
// B004
dCodSeg: data.codigoSeguridadAleatorio,
// B005
dInfoEmi: data.observacion,
// B006
dInfoFisc: data.descripcion,
};
}
/**C. Campos de datos del Timbrado (C001-C099) */
get_gTimb(params, data) {
return {
// C002
iTiDE: data.tipoDocumento,
// C003
dDesTiDE: data.descripcionDocumento,
// C004
dNumTim: params.timbradoNumero,
// C005
dEst: data.establecimiento,
// C006
dPunExp: data.punto,
// C007
dNumDoc: data.numero,
// C010
dSerieNum: data.serie,
// C008
dFeIniT: params.timbradoFecha,
};
}
/**E. Campos específicos por tipo de Documento Electrónico (E001-E009)*/
get_gDtipDE(data) {
return {
// E1. Campos que componen la Factura Electrónica FE (E002-E099)
gCamFE: Factura_XMLSG_1.default.get_gCamFE(data),
// E4. Campos que componen la Autofactura Electrónica AFE (E300-E399)
gCamAE: AutoFactura_XMLSG_1.default.get_gCamAE(data),
// E5. Campos que componen la Nota de Crédito/Débito Electrónica NCE-NDE (E400-E499)
gCamNCDE: NotaCreditoDebito_XMLSG_1.default.get_gCamNCDE(data),
// E6. Campos que componen la Nota de Remisión Electrónica (E500-E599)
gCamNRE: NotaRemision_XMLSG_1.default.get_gCamNRE(data),
// E7. Campos que describen la condición de la operación (E600-E699)
gCamCond: Condicion_XMLSG_1.default.get_gCamCond(data),
// E8. Campos que describen los ítems de la operación (E700-E899)
gCamItem: Items_XMLSG_1.default.get_gCamItem(data),
// E9. Campos complementarios comerciales de uso específico (E790-E899)
gCamEsp: ComplementariosEsp_XMLSG_1.default.get_gCamEsp(data),
// E10. Campos que describen el transporte de las mercaderías (E900-E999)
gCamTrans: Transporte_XMLSG_1.default.get_gTransp(data),
};
}
}
exports.default = new EDocXMLGenerator();