facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
242 lines (241 loc) • 8.99 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ItemSchema = void 0;
const zod_1 = require("zod");
const merchandiseRelevances_table_1 = require("../../data/merchandiseRelevances.table");
const DateHelper_1 = __importDefault(require("../../helpers/DateHelper"));
const CommonValidators_1 = __importDefault(require("../../helpers/validation/CommonValidators"));
const NumberLenght_1 = __importDefault(require("../../helpers/validation/NumberLenght"));
const ZodValidator_1 = __importDefault(require("../../helpers/validation/ZodValidator"));
const db_service_1 = __importDefault(require("../../services/db.service"));
const impuesto_schema_1 = require("./impuesto.schema");
const itemDncp_schema_1 = require("./itemDncp.schema");
const monto_schema_1 = require("./monto.schema");
const sectorAutomotor_schema_1 = require("./sectorAutomotor.schema");
const measurementUnits_table_1 = require("../../data/measurementUnits.table");
const SDParser_1 = __importDefault(require("../../helpers/SDParser"));
/**E8. Campos que describen los ítems de la operación (E700-E899) */
exports.ItemSchema = zod_1.z
.object({
// E701
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_009_MT_V150.pdf/c268a447-11e3-ee1e-b4d5-8d83dd408401?t=1687353746900
codigo: zod_1.z
.string()
.min(1)
.max(50)
.describe(SDParser_1.default.stringify('E701', {
v: 'https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_009_MT_V150.pdf/c268a447-11e3-ee1e-b4d5-8d83dd408401?t=1687353746900',
})),
// E702
partidaArancelaria: zod_1.z
.number()
.optional()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).int().length(4);
})
.describe(SDParser_1.default.stringify('E702')),
// E703
ncm: zod_1.z
.number()
.optional()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).int().min(6).max(8);
})
.describe(SDParser_1.default.stringify('E703')),
// E704 - E707
dncp: itemDncp_schema_1.ItemDncpSchema.optional().describe(SDParser_1.default.stringify('E704-E707')),
// E708
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_009_MT_V150.pdf/c268a447-11e3-ee1e-b4d5-8d83dd408401?t=1687353746900
descripcion: zod_1.z
.string()
.min(1)
.max(2000)
.describe(SDParser_1.default.stringify('E708', {
v: 'https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_009_MT_V150.pdf/c268a447-11e3-ee1e-b4d5-8d83dd408401?t=1687353746900',
})),
// E709
unidadMedida: zod_1.z
.nativeEnum(measurementUnits_table_1.MeasurementUnit)
.describe(SDParser_1.default.stringify('E709', { e: 'MeasurementUnit' })),
// E711
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_023_MT_V150.pdf/9580922b-5dd5-60f9-4857-ae66a757898f?t=1724956850006
cantidad: zod_1.z
.number()
.superRefine((value, ctx) => {
new NumberLenght_1.default(value, ctx).max(10).maxDecimals(8);
})
.describe(SDParser_1.default.stringify('E711', {
v: 'https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_023_MT_V150.pdf/9580922b-5dd5-60f9-4857-ae66a757898f?t=1724956850006',
})),
// E712
pais: CommonValidators_1.default.country()
.optional()
.describe(SDParser_1.default.stringify('E712', {
e: 'Country',
})),
// E714
observacion: zod_1.z
.string()
.min(1)
.max(500)
.optional()
.describe(SDParser_1.default.stringify('E714')),
// E715
tolerancia: zod_1.z
.nativeEnum(merchandiseRelevances_table_1.MerchandiseRelevance)
.optional()
.describe(SDParser_1.default.stringify('E715', { e: 'MerchandiseRelevance' })),
// E717
toleranciaCantidad: zod_1.z
.number()
.optional()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).max(10).maxDecimals(4);
})
.describe(SDParser_1.default.stringify('E717')),
// E718
toleranciaPorcentaje: zod_1.z
.number()
.optional()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).max(3).maxDecimals(8);
})
.describe(SDParser_1.default.stringify('E718')),
// E719
cdcAnticipo: zod_1.z
.string()
.length(44)
.optional()
.describe(SDParser_1.default.stringify('E719')),
// E8.1. Campos que describen el precio, tipo de cambio y valor total de la operación por ítem (E720-E729)
monto: monto_schema_1.MontoSchema.optional().describe(SDParser_1.default.stringify('E8.1', {
d: 'Campos que describen el precio, tipo de cambio y valor total de la operación por ítem (E720-E729)',
})),
// E8.2. Campos que describen el IVA de la operación por ítem (E730-E739)
impuesto: impuesto_schema_1.ImpuestoSchema.optional().describe(SDParser_1.default.stringify('E8.2', {
d: 'Campos que describen el IVA de la operación por ítem (E730-E739)',
})),
// E8.4. Grupo de rastreo de la mercadería (E750-E761)
// E751
lote: zod_1.z
.string()
.min(1)
.max(80)
.optional()
.describe(SDParser_1.default.stringify('E751')),
// E752
vencimiento: zod_1.z.coerce
.date()
.optional()
.transform((value) => {
if (!value)
return value;
return DateHelper_1.default.getIsoDate(value);
})
.describe(SDParser_1.default.stringify('E752')),
// E753
numeroSerie: zod_1.z
.string()
.min(1)
.max(10)
.optional()
.describe(SDParser_1.default.stringify('E753')),
// E754
numeroPedido: zod_1.z
.string()
.min(1)
.max(20)
.optional()
.describe(SDParser_1.default.stringify('E754')),
// E755
numeroSeguimiento: zod_1.z
.string()
.min(1)
.max(20)
.optional()
.describe(SDParser_1.default.stringify('E755')),
// E756, E757 y E758 (eliminados)
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_010_MT_V150.pdf/d64a693b-6c63-86e1-ec6a-d4fe5ec4eeea?t=1687353747196
// E759
registroSenave: zod_1.z
.string()
.length(20)
.optional()
.describe(SDParser_1.default.stringify('E759')),
// E760
registroEntidadComercial: zod_1.z
.string()
.length(20)
.optional()
.describe(SDParser_1.default.stringify('E760')),
// E761
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_010_MT_V150.pdf/d64a693b-6c63-86e1-ec6a-d4fe5ec4eeea?t=1687353747196
nombreProducto: zod_1.z
.string()
.min(1)
.max(30)
.optional()
.describe(SDParser_1.default.stringify('E761', {
v: 'https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_010_MT_V150.pdf/d64a693b-6c63-86e1-ec6a-d4fe5ec4eeea?t=1687353747196',
})),
// E8.5. Sector de automotores nuevos y usados (E770-E789)
sectorAutomotor: sectorAutomotor_schema_1.SectorAutomotorSchema.optional().describe(SDParser_1.default.stringify('E8.5', {
d: 'Sector de automotores nuevos y usados (E770-E789)',
})),
})
.transform((data, ctx) => {
const validator = new ZodValidator_1.default(ctx, data);
// E717 - toleranciaCantidad
{
/*
Obligatorio si se informa E715
*/
if (data.tolerancia) {
validator.requiredField('toleranciaCantidad');
}
}
// E718 - toleranciaPorcentaje
{
/*
Obligatorio si se informa E715
*/
if (data.tolerancia) {
validator.requiredField('toleranciaPorcentaje');
}
}
let monto;
if (data.monto) {
monto = {
...data.monto,
// E727
precioTotal: data.monto.precioUnitario * data.cantidad,
};
}
return {
...data,
// E713
paisDescripcion: db_service_1.default.countries._findByIdIfExist(data.pais, {
ctx,
fieldName: 'pais',
})?.description,
// E710
unidadMedidaDescripcion: db_service_1.default.measurementUnits._findById(data.unidadMedida, {
ctx,
fieldName: 'unidadMedida',
}).representation,
// E716
toleranciaDescripcion: db_service_1.default.merchandiseRelevances._findByIdIfExist(data.tolerancia)?.description,
monto,
};
});