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
JavaScript
"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,
};
});