Skip to content

Catálogos SIFEN ​

Los valores válidos de cada campo con código, centralizados y validados.

ts
import { Iva, MeasureUnit, SaleType, TransactionType, ivaRate } from '@araitek/smartdocjs';

Iva.TEN;                     // '10_percent'
SaleType.CASH;               // 'cash'
MeasureUnit.UNIT;            // 77
TransactionType.SERVICES;    // 2

ivaRate(Iva.TEN);            // 0.10
SaleType.labels();           // { cash: 'Contado', credit: 'Crédito' }
SaleType.values();           // ['cash', 'credit']

Lo que viaja es el valor. El miembro es una constante con ese valor, así que Iva.TEN y '10_percent' son lo mismo, y las dos formas se pueden pasar indistintamente:

ts
Iva.coerce(Iva.TEN);         // '10_percent'
Iva.coerce('10_percent');    // '10_percent'
Iva.is('exempt');            // true

Iva.coerce('Exento');        // ValidationError: la etiqueta no es un valor

Las etiquetas son solo para mostrar en pantalla: se leen con labels() y labelOf(), y no se mandan.

En TypeScript, cada catálogo tiene además un tipo con el mismo nombre, que es la unión de sus valores:

ts
import { SaleType } from '@araitek/smartdocjs';

const tipo: SaleType = 'cash';       // ✓
const otro: SaleType = 'Contado';    // ✗ error de compilación

Cerrados y abiertos ​

Hay dos familias, y la diferencia importa.

Cerrados — valores de texto propios de SmartDoc. Mandar otra cosa es un error, y el SDK lo rechaza localmente con las opciones válidas.

Abiertos — códigos numéricos de SIFEN. La DNIT define el catálogo completo y la API lo acepta entero, así que el SDK deja pasar cualquier código oficial aunque no lo liste por nombre. Un código nuevo no obliga a esperar una versión del paquete.

ts
TransactionType.coerce(99);    // pasa: catálogo abierto
Currency.coerce('EUR');        // ValidationError: catálogo cerrado

TransactionType.isOpen();      // true
Currency.isOpen();             // false

SaleType ​

Cerrado. Campo saleType.

MiembroValorEtiqueta
SaleType.CASHcashContado
SaleType.CREDITcreditCrédito

El valor no es la etiqueta

Lo que viaja en el campo es 'cash' o 'credit'. 'Contado' y 'Crédito' son las etiquetas para mostrar en pantalla, y no se aceptan como valor: mandar 'Contado' lanza ValidationError sugiriendo 'cash'.

Iva ​

Cerrado. Campo items[].ivaType.

MiembroValorEtiquetaTasa
Iva.TEN10_percent10%0.10
Iva.FIVE5_percent5%0.05
Iva.EXEMPTexemptExento0
Iva.MIXED_TENmixed_10_percentMixto 10%0.10
Iva.MIXED_FIVEmixed_5_percentMixto 5%0.05

Los dos mixtos exigen ivaBase: el porcentaje de la línea que está gravado.

ts
import { Iva, isMixedIva, ivaRate } from '@araitek/smartdocjs';

ivaRate(Iva.FIVE);          // 0.05
isMixedIva(Iva.MIXED_TEN);  // true

El IVA va incluido en el precio

No se suma. Un ítem de 1.100.000 al 10% contiene 100.000 de IVA (1.100.000 / 11) sobre una base gravada de 1.000.000. Al 5% el divisor es 21.

Currency ​

Cerrado. Campo currency.

MiembroValorEtiqueta
Currency.PYGPYGGuaraníes
Currency.USDUSDDólares Americanos
Currency.PABPABBalboas

Con cualquiera distinta de PYG hace falta exchangeRate.

ClientType ​

Cerrado. Campo clientType.

MiembroValorEtiqueta
ClientType.PERSONpersonPersona
ClientType.ENTITYentityEntidad
ClientType.FOREIGN_ENTITYforeign_entityCliente Extranjero
ClientType.NOT_NOMINATEDnot_nominatedSin Nombre
ClientType.DIPLOMATICdiplomaticDiplomático
ClientType.GOVERNMENTgovernmentGobierno

Los recibos aceptan solo los tres primeros. FOREIGN_ENTITY es el único tipo que puede llevar dirección sin códigos geográficos paraguayos.

AssociatedDocumentType ​

Cerrado. Campo associatedDocumentType.

MiembroValorEtiqueta
ELECTRONIC_INVOICEelectronic_invoiceFactura Electrónica
PRINTED_INVOICEprinted_invoiceFactura Impresa
RETENTION_CERTIFICATEretention_certificateConstancia de Retención
NONEnoneNinguno

Notas de crédito y débito aceptan los dos primeros; los recibos aceptan además NONE.

ReceiptPaymentMethod ​

Cerrado. Campo paymentMethod del recibo.

MiembroValorEtiqueta
CASHcashEfectivo
CHECKcheckCheque
BANK_TRANSFERbank_transferTransferencia Bancaria

Con CHECK hacen falta checkBank y checkNumber.

ProviderType y ProviderDocumentType ​

Cerrados. Campos providerType y providerDocumentType de la autofactura.

ProviderTypeValorEtiqueta
NO_RUCno_rucNo Contribuyente
FOREIGNforeignExtranjero
ProviderDocumentTypeValorEtiqueta
PARAGUAYAN_IDparaguayan_dniCédula paraguaya
PASSPORTpassportPasaporte
FOREIGN_IDforeign_dniCédula Extranjera
RESIDENCE_CARDresidence_cardCarnet de residencia

TransactionType ​

Abierto. Campo transactionTypeCode, del 1 al 13.

CódigoMiembroDescripción
1MERCHANDISE_SALEVenta de mercadería
2SERVICESPrestación de servicios
3MIXEDMixto (venta de mercadería y servicios)
4FIXED_ASSET_SALEVenta de activo fijo
5CURRENCY_SALEVenta de divisas
6CURRENCY_PURCHASECompra de divisas
7PROMOTION_OR_SAMPLESPromoción o entrega de muestras
8DONATIONDonación
9ADVANCE_PAYMENTAnticipo
10PRODUCT_PURCHASECompra de productos
11SERVICES_PURCHASECompra de servicios
12TAX_CREDIT_SALEVenta de crédito fiscal
13MEDICAL_SAMPLESMuestras médicas (Art. 3 RG 24/2014)

MeasureUnit ​

Abierto. Campo items[].measureUnit. Por omisión UNIT (77).

CódigoMiembroDescripción
77UNITUnidad
885GLOBAL_UNITUnidad Medida Global
2329INTERNATIONAL_UNITUnidad Internacional
569RATIONRación
104DETERMINATIONDeterminación
2366COST_PER_THOUSANDCosto por Mil
891PER_MILEAGEPor Milaje
95MILLIMETERMilímetros
91CENTIMETERCentímetros
87 / 108METER / METER_ALTMetros
660LINEAR_METERMetro lineal
625KILOMETERKilómetros
94INCHPulgadas
103YARDYardas
96SQUARE_MILLIMETERMilímetros cuadrados
92SQUARE_CENTIMETERCentímetros cuadrados
109SQUARE_METERMetros cuadrados
869HECTAREHectáreas
93CUBIC_CENTIMETERCentímetros cúbicos
110CUBIC_METERMetros cúbicos
88MILLILITERMililitros
89LITERLitros
90MILLIGRAMMiligramos
86GRAMGramos
83KILOGRAMKilogramos
99TONTonelada
79KILOGRAM_PER_SQUARE_METERKilogramos por metro cuadrado
666SECONDSegundo
101MINUTEMinuto
100HOURHora
102DAYDía
98MONTHMes
97YEARAño

RemissionReason ​

Abierto. Campo reasonCode de la nota de remisión. Por omisión SALE (1).

CódigoMiembroDescripción
1SALETraslado por ventas
2CONSIGNMENTTraslado por consignación
3EXPORTExportación
4PURCHASETraslado por compra
5IMPORTImportación
6RETURNTraslado por devolución
7BETWEEN_COMPANY_LOCATIONSTraslado entre locales de la empresa
8TRANSFORMATIONTraslado de bienes por transformación
9REPAIRTraslado de bienes por reparación
10MOBILE_ISSUERTraslado por emisor móvil
11EXHIBITIONExhibición o demostración
12TRADE_FAIRParticipación en ferias
13PARCELTraslado de encomienda
14SEIZUREDecomiso
99OTHEROtro

RemissionResponsible ​

Abierto. Campo responsibleCode.

CódigoMiembroDescripción
1INVOICE_ISSUEREmisor de la factura
2INVOICE_AND_GOODS_HOLDERPoseedor de la factura y bienes
3CARRIER_COMPANYEmpresa transportista
4CUSTOMS_BROKERDespachante de Aduanas
5TRANSPORT_AGENTAgente de transporte o intermediario

Transporte ​

Abiertos. Campos de la nota de remisión.

CatálogoCampoValores
TransportTypetransportTypeCode1 OWN (Propio), 2 THIRD_PARTY (Tercero)
TransportModetransportModeCode1 LAND, 2 RIVER, 3 AIR, 4 MULTIMODAL
VehicleIdentificationTypetransportVehicleDocumentTypeCode1 VIN, 2 REGISTRATION

FreightResponsible (campo transportResponsibleCode):

CódigoMiembroDescripción
1INVOICE_ISSUEREmisor de la Factura Electrónica
2INVOICE_RECEIVERReceptor de la Factura Electrónica
3THIRD_PARTYTercero
4TRANSPORT_AGENTAgente intermediario del transporte
5OWN_TRANSPORTTransporte propio

El tipo de vehículo no es un catálogo

Vehicle.type es una descripción libre de 4 a 10 caracteres —'CAMION', 'Camioneta'—, distinta de TransportType, que sí es un código.

CarrierDocumentType ​

Abierto. Campo carrierDocumentTypeCode.

CódigoMiembroDescripción
1PARAGUAYAN_IDCédula paraguaya
2PASSPORTPasaporte
3FOREIGN_IDCédula extranjera
4RESIDENCE_CARDCarnet de residencia
5UNNAMEDInnominado
6DIPLOMATIC_CARDTarjeta Diplomática de exoneración fiscal
9UNSPECIFIEDNo especificado

PrintedDocumentType ​

Abierto. Campo associatedDocumentPrintedType.

CódigoMiembroDescripción
1INVOICEFactura
2CREDIT_NOTENota de crédito
3DEBIT_NOTENota de débito
4REMISSION_NOTENota de remisión
5WITHHOLDING_RECEIPTComprobante de retención

Países ​

249 códigos ISO-3. Van como datos, no como catálogo.

ts
import { constants } from '@araitek/smartdocjs';

const { countries } = constants;

countries.PARAGUAY;            // 'PRY'
countries.name('BRA');         // 'Brasil'
countries.code('Argentina');   // 'ARG'
countries.search('islas');     // [['COK', 'Islas Cook'], ['ALA', 'Islas Åland'], ...]
countries.isValid('XXX');      // false

Geografía ​

18 departamentos, 262 distritos y 6419 ciudades, embebidos en el paquete.

ts
import { geo } from '@araitek/smartdocjs';

const ciudad = geo.findCity('Asunción');
ciudad.code;              // 1
ciudad.district.code;
ciudad.department.code;

geo.searchCities('encarn');   // búsqueda parcial
geo.city(2226);               // por código
geo.departments();            // los 18

Ver Documentos para cómo se usan.

Estados ​

19 estados, compartidos por los seis tipos de documento. Ver Documentos.

ts
import { DocumentStatus, DocumentType, isSuccess, isTerminal } from '@araitek/smartdocjs';

isTerminal(DocumentStatus.APPROVED_BY_SET);                      // true
isTerminal(DocumentStatus.GENERATED, DocumentType.RECEIPT);      // true
isSuccess(DocumentStatus.GENERATED, DocumentType.INVOICE);       // false

Permisos ​

23 permisos, 12 de lectura y 11 de escritura. No hay jerarquía entre ellos.

ts
import { Permission, constants } from '@araitek/smartdocjs';

Permission.READ_INVOICES;             // 'read_invoices'
constants.permissions.ALL;            // los 23
constants.permissions.READ;           // los 12 de lectura