UNPKG

facturacionelectronicapy-ts-xmlgen

Version:

Genera el contenido del archivo XML del Documento electrónico exigido por la SET

79 lines (78 loc) 3.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CondicionSchema = void 0; const zod_1 = require("zod"); const paymentConditions_table_1 = require("../../data/paymentConditions.table"); const entregas_schema_1 = require("./entregas.schema"); const db_service_1 = __importDefault(require("../../services/db.service")); const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator")); const credito_schema_1 = require("./credito.schema"); const SDParser_1 = __importDefault(require("../../helpers/SDParser")); exports.CondicionSchema = zod_1.z .object({ // E601 tipo: zod_1.z .nativeEnum(paymentConditions_table_1.PaymentCondition) .describe(SDParser_1.default.stringify('E601', { e: 'PaymentCondition' })), // E7.1. Campos que describen la forma de pago de la operación al contado o del monto de la entrega inicial (E605-E619) entregas: zod_1.z .array(entregas_schema_1.EntregaSchema) .max(999) .optional() .describe(SDParser_1.default.stringify('E7.1', { d: 'Campos que describen la forma de pago de la operación al contado o del monto de la entrega inicial (E605-E619)', })), // E7.2. Campos que describen la operación a crédito (E640-E649) credito: credito_schema_1.CreditoSchema.optional().describe(SDParser_1.default.stringify('E7.2', { d: 'Campos que describen la operación a crédito (E640-E649)', })), }) .transform((data, ctx) => { const validator = new ZodValidator_1.default(ctx, data); /**E601 = 1 */ const isInCash = data.tipo == paymentConditions_table_1.PaymentCondition.CONTADO; /**E601 = 2 */ const isInCredit = data.tipo == paymentConditions_table_1.PaymentCondition.CREDITO; // E605 - entregas { /* Obligatorio si E601 = 1 Obligatorio si existe el campo E645: esto no se aplica en este repo ya que E645 se calcula automáticamente en base a entregas */ if (isInCash) { validator.requiredField('entregas'); } } // E640 - credito { /* Obligatorio si E601 = 2 No informar si E601 ≠ 2 */ if (isInCredit) { validator.requiredField('credito'); } else { validator.undesiredField('credito'); } } // E645 - credito.montoEntregaInicial let credito = data.credito; { // ⚠️ esto no es del manual, pero si del repo original if (data.credito && data.entregas) { credito.montoEntregaInicial = data.entregas.reduce((acc, entrega) => acc + entrega.monto, 0); } } return { ...data, credito, // E602 tipoDescripcion: db_service_1.default.paymentConditions._findById(data.tipo) .description, }; });