UNPKG

@dueheads/citi-bank-boleto-sdk

Version:

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

90 lines (89 loc) 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataInterpreter = void 0; /** * Classe responsável por interpretar e converter dados do formato BoletoPayload * para o formato esperado pelo CitiBankBoletoSDK (BoletoData). */ class DataInterpreter { /** * Converte o objeto de dados da sua aplicação para o formato BoletoData do SDK. * @param payload O objeto de dados no formato da sua aplicação. * @returns Um objeto no formato BoletoData, pronto para ser usado pelo SDK. */ toSdkFormat(payload) { const { pagador, documento, sacador } = payload.dados; const { dadosBeneficiario } = payload; const tipoPessoaPagador = pagador.tipo_inscricao === '1' ? 'F' : 'J'; const enderecoCompleto = [ pagador.endereco.logradouro, pagador.endereco.numero, pagador.endereco.complemento ].filter(Boolean).join(', '); const boletoData = { // --- Grupo Beneficiário --- GrpBenf: { CdtrNm: dadosBeneficiario.nome, CdtrTaxId: dadosBeneficiario.inscricao, CdtrTaxTp: dadosBeneficiario.tipo, // Beneficiário é sempre Pessoa Jurídica CdtrId: dadosBeneficiario.convenio, // Identificação do convênio }, // --- Grupo Pagador --- GrpClPgd: { DbtrNm: pagador.nome, DbtrTaxId: pagador.inscricao, DbtrTaxTp: tipoPessoaPagador, GrpClPgdAdr: { DbtrAdrTp: enderecoCompleto, DbtrCtrySubDvsn: pagador.endereco.uf || '', DbtrPstCd: pagador.endereco.cep || '', DbtrTwnNm: pagador.endereco.cidade || '', }, }, // --- Campos do Título (Todos os campos da documentação) --- DbtrGrntNm: sacador?.nome, DbtrMsg: documento.mensagem, TitlAmt: parseFloat(documento.valor), TitlBarCdInd: '0', // Fixo: '0' - Padrão Citi TitlCcyCd: '09', // Fixo: '09' - Real TitlCiaCdId: dadosBeneficiario.identificador, TitlDueDt: documento.data_vencimento, TitlIssDt: documento.data_emissao, TitlOurNb: documento.nosso_numero, TitlPortCd: '1', // Fixo: '1' - Cobrança Simples TitlTpCd: documento.especie, TitlYourNb: documento.numero, TitlIOFAmt: parseFloat(documento.valor_iof || '0'), TitlRbtAmt: parseFloat(documento.valor_abatimento || '0'), // --- Instruções de Protesto e Baixa --- // A documentação diz que são mutuamente exclusivas TitlInstrProtInd: documento.protesto?.codigo, TitlInstrWrtOffInd: documento.instrucao_baixa ? '1' : (documento.protesto ? '2' : '1'), TitlInstrNmDtExec: documento.protesto?.dias || documento.instrucao_baixa?.dias, // --- Grupos Opcionais de Encargos --- GrpDscnt: documento.desconto ? [{ TitlDscntAmtOrPrct: parseFloat(documento.desconto.valor || documento.desconto.percentual || '0'), TitlDscntEndDt: documento.desconto.data_limite, TitlDscntTp: documento.desconto.codigo, }] : undefined, GrpItrs: (documento.juros && documento.juros.codigo !== '3') ? { TitlItrsAmtOrPrct: parseFloat(documento.juros.valor_ao_dia || '0'), TitlItrsTp: documento.juros.codigo, } : undefined, GrpFn: documento.multa ? { TitlFnAmtOrPrct: parseFloat(documento.multa.valor || documento.multa.percentual || '0'), TitlFnStrDt: this.calcularDataEncargo(documento.data_vencimento, documento.multa.dias_apos_vencimento), TitlFnTp: documento.multa.codigo, } : undefined, }; return boletoData; } calcularDataEncargo(vencimento, dias) { if (!dias) return undefined; const dataVencimento = new Date(`${vencimento}T12:00:00Z`); dataVencimento.setDate(dataVencimento.getDate() + parseInt(dias, 10)); return dataVencimento.toISOString().split('T')[0]; } } exports.DataInterpreter = DataInterpreter;