Documentación Libreria SIAT Java
Descarga de la libreria
Descarga del Zip de la libreria, dentro del encontrará el archivo con el nombre siat-1-1.jar.
Instalación en el repositorio local
Para poder instalar la libreria en su repositorio local, se debe ejecutar el siguiente comando
mvn install:install-file -Dfile=siat-1-1.jar -DgroupId=net.sinticbolivia.facturacion.siat -DartifactId=siat -Dversion=1.1
Agregar la libreria como dependencia a su proyecto Java
Debe insertar el siguiente bloque dentro de su archivo pom.xml
Inicializar la Configuracion de Facturación
import net.sinticbolivia.facturacion.siat.classes.SiatConfig;
.....
SiatConfig config = new SiatConfig();
config.ambiente = SiatConfig.AMBIENTE_PRUEBAS;
config.modalidad = SiatConfig.MOD_COMPUTARIZADA_ENLINEA;
config.nit = 4863532011l;
config.nombreSistema = "MonoBusiness";
config.codigoSistema = "7251F009A4546SD6546";
config.razonSocial = "Sintic Bolivia";
config.tokenDelegado = "eyJ0eXAxxxxxxx";
Sincronización de Catalogos y Parametricas SIAT
protected static void testSync()
{
int sucursal = 0;
int puntoventa = 0;
SiatConfig config = getConfig();
ServiceFacturacionCodigos service = new ServiceFacturacionCodigos();
service.setConfig(config);
RespuestaCuis cuis = service.cuis(sucursal, puntoventa);
//RespuestaCufd cufd = service.cufd(0, 0, cuis);
//logCufd(cufd, config);
ServiceFacturacionSincronizacion serviceSync = new ServiceFacturacionSincronizacion();
serviceSync.setConfig(config);
serviceSync.setCuis(cuis);
for(int i = 0; i < 50; i++)
{
serviceSync.sincronizarActividades(sucursal, puntoventa);
serviceSync.sincronizarFechaHora(sucursal, puntoventa);
serviceSync.sincronizarListaActividadesDocumentoSector(sucursal, puntoventa);
serviceSync.sincronizarListaLeyendasFactura(sucursal, puntoventa);
serviceSync.sincronizarListaMensajesServicios(sucursal, puntoventa);
serviceSync.sincronizarListaProductosServicios(sucursal, puntoventa);
serviceSync.sincronizarParametricaEventosSignificativos(sucursal, puntoventa);
serviceSync.sincronizarParametricaMotivoAnulacion(sucursal, puntoventa);
serviceSync.sincronizarParametricaPaisOrigen(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoDocumentoIdentidad(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoDocumentoSector(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoEmision(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoHabitacion(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoMetodoPago(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoMoneda(sucursal, puntoventa);
serviceSync.sincronizarParametricaTipoPuntoVenta(sucursal, puntoventa);
serviceSync.sincronizarParametricaTiposFactura(sucursal, puntoventa);
serviceSync.sincronizarParametricaUnidadMedida(sucursal, puntoventa);
}
}
Construcción de una Factura
A continuación se muestra un método estatico que contruye una factura y asigna datos de prueba.
public static SiatInvoice buildInvoice(int sucursal, int puntoventa, RespuestaCufd cufd, int documentoSector)
{
SiatConfig config = getConfig();
SiatInvoice invoice = SiatFactory.buildInvoice(documentoSector, config.modalidad);
InvoiceHeader header = (InvoiceHeader)invoice.getHeader();
header.setCodigoCliente("C0001");
header.setCodigoMetodoPago(1);
header.setCodigoMoneda(1); //BOB
header.setCodigoPuntoVenta(puntoventa);
header.setCodigoSucursal(sucursal);
header.setTipoDocumentoIdentidad(1); //CI
header.setDireccion("Direccion X");
header.setFechaEmision(new Date());
header.setLeyenda("Leyenda");
header.setMunicipio("La Paz");
header.setNitEmisor(config.nit);
header.setRazonSocialEmisor(config.razonSocial);
header.setNombreRazonSocial("Perez");
header.setNumeroDocumento("45654981");
header.setNumeroFactura( SiatUtils.rand(1, 1000) );
header.setTelefono("77739265");
header.setTipoCambio(1d);
header.setUsuario("cajero1");
header.setCufd( cufd.getCodigo() );
Double subTotal = 0.0;
for(int i = 0; i < 2; i++)
{
InvoiceDetail detalle1 = (InvoiceDetail)invoice.createDetail();
detalle1.setActividadEconomica( "620000" );
detalle1.setCantidad(1d);
detalle1.setCodigoProducto("P001");
detalle1.setCodigoProductoSin(83131l);
detalle1.setDescripcion("Producto de prueba 001");
detalle1.setMontoDescuento( 0d );
detalle1.setPrecioUnitario( 25.5 );
detalle1.setSubTotal( detalle1.getPrecioUnitario() * detalle1.getCantidad() );
detalle1.setUnidadMedida(58);
if( documentoSector == InvoiceSectors.FACTURA_COMERCIAL_EXPORTACION )
{
InvoiceDetailComercialExportacion detalle = (InvoiceDetailComercialExportacion)detalle1;
detalle.codigoNandina = "0909610000";
}
invoice.addDetail(detalle1);
subTotal += detalle1.getSubTotal();
}
header.setMontoTotal(subTotal);
header.setMontoTotalMoneda(subTotal);
header.setMontoTotalSujetoIva(subTotal);
SiatCufBuilder cufb = new SiatCufBuilder();
cufb.documentoSector = header.getCodigoDocumentoSector();
cufb.fechaEmision = header.getFechaEmision();
cufb.modalidad = config.modalidad;
cufb.nitEmisor = config.nit;
cufb.numeroFactura = header.getNumeroFactura();
cufb.puntoventa = header.getCodigoPuntoVenta();
cufb.sucursal = header.getCodigoSucursal();
cufb.tipoEmision = SiatInvoice.TIPO_EMISION_ONLINE;
cufb.tipoFactura = SiatInvoice.FACTURA_DERECHO_CREDITO_FISCAL;
cufb.cufd = cufd;
if( documentoSector == InvoiceSectors.FACTURA_COMERCIAL_EXPORTACION )
{
InvoiceHeaderComercialExportacion exHeader = (InvoiceHeaderComercialExportacion)header;
exHeader.setCodigoMoneda(2); //USD
exHeader.tipoCambio = 6.86;
exHeader.montoDetalle = exHeader.montoTotal;
exHeader.totalGastosNacionalesFob = exHeader.montoDetalle;
exHeader.costosGastosInternacionales = "[]";
exHeader.costosGastosNacionales = "[]";
exHeader.direccionComprador = "Av. Los Tajibos";
exHeader.incoterm = "CIF";
exHeader.incotermDetalle = "CIF-WEBEX";
exHeader.informacionAdicional = "NINGUNA";
exHeader.puertoDestino = "Arica";
exHeader.lugarDestino = "Chile";
exHeader.codigoPais = "100";
exHeader.totalGastosInternacionales = 0d;
exHeader.montoTotalSujetoIva = 0;
exHeader.numeroDescripcionPaquetesBultos = "NINGUNA";
exHeader.montoTotalMoneda = exHeader.montoDetalle + exHeader.totalGastosInternacionales;
exHeader.montoTotal = exHeader.montoTotalMoneda * exHeader.tipoCambio;
cufb.tipoFactura = SiatInvoice.FACTURA_SIN_DERECHO_CREDITO_FISCAL;
}
header.setCuf( cufb.build() );
return invoice;
}
Recepción de la Factura
protected static void testRecepcionFactura()
{
int sucursal = 0;
int puntoventa = 0;
SiatConfig config = getConfig();
ServiceFacturacionCodigos service = new ServiceFacturacionCodigos();
service.setConfig(config);
RespuestaCuis cuis = service.cuis(sucursal, puntoventa);
RespuestaCufd cufd = service.cufd(sucursal, puntoventa, cuis);
logCufd(cufd, config);
try
{
ServiceFacturacion serviceFac = SiatFactory.obtenerServiceFacturacion(config, cuis, cufd);
for(int i = 0; i < 1; i++)
{
SiatInvoice invoice = buildInvoice(sucursal, puntoventa, cufd,
InvoiceSectors.FACTURA_COMPRA_VENTA
//InvoiceSectors.FACTURA_COMERCIAL_EXPORTACION
);
System.out.println(serviceFac.buildInvoiceXml(invoice));
RespuestaRecepcion res = serviceFac.recepcionFactura(invoice, SiatInvoice.TIPO_EMISION_ONLINE);
if( res.getCodigoEstado() == 908 )
{
RespuestaRecepcion resEstado = serviceFac.verificarEstadoFactura(invoice, SiatInvoice.TIPO_EMISION_ONLINE);
serviceFac.anularFactura(invoice, 1, SiatInvoice.TIPO_EMISION_ONLINE);
}
}
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}