Mostrando entradas con la etiqueta facturación ecuador. Mostrar todas las entradas
Mostrando entradas con la etiqueta facturación ecuador. Mostrar todas las entradas

martes, 19 de julio de 2022

Facturacion Electronica RIDE

Si estas en Ecuador y no sabes que es un RIDE te comento: 

1. Un RIDE es un impreso fisco de un documento electrónico (XML para Ecuador)

2. El emisor debe adjuntar los archivos del documento electrónico (XML + RIDE en digital) al correo electrónico proporcionado por el consumidor. Cuando el receptor no posea un correo, entonces debe imprimir y entregar el RIDE físicamente.

3. Si el consumidor exige recibir físicamente el RIDE, el emisor deberá imprimirlo y entregarlo.

4. Si en la transacción comercial no se identifica al usuario (consumidor fnal) se debe entregar obligatoriamente el RIDE.

5. El RIDE debe cumplir con el formato (campos de información) del Reglamento de Comprobantes de Ventas, Retención y Documentos Complementarios y la Ficha Técnica vigente en el país. Eso lo puedes revisar en la pagina web del SRI. 

6. Dentro del Reglamento del punto 5 hay formatos por cada tipo de documento comercial, mencionaré los campos más comunes de todos ellos:

- Número, día, mes y año del documento

- Número del registro único de contribuyentes del emisor

- Clave de Acceso/Numero de Autorización

- Apellidos y nombres, denominación o razón social del emisor, en forma completa o abreviada

- Numeración de quince dígitos de tres bloques (separados por un guion medio): Los tres primeros dígitos son el número del establecimiento, los siguientes tres dígitos corresponden al código de cada punto de emisión y los últimos tres son el número secuencial de nueve dígitos.

- Los contribuyentes designados por el SRI como especiales deberán imprimir las palabras: “Contribuyente Especial” y el número de la resolución con la que fueron calificados.

- Las personas que estén obligadas a llevar contabilidad deberán imprimir las palabras: “Obligado a Llevar Contabilidad”

Y así muchos otros campos que varían cuando corresponda, etc.

¿Por donde empezar?

Cualquier reporteador que genere de una plantilla con los datos que deben ser impresos sirve sin problema. Eso se puede exportar a un archivo pdf y listo.

¿Que sigue?

El tema es muy variado cuando se trata de herramientas informáticas a utilizar, puede abordarse desde diferentes perspectivas. Mencionaré solo una que me parece muy llamativa y esta es:

Estilo XSL en HTML

El lenguaje XSL se usa para dar un estilo a documentos XML, esto ayuda a transformar un documento hacia otro de salida con un formato. Para el caso particular de facturación electrónica, se puede tomar una plantilla de estilo XSL y usarla para leer un documento XML y transformarlo en otro con texto HTML con el contenido del XML.

Se entiende mejor con un ejemplo sencillo, empezando con la cabecera:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html"/>

    <xsl:template match="/">

    <!-- contenido del documento plantilla -->

    </xsl:template>

</xsl:stylesheet>

En su interior se escribe en lenguaje HTML, dando la libertad del programador para divertirse diseñando un formato web agradable a la vista. 

Al momento de leer cada etiqueta XML se podría usar algo como lo siguiente, (para el ejemplo se utilizo un XML de guia remision):

 <!-- contenido del documento plantilla -->

<div class="titulos">

    <table class="principal">

        <tr>

        <td class="formulario-label"><label>Razon Social </label></td>

        <td class="middle"><xsl:value-of select="/guiaRemision/infoTributaria/razonSocial"/></td>

        </tr>

        <tr>

        <td class="formulario-label"><label>Numero RUC </label></td>

        <td class="middle"><xsl:value-of select="/guiaRemision/infoTributaria/ruc"/></td>

        </tr>

        <tr>

        <td class="formulario-label"><label>Clave de acceso </label></td>

        <td class="middle"><xsl:value-of select="/guiaRemision/infoTributaria/claveAcceso"/></td>

        </tr>

    </table>

</div>

 <!-- fin contenido del documento plantilla -->

Para finalizar simplemente usando el lenguaje de programación de su aplicación de facturación debe hacer que el XML con los datos electrónicos del cliente se enlacen con la plantilla XSL y esta le devolverá el código HTML con el formato y la información.

Espero que este post haya sido de mucha ayuda.

domingo, 18 de marzo de 2018

Facturacion Electronica con C# y Java


Si estas en Ecuador y quieres implementar la facturación electrónica en tu aplicación de Visual Studio, comprobarás que la documentación y las herramientas son un poco tediosas de buscar en la web.

¿Por dónde empezar?

Debes considerar algo tan simple como los siguientes resúmenes de los resúmenes que he investigado:

  1. La "factura electrónica" es un fichero XML firmado digitalmente.
  2. Lo mas fácil es tener que generar ese XML sin firmar.
  3. Se complica un poco al firmar XAdES-BES (aunque de hecho es el estándar mas básico)
  4. Se complica un poco si no conoces Java y deseas utilizar la librería MITyC (Ministerio de Industria, Energía y Turismo del gobierno de España)
  5. El punto 4 lo he visto por todas partes en Ecuador, así que creo que la mayoría del país la usa.
  6. Se complica un poco integrar C# y Java
  7. Es sencillo consumir un webservice del SRI desde C#
  8. Si llegaste hasta el punto 7 nose que haces leyendo este blog.
¿Que sigue?
Si no lograste llegar hasta el punto 8 entonces deberías leer lo que sigue:

  1. Para poder firmar el XML, necesitas un certificado digital expedido por una entidad certificadora reconocida en el País.
  2. Una vez tengas el certificado (fichero en formato *.cer para el caso de Ecuador) lo siguiente es el tema de la firma XAdES-BES, lo cual para el caso de los proyectos en Visual Studio, una de las soluciones mas comunes es complicarse con java.
  3. Una busqueda rapida en internet te dara las librerias MITyC las cuales estan escritas en java.
  4. Otra busqueda rapida en internet te dara un ejemplo sencillo de como usar esta libreria para firmar un documento xml.
  5. De aquí viene varias alternativas, para este blog solo mencionare una:
  • Crear un programa java que reciba parámetros de entrada ( como por ejemplo: rutas,archivo xml,certificado,claves,etc) y devuelva el resultado de lo firmado y después usar IKVM.NET para convertir ese programa en un dll para luego referenciarlo en el proyecto de Visual Studio.

En las ayudas de IKVM.NET se muestra como realizar paso a paso vía comando y de forma sencilla esta solución. Para referenciar el objeto dll en el proyecto de C# se lo realiza de la siguiente manera:

using packappjava.com; //esta es la ruta de los package java que contiene la clase

class Program
{
static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;
            AppJava leer = new AppJava(); // este es la clase principla de java
// aqui en adelante va el codigo para enviar y recibir la respuesta de la firma

        }

        static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
        {
            return Assembly.LoadFile(@"C:\IKVM.OpenJDK.Core.dll"); // esta es la ruta del core OpenJDK
        }
 }

  • Una vez superado el paso 5 ya lo que falta no es nada complejo. Consumir el Webservice del SRI se lo puede realizar de la siguiente forma:
String envelop = "\"http://schemas.xmlsoap.org/soap/envelope/\"";
String action = "\"http://ec.gob.sri.ws.recepcion/\"";

byte[] archxml = File.ReadAllBytes(ruta); // ruta del archivo xml firmado
String base64arch = Convert.ToBase64String(archxml);

string xml = @"<soapenv:Envelope xmlns:soapenv=" + envelop + " xmlns:ec=" + action + ">";
xml = xml + "<soapenv:Header/>";
xml = xml + "<soapenv:Body>";
xml = xml + "<ec:validarComprobante>";
xml = xml + "<xml>" + base64arch + "</xml>";
xml = xml + "</ec:validarComprobante>";
xml = xml + "</soapenv:Body>";
xml = xml + "</soapenv:Envelope>";

byte[] bytes = Encoding.ASCII.GetBytes(xml);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //url del webservice SRI

request.Method = "POST";
request.ContentLength = bytes.Length;
request.ContentType = "text/xml";

Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();

Para finalizar solo brindar mi opinión recalcando que el esquema de comprobantes electrónicos es un importante proyecto orientado a la responsabilidad social, ambiental y tributaria. Se obtiene mayor agilidad, simplificación de gestión; otorga integridad y seguridad desde la emisión, entrega y archivado de los comprobantes.

Espero que este post haya sido de mucha ayuda.