import { format } from 'date-fns' import { isNil } from 'lodash' import { Plan, Subscription } from '../../../models' import { buildContractNumber } from './build-contract-number' import { getPeriodByIntervalPlan } from './get-period-by-interval-plan' type GenerateContractData = { cabecalho: Record itensContrato: { itemCabecalho: Record itemDescrServ: Record }[] emailCliente?: Record infAdic: { cCidPrestServ: string cCodCateg?: string nCodCC: number } vencTextos: { cAdContrato: string cAdPeriodo: string cAdVenc: string cAntecipar: string cCodPerRef: string cDiaFim: number cDiaIni: number cPostergar: string cProxMes: string cTpVenc: string nDiaFixo: number nDias: number } } export const buildGenerateContractData = (params: { subscription: Subscription plan: Plan amount: number customerCode: number email?: string checkingAccountCode: number categoryCode?: string }): GenerateContractData => ({ cabecalho: { cCodSit: '10', cNumCtr: buildContractNumber(params.subscription), cCodIntCtr: buildContractNumber(params.subscription), nCodCli: params.customerCode, cTipoFat: getPeriodByIntervalPlan(params.plan), dVigFinal: format(params.subscription.expiresAt, 'dd/MM/yyyy'), dVigInicial: format(params.subscription.subscribedAt, 'dd/MM/yyyy'), nDiaFat: Number(format(params.subscription.trialExpiresAt || params.subscription.subscribedAt, 'dd')), }, infAdic: { cCidPrestServ: 'São Paulo (SP)', cCodCateg: params.categoryCode, nCodCC: params.checkingAccountCode, }, itensContrato: [ { itemCabecalho: { codIntItem: params.subscription.originalTransaction, cNaoGerarFinanceiro: 'N', codServico: params.plan.omie_service_id, natOperacao: '01', quant: 1, seq: 1, valorUnit: params.amount, }, itemDescrServ: { descrCompleta: `Assinatura ${params.plan.name} do app Smartfit Nutri`, }, }, ], vencTextos: { cAdContrato: 'N', cAdPeriodo: 'N', cAdVenc: 'N', cAntecipar: 'N', cCodPerRef: '001', cDiaFim: 0, cDiaIni: 0, cPostergar: 'S', cProxMes: 'N', cTpVenc: '002', nDiaFixo: Number(format(params.subscription.trialExpiresAt || params.subscription.subscribedAt, 'dd')), nDias: 0, }, ...(isNil(params.email) ? {} : { emailCliente: { cEnviarRecibo: 'N', cEnviarBoleto: 'N', cEnviarLinkNfse: 'S', cUtilizarEmails: params.email, }, }), })