facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
249 lines (248 loc) • 8.69 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.DocumentoAsociadoSchema = void 0;
const zod_1 = require("zod");
const associatedDocumentTypes_table_1 = require("../../data/associatedDocumentTypes.table");
const constancyTypes_table_1 = require("../../data/constancyTypes.table");
const printedDocumentTypes_table_1 = require("../../data/printedDocumentTypes.table");
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 SDParser_1 = __importDefault(require("../../helpers/SDParser"));
/**H. Campos que identifican al documento asociado (H001-H049) */
exports.DocumentoAsociadoSchema = zod_1.z
.object({
// H002
formato: zod_1.z
.nativeEnum(associatedDocumentTypes_table_1.AssociatedDocumentType)
.describe(SDParser_1.default.stringify('H002', { e: 'AssociatedDocumentType' })),
// H004
cdc: CommonValidators_1.default.cdc().optional().describe(SDParser_1.default.stringify('H004')),
// H005
timbrado: CommonValidators_1.default.timbrado()
.optional()
.describe(SDParser_1.default.stringify('H005')),
// H006
establecimiento: CommonValidators_1.default.zeroPadToLength(3)
.optional()
.describe(SDParser_1.default.stringify('H006')),
// H007
punto: CommonValidators_1.default.zeroPadToLength(3)
.optional()
.describe(SDParser_1.default.stringify('H007')),
// H008
numero: CommonValidators_1.default.zeroPadToLength(7)
.optional()
.describe(SDParser_1.default.stringify('H008')),
// H009
tipoDocumentoImpreso: zod_1.z
.nativeEnum(printedDocumentTypes_table_1.PrintedDocumentType)
.optional()
.describe(SDParser_1.default.stringify('H009', { e: 'PrintedDocumentType' })),
// H011
fecha: CommonValidators_1.default.isoDate()
.optional()
.describe(SDParser_1.default.stringify('H011')),
// H012
numeroRetencion: zod_1.z
.string()
.length(15)
.optional()
.describe(SDParser_1.default.stringify('H012')),
// H013
resolucionCreditoFiscal: zod_1.z
.string()
.length(15)
.optional()
.describe(SDParser_1.default.stringify('H013')),
// H014
constanciaTipo: zod_1.z
.nativeEnum(constancyTypes_table_1.ConstancyType)
.optional()
.describe(SDParser_1.default.stringify('H014', { e: 'ConstancyType' })),
// H016
constanciaNumero: zod_1.z
.number()
.optional()
.superRefine((value, ctx) => {
if (value == undefined)
return;
new NumberLenght_1.default(value, ctx).int().length(11);
})
.describe(SDParser_1.default.stringify('H016')),
// H017
constanciaControl: zod_1.z
.string()
.length(8)
.optional()
.describe(SDParser_1.default.stringify('H017')),
/*
OBS: Obligatorio cuando el CDC del DTE referenciado
corresponda a un RUC fusionado
*/
// H018
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_023_MT_V150.pdf/9580922b-5dd5-60f9-4857-ae66a757898f?t=1724956850006
rucFusionado: zod_1.z
.string()
.min(3)
.max(8)
.optional()
.describe(SDParser_1.default.stringify('H018', {
v: 'https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_023_MT_V150.pdf/9580922b-5dd5-60f9-4857-ae66a757898f?t=1724956850006',
d: 'Obligatorio cuando el CDC del DTE referenciado corresponda a un RUC fusionado',
})),
})
.transform((data, ctx) => {
const validator = new ZodValidator_1.default(ctx, data);
/**H002 = 1 */
const isElectronicDocument = data.formato == associatedDocumentTypes_table_1.AssociatedDocumentType.ELECTRONICO;
/**H002 = 2 */
const isPrintedDocument = data.formato == associatedDocumentTypes_table_1.AssociatedDocumentType.IMPRESO;
/**H002 = 3 */
const isConstancyElectronicDocument = data.formato == associatedDocumentTypes_table_1.AssociatedDocumentType.CONSTANCIA_ELECTRONICA;
/**H014 = 2 */
const constancyTipeIsMicroproducer = data.constanciaTipo == constancyTypes_table_1.ConstancyType.CONSTANCIA_DE_MICROPRODUCTORES;
// H004 - cdc
{
/*
Obligatorio si H002=1
No informar si H002 = 2 o 3
*/
if (isElectronicDocument) {
validator.requiredField('cdc');
}
else if (isPrintedDocument || isConstancyElectronicDocument) {
validator.undesiredField('cdc');
}
}
// H005 - timbrado
{
/*
Obligatorio si H002=2
No informar si H002 = 1 o 3
*/
if (isPrintedDocument) {
validator.requiredField('timbrado');
}
else if (isElectronicDocument || isConstancyElectronicDocument) {
validator.undesiredField('timbrado');
}
}
// H006 - establecimiento
{
/*
Obligatorio si H002=2
No informar si H002 = 1 o 3
*/
if (isPrintedDocument) {
validator.requiredField('establecimiento');
}
else if (isElectronicDocument || isConstancyElectronicDocument) {
validator.undesiredField('establecimiento');
}
}
// H007 - punto
{
/*
Obligatorio si H002=2
No informar si H002 = 1 o 3
*/
if (isPrintedDocument) {
validator.requiredField('punto');
}
else if (isElectronicDocument || isConstancyElectronicDocument) {
validator.undesiredField('punto');
}
}
// H008 - numero
{
/*
Obligatorio si H002=2
No informar si H002 = 1 o 3
*/
if (isPrintedDocument) {
validator.requiredField('numero');
}
else if (isElectronicDocument || isConstancyElectronicDocument) {
validator.undesiredField('numero');
}
}
// H009 - tipoDocumentoImpreso
{
/*
Obligatorio si H002=2
No informar si H002 = 1 o 3
*/
if (isPrintedDocument) {
validator.requiredField('tipoDocumentoImpreso');
}
else if (isElectronicDocument || isConstancyElectronicDocument) {
validator.undesiredField('tipoDocumentoImpreso');
}
}
// H011 - fecha
{
/*
Obligatorio si existe el campo H005
No Informar si campo H005 no existe
*/
if (data.timbrado) {
validator.requiredField('fecha');
}
else {
validator.undesiredField('fecha');
}
}
// H014 - constanciaTipo
{
/*
Obligatorio cuando H002 = 3
No informar cuando H002 ≠ 3
*/
if (isConstancyElectronicDocument) {
validator.requiredField('constanciaTipo');
}
else {
validator.undesiredField('constanciaTipo');
}
}
// H016 - constanciaNumero
{
/*
Obligatorio cuando H002 = 3 y H014 = 2
No informar cuando H002 ≠ 3
*/
if (isConstancyElectronicDocument && constancyTipeIsMicroproducer) {
validator.requiredField('constanciaNumero');
}
else if (!isConstancyElectronicDocument) {
validator.undesiredField('constanciaNumero');
}
}
// H017 - constanciaControl
{
/*
Obligatorio cuando H002 = 3 y H014 = 2
No informar cuando H002 ≠ 3
*/
if (isConstancyElectronicDocument && constancyTipeIsMicroproducer) {
validator.requiredField('constanciaControl');
}
else if (!isConstancyElectronicDocument) {
validator.undesiredField('constanciaControl');
}
}
return {
...data,
// H003
formatoDescripcion: db_service_1.default.associatedDocumentTypes._findById(data.formato)?.description,
// H010
tipoDocumentoImpresoDescripcion: db_service_1.default.printedDocumentTypes._findByIdIfExist(data.tipoDocumentoImpreso)?.description,
// H015
constanciaTipoDescripcion: db_service_1.default.constancyTypes._findByIdIfExist(data.constanciaTipo)?.description,
};
});