Skip to content
Rodrigo Sepúlveda Heerwagen edited this page Oct 10, 2017 · 7 revisions

Bienvenido al wiki de dolibarr-sii. Aquí podrás encontrar algunos recursos para poder desarrollar un módulo para facturación electrónica en Dolibarr. Si deseas ayudar, puedes escribirnos a través de nuestro formulario de contacto.

Table of Contents

Instalación en Ubuntu Server

Se deben ejecutar los siguientes comandos:

 $ sudo apt update
 $ sudo apt upgrade
 $ sudo apt install lamp-server^
 $ sudo apt install php7.0-curl php7.0-gd php7.0-xml unzip

Se descomprime la carpeta htdocs, y se sube al servidor.

Se accede a la base de datos:

 $ sudo mysql -u root -p

Una vez dentro, debe escribirse lo siguiente (la primera línea es experimental):

 mysql> CREATE DATABASE dolibarr DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
 mysql> CREATE USER 'dolibarr'@'localhost' IDENTIFIED BY 'dolibarr';
 mysql> GRANT ALL PRIVILEGES ON dolibarr.* TO 'dolibarr'@'localhost';
 mysql> FLUSH PRIVILEGES;

Tipos de documento a soportar

  • 33 - Factura Electrónica
  • 34 - Factura No Afecta o Exenta Electrónica
  • 39 - Boleta Electrónica
  • 41 - Boleta Exenta Electrónica
  • 43 - Liquidación-Factura Electrónica
  • 46 - Factura de Compra Electrónica
  • 52 - Guía de Despacho Electrónica
  • 56 - Nota de Débito Electrónica
  • 61 - Nota de Crédito Electrónica
  • 110 - Factura de Exportación Electrónica
  • 111 - Nota de Débito de Exportación Electrónica
  • 112 - Nota de Crédito de Exportación Electrónica

Código de Autorización de Folios - CAF

Ejemplo

Más información: http://www.sii.cl/factura_electronica/instructivo_emision.pdf#page=8

 <AUTORIZACION>
 <CAF version="1.0">
 <DA>
 <RE></re>
 <RS></rs>
 <TD></td>
 <RNG>
 <D></d>
 <H></h>
 </rng>
 <FA></fa>
 <RSAPK>
 <M></m>
 <E></e>
 </rsapk>
 <IDK><IDK>
 </da>
 <FRMA><FRMA>
 </caf>
 <RSASK></rsask>
 <RSAPUBK></rsapubk>
 </autorizacion>

Timbre electrónico

Glosario

  • TED: Timbre Electrónico del DTE
    • DD: Datos
      • RE: RUT del Emisor
      • TD: Tipo de DTE
      • F: Folio de DTE
      • FE: Fecha de Emisión (en formato AAAA-MM-DD)
      • RR: RUT del Receptor
      • RSR: Razón Social del Receptor (máximo 40 caracteres)
      • MNT: Monto Total del DTE (sin decimales)
      • IT1: Ítem 1 (máximo 40 caracteres)
      • CAF: Código de Autorización de Folios
        • DA:
          • RE: RUT del Emisor
          • RS: Razón Social
          • TD: Tipo de DTE
          • RNG: Rango
            • D: Desde
            • H: Hasta
          • FA:
          • RSAPK: RSA Public Key (llave pública del contribuyente)
            • M: Módulo
            • E: Exponente
          • IDK: ID Key (identificación de la llave pública del SII)
        • FRMA: Firma (del SII sobre el CAF)
      • TSTED: Timestamp del Timbre Electrónico del DTE (en formato AAAA-MM-DDTHH:MM:SS)
    • FRMT: Firma del Timbre Electrónico (en formato SHA1+RSA)

Notas importantes

  • Se deben convertir los caracteres especiales como &, <, >, " y ' al formato HTML.
  • Los otros caracteres especiales, como la eñe y acentos, se deben codificar en ISO-8859-1.
  • Solo en el caso de las boletas, si no se conocen los datos del cliente, se define el RUT como 66666666-6.

Ejemplos

Estos se extrajeron de documentos reales, usando la aplicación de Android PDF417 Barcode Scan Demo App

Boleta de Tottus

 <TED version="1.0"><DD><RE>78627210-6</re><TD>39</td><F>264307787</f><FE>2017-04-16</fe><RR>66666666-6</rr><RSR>RECEPTOR COMODIN</rsr><MNT>14141</mnt><IT1>BEB.SPRITE 3LT</it1><CAF version="1.0"><DA><RE>78627210-6</re><RS>HIPERMERCADOS TOTTUS SA</rs><TD>39</td><RNG><D>264301001</d><H>269301000</h></rng><FA>2017-03-07</fa><RSAPK><M>2rKsoElolL/WTavNwU4BlcPTUZ1pfchXs8AkOq+f9RFMLpJrabg5cy8YkIhENn6qIV8MmIs8ZtcWeUHLVWCeYw==</m><E>Aw==</e></rsapk><IDK>300</idk></da><FRMA algoritmo="SHA1withRSA">WCk/hTdAHi41c5i44XhB4VU9nwfPooOWCvc/PSp47PirsxHNShpRBgS2LMboAJqGNejoFDlWNSpVYCzYmwtvdQ==</frma></caf><TSTED>2017-04-16T18:05:16</tsted></dd><FRMT algoritmo="SHA1withRSA">JZ5WSvG0Bcp9g+mPXYowNzRWNyWRVWixonnAJ7pVxeOFCZpRFq4ASO9CJhXdVZd2547vpJry8CVtHjpmPX3pIA==</frmt></ted>

Boleta de Dominó

 <TED version="1.0"><DD><RE>77875890-3</re><TD>39</td><F>8525823</f><FE>2017-05-02</fe><RR>66666666-6</rr><RSR>Razon Comodin</rsr><MNT>9940</mnt><IT1>Promo Vienesa $990</it1><CAF version="1.0"><DA><RE>77875890-3</re><RS>PRODUCTOS ALIMENTICIOS DOMINO FLORIDA LI</rs><TD>39</td><RNG><D>1</d><H>10000000</h></rng><FA>2015-11-25</fa><RSAPK><M>rsc8TSDagVbdyINAtb0XmVZ8LwGRoNZjw086BFzOQ48Ulg6VtJnfZnw2UHoy5p4kVAynnZWFGRkjr2btsdAy8w==</m><E>Aw==</e></rsapk><IDK>300</idk></da><FRMA algoritmo="SHA1withRSA">AHHohzMNnKF7mXtX09FeHGzZ6DRMx7xbjHLdwsYcZLBspjxp/m2Z6sut7XpY0APSnbNH1SW4vRLmgsuS3B4/dg==</frma></caf><TSTED>2017-05-02T17:13:22</tsted></dd><FRMT algoritmo="SHA1withRSA">Trqs102FrrbImLVG2++YwuQW94TXjo9C4OQQHljj78/aWw8JINTLq47hwGvK+ZCpuidCaeLrcjNvBgMJWKG8yg==</frmt></ted>

Código útil

Generar archivo XML

Los certificados X509 se deben escribir con un máximo de 76 caracteres, sino, se debe insertar un salto de línea.

Verificación de firma de archivo XML recibido

Podría venir firmado con SHA1+DSA o SHA1+RSA.

 /* Generar el mensaje a partir del archivo XML */
 
 $xml = simplexml_load_file( 'F60T33-ejemplo.xml' );
 
 $ddDom = new DOMDocument( '1.0', 'ISO-8859-1' );
 $ddDom->preserveWhiteSpace = false;
 $ddDom->loadXML( $xml->SetDTE->DTE->Documento->TED->DD->asXML() );
 
 $dd = $ddDom->saveXML( $ddDom->documentElement );
 
 /* Realizar la firma */
 
 $pk = openssl_pkey_get_private( 'file://./pk.pem' );
 openssl_sign( $dd, $signature, $pk );
 openssl_free_key( $pk );
 
 /* Verificar */
 
 if ( base64_encode( $signature ) == $xml->SetDTE->DTE->Documento->TED->FRMT ) {
 	echo 'OK';
 } else {
 	echo 'Algo falló';
 }

Generación de timbre electrónico

Esto requiere la biblioteca TCPDF, la cual tiene un error. Más información aquí.

 /* Pruebas con PDF417 */
 
 $xml = simplexml_load_file( 'F60T33-ejemplo.xml' );
 
 $tedDom = new DOMDocument( '1.0', 'ISO-8859-1' );
 $tedDom->preserveWhiteSpace = false;
 $tedDom->loadXML( $xml->SetDTE->DTE->Documento->TED->asXML() );
 
 $ted = $tedDom->saveXML( $tedDom->documentElement );
 
 require_once( 'TCPDF/tcpdf_barcodes_2d.php' );
 
 $tedObject = new TCPDF2DBarcode( $ted, 'PDF417' );
 
 echo '<br />';
 echo '<img src="data:image/gif;base64,';
 
 $tedImage = $tedObject->getBarcodePngData();
 echo base64_encode( $tedImage );
 
 echo '" />';

Archivos de ejemplo

Archivo PEM

 -----BEGIN RSA PRIVATE KEY-----
 MIIBOwIBAAJBANGuDuim8fEI9yuIlkj+MOyp3mWHifoP6a4oWLSBKJSrd3MpEsZd
 czvL0l7t/e0IU5rF+0gRLnU1Mfvtsw1wYWcCAQMCQQCLyV9FxKFLW09yWw7bVCCd
 xpRDr7FRX/EexZB4VhsNxm/vtJfDZyYle0Lfy42LlcsXxPm1w6Q6NnjuW+AeBy67
 AiEA7iMi5q5xjswqq+49RP55o//jqdZL/pC9rdnUKxsNRMMCIQDhaHdIctErN2hC
 IP9knS3+9zra4R+5jSXOvI+3xVhWjQIhAJ7CF0R0S7SIHHKe04NUURf/7RvkMqm1
 08k74sdnXi3XAiEAlkWk2vc2HM+a1sCqQxNz/098ketqe7NuidMKeoOQObMCIQCk
 FAMS9IcPcMjk7zI2r/4EEW63PSXyN7MFAX7TYe25mw==
 -----END RSA PRIVATE KEY-----

Archivo XML

Se pueden encontrar varios ejemplos en: FORMATO XML DE DOCUMENTOS ELECTRÓNICOS.

Nuevo módulo

Un nuevo módulo debe tener al menos un archivo de descripción, el cual debe ir en la ruta htdocs/nombre_del_módulo/core/modules/modNombreDelMódulo.php. Este archivo debe basarse en esta plantilla.

Árbol

 htdocs/
 +-- nombre_del_módulo/
     +-- build/
     +-- core/
     |   +-- modules/
     |   |   +-- modNombreDelMódulo.php
     |   +-- triggers/
     +-- admin/
     +-- class/
     +-- css/
     +-- docs/
     +-- img/
     +-- langs/
     |   +-- en_US/
     |   +-- es_CL/
     |   +-- es_ES/
     +-- lib/
     +-- scripts/
     +-- sql/
     +-- themes/
         +-- nombre_del_tema/

Recursos

Videos

DTE

Dolibarr

Repositorios útiles

Foros útiles

Blogs útiles

Exigencias especiales de clientes que usan SAP

Más