import { addDays, format } from 'date-fns' import { isNil } from 'lodash' import { CardType, Plan, Subscription, SubscriptionInstallment } from '../../../models' import { Omie } from '../../../typings/global' type GenerateServiceOrderData = { Cabecalho: { cCodIntOS: string cCodParc: string cEtapa: string dDtPrevisao: string nCodCli: number nQtdeParc: number } ServicosPrestados: { nCodServico: number cCodServMun?: string cDadosAdicItem?: string cDescServ?: string cRetemISS: string cTribServ?: string nQtde?: number nValUnit?: number }[] Email?: Record InformacoesAdicionais: { cCidPrestServ: string cCodCateg: string nCodCC: number cDadosAdicNF?: string } InfoCadastro: { cCancelada: string cFaturada: string cAmbiente: string } Parcelas?: { nParcela: number dDtVenc: string nValor: number parcela_adiantamento: string nPercentual: number categoria_adiantamento: string conta_corrente_adiantamento: number }[] } export const buildGenerateServiceOrderData = (params: { subscription: Subscription plan: Plan amount: number customerCode: number email?: string installment: SubscriptionInstallment totalInstallments: number config: Omie cardType: CardType }): GenerateServiceOrderData => ({ Cabecalho: { cCodIntOS: `${params.subscription.id}-${params.installment.installment}`, cCodParc: params.cardType === 'debit' ? '999' : '001', cEtapa: '50', dDtPrevisao: params.cardType === 'debit' ? format(addDays(params.installment.due_date, 10), 'dd/MM/yyyy') : format(params.installment.due_date, 'dd/MM/yyyy'), nCodCli: params.customerCode, nQtdeParc: 1, }, InformacoesAdicionais: { cCidPrestServ: 'São Paulo (SP)', cCodCateg: params.config.category_code, nCodCC: params.config.checking_account_code, cDadosAdicNF: params.totalInstallments > 1 ? `Assinatura ${params.plan.name} do app Smartfit Nutri\n Parcela ${params.installment.installment}/${params.totalInstallments}` : `Assinatura ${params.plan.name} do app Smartfit Nutri`, }, ServicosPrestados: [ { nCodServico: +params.plan.omie_service_id, nQtde: 1, cRetemISS: 'S', nValUnit: params.amount, }, ], InfoCadastro: { cCancelada: 'N', cFaturada: 'S', cAmbiente: process.env.STAGE === 'prod' ? 'P' : 'H', }, ...(params.cardType === 'debit' ? { Parcelas: [ { nParcela: params.installment.installment, dDtVenc: format(addDays(params.installment.paid_at, 30), 'dd/MM/yyyy'), nValor: params.amount, parcela_adiantamento: 'S', nPercentual: 100, categoria_adiantamento: params.config.parc_category_code, conta_corrente_adiantamento: params.config.parc_checking_account_code, }, ], } : {}), ...(isNil(params.email) ? {} : { Email: { cEnvRecibo: 'N', cEnvBoleto: 'N', cEnvLink: 'N', cEnviarPara: params.email, }, }), })