@facturacr/atv-sdk
Version:
Librería (SDK) de Javascript/NodeJS para acceder al API de Administración Tributaria Virtual (ATV) del Ministerio de Hacienda.
165 lines (150 loc) • 3.81 kB
text/typescript
/* references
https://www.hacienda.go.cr/ATV/ComprobanteElectronico/frmAnexosyEstructuras.aspx#
https://www.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4/ANEXOS%20Y%20ESTRUCTURAS.pdf
*/
export interface Impuesto {
Codigo: string;
Tarifa?: number;
Monto?: number;
}
export interface LineaDetalle {
NumeroLinea?: string;
Codigo?: string; // CAByS - https://www.bccr.fi.cr/seccion-indicadores-economicos/cat%C3%A1logo-de-bienes-y-servicios
Cantidad?: number;
UnidadMedida?: string;
Detalle: string;
PrecioUnitario: number;
MontoTotal?: number;
SubTotal?: number;
BaseImponible?: number;
Impuesto?: Impuesto;
ImpuestoAsumidoEmisorFabrica?: number;
MontoTotalLinea?: number;
}
export interface DetalleServicio {
LineaDetalle: Array<LineaDetalle>;
}
export interface TotalDesgloseImpuesto {
Codigo: string;
CodigoTarifaIVA: string;
// ... other properties
TotalMontoImpuesto: number;
}
export interface Resumen {
CodigoTipoMoneda?: {
CodigoMoneda: string;
TipoCambio: string;
};
TotalServGravados: number;
TotalServExentos: number;
// TotalServExonerado: number;
TotalMercanciasGravadas?: number;
TotalMercanciasExentas?: number;
TotalGravado?: number;
TotalExento: number;
TotalExonerado: number;
TotalVenta: number;
TotalDescuentos?: number;
TotalVentaNeta?: number;
TotalImpuesto: number;
TotalDesgloseImpuesto?: TotalDesgloseImpuesto[];
MedioPago?: {
TipoMedioPago: string;
};
TotalComprobante: number;
}
export interface Persona {
Nombre: string;
Identificacion: {
Tipo?: '01' | '02';
Numero: string;
};
NombreComercial?: string;
Ubicacion?: {
Provincia?: '1' | '2' | '3' | '4' | '5' | '6' | '7';
Canton?: string;
Distrito?: string;
Barrio?: string;
OtrasSenas?: string;
};
Telefono?: {
CodigoPais?: string;
NumTelefono?: string;
};
Fax?: {
CodigoPais?: string;
NumTelefono?: string;
};
CorreoElectronico?: string;
}
export interface Message {
Mensaje: string;
DetalleMensaje: string;
}
export interface InformacionReferencia {
TipoDocIR: string;
Numero: string;
FechaEmisionIR: string;
Codigo: string;
Razon: string;
}
export interface AtvDocument {
Clave: string;
ProveedorSistemas: string;
CodigoActividadEmisor: string;
CodigoActividadReceptor?: string; // TODO check supported docs
NumeroConsecutivo: string;
FechaEmision?: string;
Emisor: Persona;
Receptor?: Persona;
CondicionVenta?: string;
PlazoCredito?: string;
DetalleServicio?: DetalleServicio;
ResumenFactura: Resumen;
Otros?: {
OtroTexto: string;
};
InformacionReferencia?: InformacionReferencia;
}
export interface XMLRawDocument extends AtvDocument {
}
interface MensajeReceptor {
Clave: string;
NumeroCedulaEmisor: string;
FechaEmisionDoc: string;
Mensaje: string;
DetalleMensaje: string;
MontoTotalImpuesto: number;
CodigoActividad: string;
CondicionImpuesto: string;
MontoTotalDeGastoAplicable: number;
TotalFactura: number;
NumeroCedulaReceptor: string;
NumeroConsecutivoReceptor: string;
}
export interface InvoiceDocumentContainer {
[key: string]: AtvDocument | MensajeReceptor;
}
export type ConfirmationMessageRaw = {
MensajeHacienda: {
Clave: string;
NombreEmisor: string;
TipoIdentificacionEmisor: string;
NumeroCedulaEmisor: string;
TipoIdentificacionReceptor: string;
NumeroCedulaReceptor: string;
Mensaje: string;
DetalleMensaje: string;
MontoTotalImpuesto: string;
TotalFactura: string;
'@_xmlns': string;
'ds:Signature': {
'@_xmlns:ds': string;
'@_Id': string;
'ds:SignedInfo': unknown;
'ds:SignatureValue': unknown;
'ds:KeyInfo': unknown;
'ds:Object': unknown;
};
};
}