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.5 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();

Validación de un NIT

int codigo_sucursal = 0;
int codigo_puntoventa = 0;
var config = obtenerConfiguracion(); var serviceCodigos = new ServiceFacturacionCodigos(); serviceCodigos.setConfig(config);
var resCuis = serviceCodigos.ObtenerCuis(codigo_puntoventa, codigo_sucursal);
serviceCodigos.cuis = resCuis.codigo;
ulong nit = 21423445;
var res = serviceCodigos.VerificarNit(nit, codigo_sucursal);

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 la instancia del objeto factura

int documentoSector = 1; //compra venta
int modalidad = 1; //electronica
Invoice invoice = SiatFactory.ObtenerFactura(documentoSector, modalidad);

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());


Sintic Bolivia Contacto whatsapp