UNPKG

facturacionelectronicapy-ts-xmlgen

Version:

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

240 lines (239 loc) 8.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClienteSchema = void 0; const zod_1 = require("zod"); const idDocsReceptors_table_1 = require("../../data/idDocsReceptors.table"); const operationTypes_table_1 = require("../../data/operationTypes.table"); const taxpayerTypes_table_1 = require("../../data/taxpayerTypes.table"); const taxpayerNotTaxpayer_table_1 = require("../../data/taxpayerNotTaxpayer.table"); const CommonValidators_1 = __importDefault(require("../../helpers/validation/CommonValidators")); const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator")); const db_service_1 = __importDefault(require("../../services/db.service")); const SDParser_1 = __importDefault(require("../../helpers/SDParser")); /** Campos que identifican al receptor del Documento Electrónico DE (D200-D299) */ exports.ClienteSchema = zod_1.z .object({ // D201 contribuyente: CommonValidators_1.default.taxpayer().describe(SDParser_1.default.stringify('D201')), // D202 tipoOperacion: zod_1.z .nativeEnum(operationTypes_table_1.OperationType) .describe(SDParser_1.default.stringify('D202', { e: 'OperationType' })), // D203 pais: CommonValidators_1.default.country().describe(SDParser_1.default.stringify('D203', { e: 'Country' })), // D205 tipoContribuyente: zod_1.z .nativeEnum(taxpayerTypes_table_1.TaxpayerType) .optional() .describe(SDParser_1.default.stringify('D205', { e: 'TaxpayerType' })), // para obtener D206 y D207 ruc: CommonValidators_1.default.ruc().optional().describe(SDParser_1.default.stringify('D206')), // D208 documentoTipo: zod_1.z .nativeEnum(idDocsReceptors_table_1.IdentityDocumentReceptor) .optional() .describe(SDParser_1.default.stringify('D208', { e: 'IdentityDocumentReceptor' })), // D209 descripcionTipoDocumento: CommonValidators_1.default.identityDocDescription() .optional() .describe(SDParser_1.default.stringify('D209')), // D210 documentoNumero: CommonValidators_1.default.identityDocNumber() .optional() .describe(SDParser_1.default.stringify('D210')), // D211 razonSocial: CommonValidators_1.default.legalName().describe(SDParser_1.default.stringify('D211')), // D212 nombreFantasia: CommonValidators_1.default.tradeName() .optional() .describe(SDParser_1.default.stringify('D212')), // D213 direccion: CommonValidators_1.default.address() .optional() .describe(SDParser_1.default.stringify('D213')), // D214 telefono: CommonValidators_1.default.tel().describe(SDParser_1.default.stringify('D214')), // D215 celular: zod_1.z .string() .min(10) .max(20) .optional() .describe(SDParser_1.default.stringify('D215')), // D216 email: CommonValidators_1.default.email() .optional() .describe(SDParser_1.default.stringify('D216')), // D217 codigo: CommonValidators_1.default.clientCode() .optional() .describe(SDParser_1.default.stringify('D217')), // D218 numeroCasa: CommonValidators_1.default.houseNumber() .optional() .describe(SDParser_1.default.stringify('D218')), // D219 departamento: CommonValidators_1.default.department() .optional() .describe(SDParser_1.default.stringify('D219', { e: 'Department' })), // D221 distrito: CommonValidators_1.default.district() .optional() .describe(SDParser_1.default.stringify('D221', { t: 'distritos' })), // D223 ciudad: CommonValidators_1.default.city() .optional() .describe(SDParser_1.default.stringify('D223', { t: 'ciudades' })), }) .transform((data, ctx) => { const validator = new ZodValidator_1.default(ctx, data); CommonValidators_1.default.location(ctx, data.departamento, data.distrito, data.ciudad); /**D201 = 1 */ const isTaxpayer = data.contribuyente == taxpayerNotTaxpayer_table_1.TaxpayerNotTaxpayer.CONTRIBUYENTE; /**D201 = 2 */ const isNotTaxpayer = data.contribuyente == taxpayerNotTaxpayer_table_1.TaxpayerNotTaxpayer.NO_CONTRIBUYENTE; /**D202 = 4 */ const isB2F = data.tipoOperacion == operationTypes_table_1.OperationType.B2F; /**D208 = 5 */ const isNameless = data.documentoTipo == idDocsReceptors_table_1.IdentityDocumentReceptor.INNOMINADO; /**D208 = 9 */ const isOther = data.documentoTipo == idDocsReceptors_table_1.IdentityDocumentReceptor.OTRO; // D205 - tipoContribuyente { /* Obligatorio si D201 = 1 No informar si D201 = 2 */ if (isTaxpayer) { validator.requiredField('tipoContribuyente'); } else if (isNotTaxpayer) { validator.undesiredField('tipoContribuyente'); } } // D206 - ruc { /* Obligatorio si D201 = 1 No informar si D201 = 2 */ if (isTaxpayer) { validator.requiredField('ruc'); } else if (isNotTaxpayer) { validator.undesiredField('ruc'); } } // D208 - documentoTipo { /* VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_023_MT_V150.pdf/9580922b-5dd5-60f9-4857-ae66a757898f?t=1724956850006 Obligatorio si D201 = 2 No informar si D201 = 1 */ if (isNotTaxpayer) { validator.requiredField('documentoTipo'); } else if (isTaxpayer) { validator.undesiredField('documentoTipo'); } } // D209 - descripcionTipoDocumento { /* Si D208 = 9 informar el tipo de documento de identidad del receptor */ if (isOther) { validator.requiredField('descripcionTipoDocumento'); } else { data.descripcionTipoDocumento = db_service_1.default.idDocsReceptors._findByIdIfExist(data.documentoTipo)?.description; } } // D210 - documentoNumero { /* Obligatorio si D201 = 2 y D202 ≠ 4 En caso de DE innominado, completar con 0 (cero) VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_002_MT_V150.pdf/b3656789-f42a-e578-4141-45046e452f41?t=1687353745841 */ if (isNotTaxpayer && !isB2F) { validator.requiredField('documentoNumero'); } if (isNameless) { data.documentoNumero = '0'; } } // D211 - razonSocial { /* En caso de ser innominado, completar con "Sin Nombre" */ if (isNameless) { data.razonSocial = 'Sin Nombre'; } } // D213 - dirección { /* Campo obligatorio cuando C002=7 (se valida en EDocSchema) o cuando D202=4 */ if (isB2F) { validator.requiredField('direccion'); } } // D218 - numeroCasa { /* Campo obligatorio si se informa el campo D213 */ if (data.direccion) { validator.requiredField('numeroCasa'); } } // D219 - departamento { /* No se debe informar cuando D202 = 4. VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_003_MT_V150.pdf/dd4689ee-164a-29b3-9c3f-44cbef55bcf5?t=1687353745998 */ if (isB2F) { validator.undesiredField('departamento'); } } // D223 - ciudad { /* No se debe informar cuando D202 = 4 VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_003_MT_V150.pdf/dd4689ee-164a-29b3-9c3f-44cbef55bcf5?t=1687353745998 */ if (isB2F) { validator.undesiredField('ciudad'); } } const [rucID, rucDV] = data.ruc?.split('-') ?? []; return { ...data, // D204 paisDescripcion: db_service_1.default.countries._findById(data.pais).description, // D206 rucID: rucID, // D207 rucDV: rucDV, // D220 descripcionDepartamento: db_service_1.default.departments._findByIdIfExist(data.departamento)?.description, // D222 descripcionDistrito: db_service_1.default.districts._findByIdIfExist(data.distrito) ?.description, // D224 descripcionCiudad: db_service_1.default.cities._findByIdIfExist(data.ciudad) ?.description, }; });