UNPKG

facturacionelectronicapy-ts-xmlgen

Version:

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

66 lines (65 loc) 2.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EDocSchema = void 0; const zod_1 = require("zod"); const EDocData_schema_1 = require("./EDocData.schema"); const EDocParams_schema_1 = require("./EDocParams.schema"); const ZodValidator_1 = __importDefault(require("../helpers/validation/ZodValidator")); const Path_1 = require("../helpers/Path"); const remissionReasons_table_1 = require("../data/remissionReasons.table"); const CDCHelper_1 = __importDefault(require("../helpers/CDCHelper")); exports.EDocSchema = zod_1.z .object({ data: EDocData_schema_1.EDocDataSchema, params: EDocParams_schema_1.EDocParamsSchema, }) .transform((eDoc, ctx) => { const { data, params } = eDoc; const validator = new ZodValidator_1.default(ctx, eDoc); const dataPath = new Path_1.Path('data'); const paramsPath = new Path_1.Path('params'); const isValidEstablishment = params.establecimientos.some((d) => d.codigo == data.establecimiento); const paramsEstablishmentPath = paramsPath.concat('establecimiento'); validator.validate(dataPath.concat('establecimiento'), !isValidEstablishment, `Debe utilizar un establecimiento de '${paramsEstablishmentPath}'`); // E501 { /* OBS: Cuando el motivo sea por operaciones internas de la empresa, el RUC del receptor debe ser igual al RUC del emisor. */ if (data.remision && data.remision.motivo == remissionReasons_table_1.RemissionReason.TRASLADO_ENTRE_LOCALES_DE_LA_EMPRESA) { const paramsRucPath = paramsPath.concat('ruc'); validator.validate(dataPath.concat('cliente').concat('ruc'), data.cliente.ruc != params.ruc, `RUC del receptor en $path debe coincidir con el RUC del emisor en '${paramsRucPath}'`); } } // ⚠️ según el repo original if (!data.cdc) { validator.requiredField(dataPath.concat('codigoSeguridadAleatorio')); if (data.codigoSeguridadAleatorio) { validator.validate(paramsPath.concat('ruc'), !params.rucDV, '$path debe contener dígito verificador'); data.cdc = CDCHelper_1.default.generateCDC(params, data); } } else { CDCHelper_1.default.validateCDC(params, data, ctx); } return { data: { ...data, // A002: ⚠️ según el repo original Id: data.cdc, // A003 dvId: data.cdc?.charAt(data.cdc.length - 1), // B004 codigoSeguridadAleatorio: data.codigoSeguridadAleatorio?.toString(), }, params, }; });