Documentacion Libreria Siat PHP

Documentacion de Desarrollador Libreria Siat V2 PHP

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 de php 7.x o superior
  • Modulo php soap
  • Modulo php openssl


Carga de dependencias


La libreria cuenta con un archivo de auto carga de clases cumpliendo estandar PSR-4.

Bastará con solo incluir el archivo autoload.php


require_once ‘autoload.php’;


Inicializacion de configuracion


$config = new Siatconfig([
'nombreSistema'    => "SISTEMA MONOBUSINESS",
‘codigoSistema'    => '6D32',
'nit'            => 999999,
'razonSocial'    => "EMPRESA. S.R.L.",
'modalidad'        => ServicioSiat::MOD_COMPUTARIZADA_ENLINEA,
'ambiente'        => ServicioSiat::AMBIENTE_PRUEBAS,
'tokenDelegado'    => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJOdWJldGljNTAyMCIsImNvZGlnb1Npc3RlbWEiOiI3MUU3NjM4RkZCRTBCRkI4NjUzMDZDNyIsIm5pdCI6Ikg0c0lBQUFBQUFBQUFETzJOREV5TURVd01nQUFVTGFfOXdrQUFBQT0iLCJpZCI6MTE2MDA1MywiZXhwIjoxNjgzNzYzMjAwLCJpYXQiOjE2NTIyOTA3NzYsIm5pdERlbGVnYWRvIjozOTQyMDUwMjAsInN1YnNpc3RlbWEiOiJTRkUifQ.tNdDO0ZqTlbPJ5pvJ2Tw3faVsPd3P8CB2tRS2a7KTyXuigguBQyFdcI5O5fehYGdqpi1IpaeXrR0y8b2kl-yOA',
'pubCert'        => 'ruta_al_certificado.pem',
'privCert'        => 'ruta_a_la_firma_digital.pem',
]);


Servicio de Codigos


Obtención de codigo CUIS


$config = obtenerConfiguracion();
$codigoPuntoVenta = 0;
$codigoSucursal = 0;
$serviceCodigos = new ServicioFacturacionCodigos(null, null, $config->tokenDelegado);
$serviceCodigos->setConfig((array)$config);
$resCuis = $serviceCodigos->cuis($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


$config = obtenerConfiguracion();
$codigoPuntoVenta = 0;
$codigoSucursal = 0;
$serviceCodigos = new ServicioFacturacionCodigos(null, null, $config->tokenDelegado);
$serviceCodigos->setConfig((array)$config);
$serviceCodigos->cuis = $resCuis->RespuestaCuis->codigo;
$resCufd = $serviceCodigos->cufd($codigoPuntoVenta, $codigoSucursal);

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


$config = obtenerConfiguracion(); //funcion a implementar por el dev
$resCuis = obtenerCUIS($config); //funcion a implementar por el dev
//##obtener listado de eventos
$serviceSync = new ServicioFacturacionSincronizacion($resCuis->RespuestaCuis->codigo);
$serviceSync->setConfig((array)$config);
$eventsList = $serviceSync->sincronizarParametricaEventosSignificativos();

Servicio de Operaciones


El servicio de operaciones nos permite registrar puntos de venta, eventos de contingencia, etc.


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)


$config = obternetConfiguracion();
$resCuis = obtenerCUIS($config);
$resCufd = obtenerCUFD($config);
$event = obtenerEvento($config, $resCuis, $resCufd);
$serviceOps = new ServicioOperaciones($resCuis->RespuestaCuis->codigo, $resCufd->RespuestaCufd->codigo);
$serviceOps->setConfig((array)$config);
$fechaInicio     = date('Y-m-dTH:i:s.v', time() - (86400 * 3)); //fecha anterior del evento
$fechaFin         = date('Y-m-dT16:00:00', time() - (86400 * 1)); //fecha anterior del evento
//##este cufd es cuando paso el evento
$cufdAntiguo    = '';
$resEvent = $serviceOps->registroEventoSignificativo($event->codigoClasificador, $event->descripcion, $cufdAntiguo, $fechaInicio, $fechaFin);
print_r($resEvent);

Obtencion del Servicio de Facturacion

$config = obternetConfiguracion();
$resCuis = obtenerCuis($codigoPuntoVenta, $codigoSucursal);
$resCufd = obtenerCufd($codigoPuntoVenta, $codigoSucursal, $resCuis->RespuestaCuis->codigo);   
$service = SiatFactory::obtenerServicioFacturacion($config, $resCuis->RespuestaCuis->codigo, $resCufd->RespuestaCufd->codigo, $resCufd->RespuestaCufd->codigoControl);

Generacion de la Factura

$factura = new CompraVenta();

//##cabecera de la factura
$factura->cabecera->razonSocialEmisor    = $config->razonSocial;
$factura->cabecera->municipio            = 'La Paz';
$factura->cabecera->telefono            = $config->telefono;
$factura->cabecera->numeroFactura        = 10;
$factura->cabecera->codigoSucursal        = $codigoSucursal;
$factura->cabecera->direccion            = 'Direccion #109';
$factura->cabecera->codigoPuntoVenta    = $codigoPuntoVenta;
$factura->cabecera->fechaEmision        = date('Y-m-dTH:i:s.v');
$factura->cabecera->nombreRazonSocial    = 'Perez';
$factura->cabecera->codigoTipoDocumentoIdentidad    = 1; //CI - CEDULA DE IDENTIDAD
$factura->cabecera->numeroDocumento        = 2287567;
$factura->cabecera->codigoCliente        = 'CC-2287567';
$factura->cabecera->codigoMetodoPago    = 1;
$factura->cabecera->montoTotal            = $subTotal;
$factura->cabecera->montoTotalMoneda    = $factura->cabecera->montoTotal;
$factura->cabecera->montoTotalSujetoIva    = $factura->cabecera->montoTotal;
$factura->cabecera->descuentoAdicional    = 0;
$factura->cabecera->codigoMoneda        = 1; //BOLIVIANO
$factura->cabecera->tipoCambio            = 1;
$factura->cabecera->usuario                = 'MonoBusiness User 01';
//##detalle de la factura
$detalle = new InvoiceDetail();
$detalle->cantidad                = 1;
$detalle->actividadEconomica    = $codigoActividad;
$detalle->codigoProducto        = 'D001-' . rand(1, 4000);
$detalle->codigoProductoSin        = $codigoProductoSin;
$detalle->descripcion            = 'Nombre del producto #0' . ($i + 1);
$detalle->precioUnitario        = 10 * rand(1, 4000);
$detalle->montoDescuento        = 0;
$detalle->subTotal                = $detalle->cantidad * $detalle->precioUnitario;
//##adicionar el detalle a la factura
$factura->detalle[] = $detalle;

Facturacion Telecomunicaciones

$factura = new ElectronicaTelecomunicaciones();

//##cabecera de la factura
$factura->cabecera->razonSocialEmisor    = $config->razonSocial;
$factura->cabecera->municipio            = 'La Paz';
$factura->cabecera->telefono            = $config->telefono;
$factura->cabecera->numeroFactura        = 10;
$factura->cabecera->codigoSucursal        = $codigoSucursal;
$factura->cabecera->direccion            = 'Direccion #109';
$factura->cabecera->codigoPuntoVenta    = $codigoPuntoVenta;
$factura->cabecera->fechaEmision        = date('Y-m-dTH:i:s.v');
$factura->cabecera->nombreRazonSocial    = 'Perez';
$factura->cabecera->codigoTipoDocumentoIdentidad    = 1; //CI - CEDULA DE IDENTIDAD
$factura->cabecera->numeroDocumento        = 2287567;
$factura->cabecera->codigoCliente        = 'CC-2287567';
$factura->cabecera->codigoMetodoPago    = 1;
$factura->cabecera->montoTotal            = $subTotal;
$factura->cabecera->montoTotalMoneda    = $factura->cabecera->montoTotal;
$factura->cabecera->montoTotalSujetoIva    = $factura->cabecera->montoTotal;
$factura->cabecera->descuentoAdicional    = 0;
$factura->cabecera->codigoMoneda        = 1; //BOLIVIANO
$factura->cabecera->tipoCambio            = 1;
$factura->cabecera->usuario                = 'MonoBusiness User 01';
$factura->cabecera->nitConjunto = '34556542';
//##detalle de la factura
$detalle = new InvoiceDetail();
$detalle->cantidad                = 1;
$detalle->actividadEconomica    = $codigoActividad;
$detalle->codigoProducto        = 'D001-' . rand(1, 4000);
$detalle->codigoProductoSin        = $codigoProductoSin;
$detalle->descripcion            = 'Nombre del producto #0' . ($i + 1);
$detalle->precioUnitario        = 10 * rand(1, 4000);
$detalle->montoDescuento        = 0;
$detalle->subTotal                = $detalle->cantidad * $detalle->precioUnitario;
//##adicionar el detalle a la factura
$factura->detalle[] = $detalle;

Recepción de la Factura

Con el servicio de facturacion que obtuvimos anteriormente, podemos realizar el envio de la factura (recepcionFactura)

$res = $service->recepcionFactura($factura, SiatInvoice::TIPO_EMISION_ONLINE, SiatInvoice::FACTURA_DERECHO_CREDITO_FISCAL);
if( $res->RespuestaServicioFacturacion->codigoEstado == 908 )
{
    print 'Factura emitida correctamente';
}