UNPKG

@dueheads/citi-bank-boleto-sdk

Version:

SDK para registro de boletos na API do Citibank via mTLS.

150 lines (149 loc) 6.96 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.XMLBuilder = void 0; const xmljs = __importStar(require("xml-js")); class XMLBuilder { formatAmount(value, decimals) { if (value === undefined || value === 0) { // Documentação exige zeros se não for usar [cite: 15, 16, 17] return '0'.repeat(13); } return (value * Math.pow(10, decimals)).toFixed(0).padStart(13, '0'); } // Função auxiliar para criar um grupo de desconto padrão/vazio createDefaultDiscountGroup() { return { TitlDscntAmtOrPrct: this.formatAmount(0, 4), TitlDscntEndDt: ' ', TitlDscntTp: ' ', }; } build(data) { const jsObject = { _declaration: { _attributes: { version: '1.0', encoding: 'utf-8', }, }, 'soapenv:Envelope': { _attributes: { 'xmlns:soapenv': 'http://schemas.xmlsoap.org/soap/envelope/', }, 'soapenv:Header': {}, 'soapenv:Body': { GrpREMColTit: { // ... (todos os outros campos de GrpBenf até TitlYourNb permanecem iguais) GrpBenf: { CdClrSys: '745', CdIspb: '33479023', CdtrId: data.GrpBenf.CdtrId, CdtrNm: data.GrpBenf.CdtrNm, CdtrTaxId: data.GrpBenf.CdtrTaxId, CdtrTaxTp: data.GrpBenf.CdtrTaxTp, }, GrpClPgd: { DbtrNm: data.GrpClPgd.DbtrNm, DbtrTaxId: data.GrpClPgd.DbtrTaxId, DbtrTaxTp: data.GrpClPgd.DbtrTaxTp, GrpClPgdAdr: { DbtrAdrTp: data.GrpClPgd.GrpClPgdAdr.DbtrAdrTp, DbtrCtrySubDvsn: data.GrpClPgd.GrpClPgdAdr.DbtrCtrySubDvsn, DbtrPstCd: data.GrpClPgd.GrpClPgdAdr.DbtrPstCd, DbtrTwnNm: data.GrpClPgd.GrpClPgdAdr.DbtrTwnNm, }, }, CdOccTp: '01', DbtrGrntNm: data.DbtrGrntNm || ' ', DbtrMsg: data.DbtrMsg || ' ', TitlAmt: this.formatAmount(data.TitlAmt, 2), TitlBarCdInd: data.TitlBarCdInd, TitlCcyCd: data.TitlCcyCd, TitlCiaCdId: data.TitlCiaCdId, TitlDueDt: data.TitlDueDt, TitlInstrNmDtExec: data.TitlInstrNmDtExec || '00', TitlInstrProtInd: data.TitlInstrProtInd || ' ', TitlInstrWrtOffInd: data.TitlInstrWrtOffInd, TitlIOFAmt: this.formatAmount(data.TitlIOFAmt, 2), TitlIssDt: data.TitlIssDt, TitlOurNb: data.TitlOurNb, TitlPortCd: data.TitlPortCd, TitlRbtAmt: this.formatAmount(data.TitlRbtAmt, 2), TitlTpCd: data.TitlTpCd, TitlYourNb: data.TitlYourNb, // ---> INÍCIO DA CORREÇÃO LÓGICA <--- // Garante que os grupos sempre existam no XML final. // Grupo de Desconto GrpDscnt: data.GrpDscnt?.length ? data.GrpDscnt.map(d => ({ TitlDscntAmtOrPrct: this.formatAmount(d.TitlDscntAmtOrPrct, 4), TitlDscntEndDt: d.TitlDscntEndDt || ' ', TitlDscntTp: d.TitlDscntTp, })) : this.createDefaultDiscountGroup(), // Envia um grupo padrão se não houver dados // Grupo de Juros GrpItrs: data.GrpItrs ? { TitlItrsAmtOrPrct: this.formatAmount(data.GrpItrs.TitlItrsAmtOrPrct, 4), TitlItrsStrDt: data.GrpItrs.TitlItrsStrDt || ' ', TitlItrsTp: data.GrpItrs.TitlItrsTp, } : { TitlItrsAmtOrPrct: this.formatAmount(0, 4), TitlItrsStrDt: ' ', TitlItrsTp: ' ', }, // Grupo de Multa GrpFn: data.GrpFn ? { TitlFnAmtOrPrct: this.formatAmount(data.GrpFn.TitlFnAmtOrPrct, 5), TitlFnStrDt: data.GrpFn.TitlFnStrDt || ' ', TitlFnTp: data.GrpFn.TitlFnTp, } : { TitlFnAmtOrPrct: this.formatAmount(0, 5), TitlFnStrDt: ' ', TitlFnTp: ' ', }, // ---> FIM DA CORREÇÃO LÓGICA <--- }, }, }, }; return xmljs.js2xml(jsObject, { compact: true, spaces: 4 }); } } exports.XMLBuilder = XMLBuilder;