Documentacion Libreria Siat .NET
Documentacion de Desarrollador Libreria Siat V2 .NET
Para una mejor compresión de nuestra documentación, es necesario que el desarrollador tenga conocimiento del Anexo técnico Siat de Impuestos Nacionales de Bolivia.
Requerimientos
- Version .NET Framework 4.0 o superior
Carga de dependencias
La libreria o ensamblado libSiatNet.dll debe ser referenciada en su proyecto
Inicializacion de configuracion
Para la modalidad electronica, los formatos de archivos soportados por la libreria para las firmas digitales, es el formato PEM
var config = new SiatConfig()
{
ambiente = (int)Ambientes.AMBIENTE_PRUEBAS,
modalidad = (int)ModalidadFacturacion.COMPUTARIZADA_ENLINEA,
codigoSistema = "6D32E2B9FBF0FE7B3BADFDG",
nit = 12454656,
nombreSistema = "SAGE",
razonSocial = "DESARROLLANDO TE",
tipo = "",
tokenDelegado = "eyJ0eXAiOQ",
certFilename = BASEPATH + "/certs/certificado.pem";
certPrivateKeyFilename = BASEPATH + "/certs/llave_privada.pem";
ciudad = "COCHABAMBA",
telefono = "32543543"
};
Servicio de Codigos
Obtención de codigo CUIS
int codigoPuntoVenta = 0;
int codigoSucursal = 0;
var config = obtenerConfiguracion();
var serviceCodigos = new ServiceFacturacionCodigos();
serviceCodigos.setConfig(config);
var resCuis = serviceCodigos.ObtenerCuis(codigoPuntoVenta, codigoSucursal);
Obtención de código CUFD
Para poder obtener el CUFD, es necesario antes obtener el CUIS y asignarlo al servicio de obtencion de codigos
var config = obtenerConfiguracion();
var serviceCodigos = new ServiceFacturacionCodigos();
serviceCodigos.setConfig(config);
serviceCodigos.cuis = resCuis.codigo;
var resCufd = serviceCodigos.ObtenerCufd();
Servicio de Sincronizacion
El servicio de sincronización obtiene parametricas e información importante para poder construir una factura
Para la utilización de este servicio, es necesario obtener el codigo CUIS antes de realizar cualquier operación
Ejemplo de obtención de listado de eventos significativos
var config = obtenerConfiguracion(); //funcion a implementar por el dev
var resCuis = obtenerCUIS(config); //funcion a implementar por el dev
//##obtener listado de eventos
var serviceSync = new ServiceFacturacionSincronizacion();
serviceSync.setConfig(config);
serviceSync.cuis = resCuis.codigo;
var eventsList = serviceSync.sincronizarParametricaEventosSignificativos();
Servicio de Operaciones
El servicio de operaciones nos permite registrar puntos de venta, eventos de contingencia, etc.
Registro de Punto de Venta
int codigoTipoPuntoVenta = 5; //tipo punto venta cajero
var config = GetConfig();
obtenerCuis(sucursal, puntoventa);
var service = new ServiceFacturacionOperaciones();
service.SetConfig(config);
service.cuis = gCuis.codigo;
var res = await service.RegistroPuntoVenta(sucursal, codigoTipoPuntoVenta, "Punto de Venta X", "Punto de Venta X");
Console.WriteLine(res.ToXml());
Registro de un evento
Para poder registrar un evento es necesario obtener el CUIS antes, y en algunos casos es necesario el CUFD (revisar documentacion SIAT, anexo tecnico).
Tambien se debe obtener el codigo del evento que se quiere registrar (este evento se debe obtener utilizando el servicio de sincronizacion)
var config = obternetConfiguracion();
var resCuis = obtenerCUIS($config);
var resCufd = obtenerCUFD($config);
var event = obtenerEvento(config, resCuis, resCufd);
var serviceOps = new ServiceOperaciones();
serviceOps.cuis = resCuis.codigo;
serviceOps.cufd = resCufd.codigo;
serviceOps.SetConfig(config);
var fechaInicio = DateTime.Now.Subtract(TimeSpan.FromDays(3)); //fecha anterior del evento
var fechaFin = DateTime.Now.Subtract(TimeSpan.FromDays(1)); //fecha anterior del evento
//##este cufd es cuando paso el evento
string cufdAntiguo = "";
var resEvent = serviceOps.registroEventoSignificativo(event.codigoClasificador, event.descripcion, cufdAntiguo, fechaInicio, fechaFin);
Obtener el Servicio de Facturación
El servicio de facturación, se obtiene utilizando la modalidad asignada en la configuración, ya sea computarizada o electrónica
var config = GetConfig();
var cuis = obtenerCuis(sucursal, puntoventa);
var cufd = obtenerCufd(sucursal, puntoventa);
ServiceFacturacion service = SiatFactory.ObtenerServicioFacturacion(config,
cuis.codigo,
cufd.codigo,
cufd.codigoControl
);
//asignar true en caso de habilitar la depuracion e impresion de datos por consola
service.debug = true;
Envio/Recepción de la Factura
var res = await service.recepcionFactura(invoice, (int)tipoEmision, (int)tipoFactura);
string invoiceXml = service.buildInvoiceXml(invoice);
Console.WriteLine("RESPUESTAn{0}", res.ToXml().ToString());
Console.WriteLine("INVOICE URL: {0}", invoice.GetUrl());
if ( int.Parse(res.codigoEstado) == 908 )
{
//TODO: Generar el pdf de la factura y enviar por email
}
Envio/Recepción Paquete
Para poder enviar un paquete, se debe tener un evento registrado previamente, juntamente con las facturas generadas para ese evento.
var config = GetConfig();
var cuis = obtenerCuis(sucursal, puntoventa);
var cufd = obtenerCufd(sucursal, puntoventa);
string cafc = "ECEFG23432D"; //CAFC para eventos 5,6,7
int codigoEvento = 2; //inaccesibilidad a los servicios de la administracion tributaria
string eventoDesc = "inaccesibilidad a los servicios de la administracion tributaria";
string cufd_antiguo = "BQUFBQlllSUVBNzzRENDg5MEQxRUY=QsKhdFNPS0ZMV1VI0NDcwMkUxOUE3N";
string codigo_control_antiguo = "09D56EEEACF6D74";
DateTime fechaInicio = DateTime.Parse("2022-11-04 10:15:00");
DateTime fechaFin = DateTime.Parse("2022-11-04 10:16:00");
//registro del evento
var servicio = new ServiceFacturacionOperaciones()
{
cuis = cuis.codigo,
cufd = cufd.codigo,
debug = true
};
servicio.SetConfig(config);
resEvento = await servicio.RegistroEventoSignificativo(
sucursal,
puntoventa,
codigoEvento,
eventoDesc,
cufd_antiguo,
fechaInicio,
fechaFin
);
//generar/obtener facturas para el evento
var facturas = obtenerFacturas(cufd_antiguo, codigo_control_antiguo, fechaInicio, fechaFin);
var servicio = SiatFactory.ObtenerServicioFacturacion(
config,
cuis.codigo,
cufd.codigo,
cufd.codigoControl
);
servicio.debug = true;
var res = await servicio.recepcionPaqueteFactura(
facturas,
resEvento.codigoRecepcionEventoSignificativo,
(int)TiposDeFactura.FACTURA_CREDITO_FISCAL,
codigoEvento > 4 ? cafc : ""
);
Console.WriteLine(res.ToXml().ToString());