facturacionelectronicapy-ts-xmlgen
Version:
Genera el contenido del archivo XML del Documento electrónico exigido por la SET
187 lines (186 loc) • 7.25 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.NominationEventSchema = void 0;
const zod_1 = require("zod");
const operationTypes_table_1 = require("../../data/operationTypes.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 taxpayerTypes_table_1 = require("../../data/taxpayerTypes.table");
const taxpayerNotTaxpayer_table_1 = require("../../data/taxpayerNotTaxpayer.table");
const idDocsForNominationEvent_table_1 = require("../../data/idDocsForNominationEvent.table");
const SDParser_1 = __importDefault(require("../../helpers/SDParser"));
// VER: https://www.dnit.gov.py/documents/20123/420595/NT_E_KUATIA_014_MT_V150X.pdf/dbbb0294-8678-357a-1657-bcd0318077f9?t=1706189857282
// GENFE001
exports.NominationEventSchema = zod_1.z
.object({
// GENFE002
cdc: CommonValidators_1.default.cdc().describe(SDParser_1.default.stringify('GENFE002')),
// GENFE003
motive: CommonValidators_1.default.motive().describe(SDParser_1.default.stringify('GENFE003')),
// GENFE004
contribuyente: CommonValidators_1.default.taxpayer().describe(SDParser_1.default.stringify('GENFE004')),
// GENFE005
pais: CommonValidators_1.default.country().describe(SDParser_1.default.stringify('GENFE005', {
e: 'Country'
})),
// GENFE007
tipoReceptor: zod_1.z
.nativeEnum(taxpayerTypes_table_1.TaxpayerType)
.optional()
.describe(SDParser_1.default.stringify('GENFE007', { e: 'TaxpayerType' })),
// para calcular GENFE008 y GENFE009
ruc: CommonValidators_1.default.ruc()
.optional()
.describe(SDParser_1.default.stringify('GENFE008 y GENFE009')),
// GENFE010
documentoTipo: zod_1.z
.nativeEnum(idDocsForNominationEvent_table_1.IdentityDocForNominationEvent)
.optional()
.describe(SDParser_1.default.stringify('GENFE010', { e: 'IdentityDocForNominationEvent' })),
// GENFE011
descripcionTipoDocumento: CommonValidators_1.default.identityDocDescription()
.optional()
.describe(SDParser_1.default.stringify('GENFE011')),
// GENFE012
documentoNumero: CommonValidators_1.default.identityDocNumber()
.optional()
.describe(SDParser_1.default.stringify('GENFE012')),
// GENFE013
razonSocial: CommonValidators_1.default.legalName()
.optional()
.describe(SDParser_1.default.stringify('GENFE013')),
// GENFE014
nombreFantasia: CommonValidators_1.default.tradeName()
.optional()
.describe(SDParser_1.default.stringify('GENFE014')),
// GENFE015
direccion: CommonValidators_1.default.address()
.optional()
.describe(SDParser_1.default.stringify('GENFE015')),
// GENFE016
numeroCasa: CommonValidators_1.default.houseNumber()
.optional()
.describe(SDParser_1.default.stringify('GENFE016')),
// GENFE017
departamento: CommonValidators_1.default.department()
.optional()
.describe(SDParser_1.default.stringify('GENFE017', {
e: 'Department'
})),
// GENFE019
distrito: CommonValidators_1.default.district()
.optional()
.describe(SDParser_1.default.stringify('GENFE019')),
// GENFE021
ciudad: CommonValidators_1.default.city()
.optional()
.describe(SDParser_1.default.stringify('GENFE021')),
// GENFE023
telefono: CommonValidators_1.default.tel()
.optional()
.describe(SDParser_1.default.stringify('GENFE023')),
// GENFE024
celular: CommonValidators_1.default.cel()
.optional()
.describe(SDParser_1.default.stringify('GENFE024')),
// GENFE025
email: CommonValidators_1.default.email()
.optional()
.describe(SDParser_1.default.stringify('GENFE025')),
// GENFE026
codigo: CommonValidators_1.default.clientCode()
.optional()
.describe(SDParser_1.default.stringify('GENFE026')),
// GENFE027
tipoOperacion: zod_1.z
.nativeEnum(operationTypes_table_1.OperationTypeNoB2G)
.describe(SDParser_1.default.stringify('GENFE027', { e: 'OperationTypeNoB2G' })),
})
.transform((data, ctx) => {
const validator = new ZodValidator_1.default(ctx, data);
CommonValidators_1.default.location(ctx, data.departamento, data.distrito, data.ciudad);
/**GENFE004 = 1 */
const isTaxpayer = data.contribuyente == taxpayerNotTaxpayer_table_1.TaxpayerNotTaxpayer.CONTRIBUYENTE;
/**GENFE004 = 2 */
const isNotTaxpayer = data.contribuyente == taxpayerNotTaxpayer_table_1.TaxpayerNotTaxpayer.NO_CONTRIBUYENTE;
/**GENFE010 = 9 */
const isOther = data.documentoTipo == idDocsForNominationEvent_table_1.IdentityDocForNominationEvent.OTRO;
// GENFE007, GENFE008, GENFE009
{
/*
Obligatorio si GENFE004=1
No informar si GENFE004=2
*/
if (isTaxpayer) {
validator.requiredField('tipoReceptor');
validator.requiredField('ruc');
}
else if (isNotTaxpayer) {
validator.undesiredField('tipoReceptor');
validator.undesiredField('ruc');
}
}
// GENFE010, GENFE012
{
/*
Obligatorio si GENFE004=2
*/
if (isNotTaxpayer) {
validator.requiredField('documentoTipo');
validator.requiredField('documentoNumero');
}
}
// GENFE011 - descripcionTipoDocumento
{
/*
Si GENFE010 = 9 informar el tipo de
documento de identidad del
receptor
*/
if (isOther) {
validator.requiredField('descripcionTipoDocumento');
}
else {
data.descripcionTipoDocumento =
db_service_1.default.identityDocsForNominationEvent._findByIdIfExist(data.documentoTipo)?.description;
}
}
// GENFE016
{
/*
Campo obligatorio si se informa el campo GENFE015
*/
if (data.direccion) {
validator.requiredField('numeroCasa');
}
}
// GENFE023
{
/*DELETE: una vez se resuelva
Debe incluir el prefijo de la ciudad si GENFE005= PRY
*/
}
const [rucID, rucDV] = data.ruc?.split('-') ?? [];
return {
...data,
// GENFE006
paisDescripcion: db_service_1.default.countries._findByIdIfExist(data.pais)
?.description,
// GENFE008
rucID: rucID,
// GENFE009
rucDV: rucDV,
// GENFE018
descripcionDepartamento: db_service_1.default.departments._findByIdIfExist(data.departamento)?.description,
// GENFE020
descripcionDistrito: db_service_1.default.districts._findByIdIfExist(data.distrito)
?.description,
// GENFE022
descripcionCiudad: db_service_1.default.cities._findByIdIfExist(data.ciudad)
?.description,
};
});