Catálogos para facturar CFDI 3.3 SAT en Sql Server

ULTIMA ACTUALIZACIÓN DE LOS CATÁLOGOS: 3 DE ENERO 2018

Pongo a disposición los catálogos en Sql Server publicados por SAT necesarios para la facturación 3.3.

Estaré actualizándolos conforme el SAT libere nuevos registros. Solo dar clic en el siguiente enlace:



DESCARGAR CATÁLOGOS SAT

Si deseas descargar los catálogos para mysql entra aquí

Si deseas descargar los catálogos para SQLite entra aquí

SAT, cfdi 3.3, facturación electrónica, la opinión de un desarrollador de software PARTE II – Beneficio

[quads id=5]
Si no has leído mi primer entrada sobre mi opinión te invito a que leas dando clic aquí.

Les recuerdo que esto solo es una opinión de alguien que tiene desarrollando software por más de 10 años y por lo menos 5 años involucrado en el tema de facturación electrónica, igual no dejo de ser programador y no soy experto fiscalista, ni experto contador.

Quizá no sea la primera vez que leas que la facturación electrónica 3.3 te beneficia a ti como contribuyente, es imposible que no lo hayas leído en otra parte, ya que el SAT nos bombardeó con publicidad por todos lados hablando de que el beneficiado es el contribuyente. Valga broma.
El único beneficiado aquí es el SAT y vamos a verlo a continuación.

¿Quién gasta al adaptarse?

Cuando se nos obligó a facturar con la versión 3.2 todos tuvimos que gastar, claro el SAT nos dio un súper sistema gratuito para facturar (esta será otra entrada, el cómico sistema gratuito 3.3), un sistema que igual hacia su trabajo, al cual llamaban factura fácil, y era todo menos fácil, y mucho menos contemplaba todo lo que se refiere a facturación electrónica. Yo lo utilice algunas veces, jamás supe cómo se agregaba una addenda, o un complemento de impuestos locales, o vaya, no sé si existió un formulario para crear la nómina electrónica gratuitamente (disculpen, si es que existe háganmelo saber). En pocas palabras, SAT te da un sistema mediocre para hacer las facturas electrónicas, facturas que por lo mucho llevan un concepto ya que al momento de agregar más de 5 conceptos se comienza a volver engorroso.

Ahora, SAT ofrece una nueva solución la cual te felicita cada que haces algo bien (para que el contribuyente se sienta felicitado claro).

Ya utilice esta nueva versión de facturación gratuita que otorga el SAT, y yo que soy afín a la tecnología tarde varios minutos en encontrar el botón para crear nueva factura. No se diga para crearla. No quiero imaginar personas de tercera edad haciendo la factura ahí.

Ahora analicemos quien es el que gasta, el SAT otorga una herramienta que estimándola de lejos sale menos de 100 mil pesos su desarrollo, una herramienta para sus contribuyentes a nivel nacional, la cual te hace la factura versión 3.3 pero la hace de una manera tediosa, tardada y sin una buena interfaz de usuario que sea intuitiva. Esto tiene un plan con maña ya que el SAT te da algo mediocre para que hagas tu factura pero casi te está diciendo “pues es lo que hay”.
Yo me pregunte, porque será que el SAT no ofrece un buen servicio, que tenga calidad y no se caiga todos las quincenas ¿Porque hace esto el SAT? Pues muy simple, porque el mismo SAT crea un océano azul (dirían los mercadologos), crean un negocio, un giro donde no existía, un giro el cual es un negocio en el que en la cima de la pirámide está el mismo SAT, veamos:

  • SAT crea un requerimiento el cual es obligatorio para sus millones de contribuyentes.
  • SAT otorga una herramienta mediocre.
  • Los amigos del SAT crean herramientas más sofisticadas, pero estos amigos del SAT llamados PAC, le pagan al SAT dinero (mucho dinero) para tener el permiso de timbrar. Ademas existen servicios web los cuales solo los PAC tienen privilegio como: recuperar facturas emitidas, recuperar facturas canceladas, recuperar facturas recibidas etc.
  • El contribuyente al estar cansado de utilizar la mediocre herramienta, paga a un PAC para poder realizar su facturación de manera ágil.

Entonces concluimos que el único que se beneficia es el SAT, creando un negocio donde no existía, no sé si exista transparencia para todo ese dinero que recibe, desconozco si ese dinero se utiliza para algo, que para beneficiar al contribuyente no lo es. Y lo genial de este negocio es que si ellos quieren, pueden obligar nuevamente a una nueva facturación electrónica 3.4, 3.5 etc etc. Y así seguir sacando mucho mas dinero.

¿Qué es lo mínimo que debió otorgar el SAT? El SAT por lo menos debió dar puntos de venta gratuitos los cuales ayudaran a sus contribuyentes a llevar la facturación, y digo lo mínimo, ya que si tu como institución obligas a tus contribuyentes a realizar un trámite, debes agilizárselo. Es triste que nadie se queje directamente sobre todo este tema. Entiendo que no todo es malo con la facturación electrónica 3.3, existen puntos buenos pero a medias, ya que si esto por arriba del iceberg de lo que dice servir es ayudar al contribuyente es lo menos que se está haciendo. Si esto es para detener negocios fraudulentos que no facturan, creo que está creando más dificultades por lo cual las personas mucho menos se darán de alta.

Esto solo es una opinión de un programador de software, disculpen si hay errores, es desde mi visión como programador todo el escrito anterior.

Sistema de facturación electrónica cfdi 3.3 gratis por 90 días – Facturacenter.com.mx

Pocas veces hablo de los sistemas que yo he hecho, pero esta vez me tome la tarea de hablar de algo que a muchos les puede servir.

Ver la funcionalidad del sistema en youtube.

Hace algunos días hice una factura en la aplicación que hizo SAT para cfdi 3.3 y es una burla, parece una plataforma hecha por becarios. La opinión que tengo de todo lo que es la facturación electrónica la pueden encontrar aquí.

Ya que estamos en este enrollo de la fiscalización que nos obliga el SAT a más de uno le servirá el sitio que yo he liderado para su desarrollo y el cual ya utilizan muchísimas personas.

Formulario para facturación

Primero te registras y seleccionas el paquete de 30 folios gratis así puedes utilizarlos, solo recuerda que tienen caducidad de 90 días, una vez que lleguen esos 90 días puedes seguir entrando pero deberás comprar otro paquete, los cuales hay desde 10 folios hasta muchísimos (no recuerdo el dato solo soy un programador), estos últimos folios tienen caducidad de un año, pero algo importante, los folios se congelan solamente. Es decir:

Si tengo el paquete gratuito de 30 folios y solo gaste 1 folio en una factura en los 3 meses, compro mi paquete de 10 folios, ahora tendría 39 folios (29 que me quedaron + 10 nuevos), y estos me duraran de caducidad 1 año, e igual al año se congelaría la cantidad.

¿Qué diferencia tiene con la aplicación del SAT?
Que tu factura la harás mucho más rápido ya que puedes guardar datos de tus clientes, empleados (también se pueden timbrar nominas), productos, tipos de comprobantes, tienes asistencia rápida, puedes entrar desde el celular ya que el sitio es responsivo, puedes ver tus facturas rápidamente, descargarlas, enviarlas por correo, y muchas cosas más, además el sistema se actualiza con nuevas cosas y todo esto es solo por el precio de tus folios (no se cobro ni la actualización de 3.2 a 3.3).

Precios paquetes (tomo la imagen del sitio igual revisar en el sitio los precios por si cambiaron):

Es decir si eres un doctor, un arquitecto, un freelance o una persona que utiliza pocos folios al año, es conveniente esta plataforma ya que por un precio bastante bajo tienes todo un poderoso sistema.

El enlace es el siguiente (recuerden seleccionar el paquete gratuito de 30 folios al registrarse):

Facturacenter.com
facturacenter.com.mx

Dudas y comentarios abajo hay un formulario.

¿Cómo crear un archivo pfx en c#? cancelación de factura electrónica SAT cfdi 3.3

Para cancelar una factura electrónica es necesario crear un tercer certificado llamado pfx, este certificado se debe crear por medio de Openssl en conjunto de nuestro archivo Cer y nuestro archivo Key los cuales debemos ya tener si es que estamos timbrando.

Para crear el archivo pfx utilizaremos la clase Process de .Net, esta clase sirve para mandar comandos como si estuviéramos en consola, de esta manera utilizaremos los comandos de Openssl.

Les recuerdo que antes deben instalar Openssl y como está en el siguiente ejemplo debe estar instalado en la unidad c:/openssl-win32.

En caso que se tenga Openssl instalado en otra ruta distinta, solo modifiquen esa parte del código. A continuación la clase mágica:

 public class PFX
    {
        string cer = "";
        string key = "";
        string clavePrivada = "";
        string ArchivoPFX = "";
        string ArchivoKPEM = "";
        string ArchivoCPEM = "";

        public string error = "";
        public string mensajeExito = "";

        ///
<summary>
        ///
        /// </summary>

        /// <param name="cer_">archivo cer a utilizar</param>
        /// <param name="key_">archivo key a utilizar</param>
        /// <param name="clavePrivada_">clave para el archivo pfx</param>
        /// <param name="archivoPfx_">ruta del archivo pfx</param>
        /// <param name="path">ruta para archivos temporales PEM</param>
        public PFX(string cer_, string key_, string clavePrivada_, string archivoPfx_, string pathTemp)
        {
            cer = cer_;
            key = key_;
            clavePrivada = clavePrivada_;

            ArchivoKPEM = pathTemp + "k.pem";
            ArchivoCPEM = pathTemp + "c.pem";
            ArchivoPFX = archivoPfx_;
        }

        public bool creaPFX()
        {
            bool exito = false;

            //validaciones
            if (!File.Exists(cer))
            {
                error = "No existe el archivo cer en el sistema";
                return false;
            }
            if (!File.Exists(key))
            {
                error = "No existe el archivo key en el sistema";
                return false;
            }
            if (clavePrivada.Trim().Equals(""))
            {
                error = "No existe una clave privada aun en el sistema";
                return false;
            }

            //creamos objetos Process
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            System.Diagnostics.Process proc2 = new System.Diagnostics.Process();
            System.Diagnostics.Process proc3 = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc2.EnableRaisingEvents = false;
            proc3.EnableRaisingEvents = false;

            //openssl x509 -inform DER -in certificado.cer -out certificado.pem
            proc.StartInfo.FileName = "openssl";
            proc.StartInfo.Arguments = "x509 -inform DER -in \"" + cer + "\" -out \"" + ArchivoCPEM + "\"";
            proc.StartInfo.WorkingDirectory = @"C:\openssl-win32\bin\";
            proc.Start();
            proc.WaitForExit();

            //openssl pkcs8 -inform DER -in llave.key -passin pass:a0123456789 -out llave.pem
            proc2.StartInfo.FileName = "openssl";
            proc2.StartInfo.Arguments = "pkcs8 -inform DER -in \"" + key + "\" -passin pass:" + clavePrivada + " -out \"" + ArchivoKPEM + "\"";
            proc2.StartInfo.WorkingDirectory = @"C:\openssl-win32\bin\";
            proc2.Start();
            proc2.WaitForExit();

            //openssl pkcs12 -export -out archivopfx.pfx -inkey llave.pem -in certificado.pem -passout pass:clavedesalida
            proc3.StartInfo.FileName = "openssl";
            proc3.StartInfo.Arguments = "pkcs12 -export -out \"" + ArchivoPFX + "\" -inkey \"" + ArchivoKPEM + "\" -in \"" + ArchivoCPEM + "\" -passout pass:" + clavePrivada;
            proc3.StartInfo.WorkingDirectory = @"C:\openssl-win32\bin\";
            proc3.Start();
            proc3.WaitForExit();

            proc.Dispose();
            proc2.Dispose();
            proc3.Dispose();

            //enviamos mensaje exitoso
            if (System.IO.File.Exists(ArchivoPFX))
                mensajeExito = "Se ha creado el archivo PFX ";
            else
            {
                error = "Error al crear el archivo PFX, puede ser que el cer o el key no sean archivos con formato correcto";
                return false;
            }

            //eliminamos los archivos pem
            if (System.IO.File.Exists(ArchivoCPEM)) System.IO.File.Delete(ArchivoCPEM);
            if (System.IO.File.Exists(ArchivoKPEM)) System.IO.File.Delete(ArchivoKPEM);

            exito = true;

            return exito;
        }
    }

Para utilizarla de la siguiente manera:


//yo siempre utilizo la misma clave privada de mi timbrado para encriptar el pfx
//la ruta para archivos temporales solo se utiliza para archivos que serán eliminados al final
oPFX = new PFX("algunaruta/archivocer.cer", "algunaruta/archivokey.key", "algunpassword", "algunacarpeta/miarchivo.pfx", "rutaparacreararchivostemporalesPem/");

if (oPFX.creaPFX())
                    Console.WriteLine("Archivo creado con éxito");
else
                    Console.WriteLine(oPFX.error);

SAT, cfdi 3.3, facturación electrónica, la opinión de un desarrollador de software PARTE I – Adaptación

Esta entrada fue impresa en el número publicado en Marzo 2018 de la revista Talento Empresarial.

Mi experiencia con facturación electrónica viene desde el desarrollo de la plataforma www.facturacenter.com.mx, posterior a ese desarrollo he hecho miles más que van desde servicios web, consultoría a empresas y algunos municipios del país, y lo último la migración de cfdi 3.2 a 3.3 de algunos sistemas.
Tratare de dar mi punto de vista como desarrollador de software, no soy experto en contabilidad ni temas fiscales, yo solo soy un desarrollador de software por lo cual puedo desconocer algunos temas a la perfección. En esta entrada me enfocare en la adaptación de los usuarios a este mecanismo.

¿Por qué facturación electrónica?

Entiendo las ventajas que significan para SAT que los contribuyentes emitan facturas electrónicas, ya que esto da mayor control a todo movimiento que hacen las pequeñas y grandes empresas, y poco a poco quitando el trabajo de los contadores de calculadora, y todo electrónico sin gastar papel, ni renovar los folios y todo el engorro que se hacía hace años. Lo malo del asunto es haber optado por sacar una versión 3.2 con tanta deficiencia la cual quieren tapar con la nueva versión 3.3 (la cual creo que complica todo al contribuyente, ahorita vamos para allá). No sé a quién consulto SAT para realizar la facturación electrónica en cuanto a sus secciones y formatos, catálogos, atributos, complementos etc. Hay características buenas como todo, pero las deficiencias que tenía la versión 3.2 quisieron mejorarlas teniendo un mayor control en lo que captura el contribuyente, cambiándolo todo (o casi todo) a claves, esto asegurando que el emisor no captura discrepancias, todo suena perfecto y como programador lo aplaudo, pero esto debió ser parte de la versión 3.2 no de la 3.3. ¿Qué es lo que pasa ahora con todo el tema de la migración? Que todos los sistemas fueron hechos para la versión 3.2 una versión que fue perfeccionándose y si la comparamos con la versión 3.3 hace un caos en los sistemas y en los usuarios que utilizan dichos sistemas.

CFDI 3.2

Un usuario que estaba acostumbrado: 10,20 quizá 30 o más años a hacer sus facturas con papel se le obliga a realizar facturación electrónica, ya que no fue opcional sino obligatoria al final, esta persona nunca ha utilizado una computadora, meses después el usuario comienza a crear su factura, y de repente le toca un cliente al cual le obliga hacer una addenda, el usuario no tiene ni idea que es una addenda, lo peor aún, el sistema que utiliza el usuario no tiene dicha addenda(si porque cada receptor puede hacer su addenda), el usuario llama a su proveedor de software y le dicen que la addenda estará lista en unos días. Por fin llega el día y el usuario ve que para hacer una factura para ese cliente en particular (ya que si la factura está mal no recibe su pago) debe llenar más datos y cuando por fin logra hacer la factura, se encuentra con una nueva sorpresa, el cliente le dice que la factura debe subirse a una página web la cual validara la addenda, y al subirla el sitio del cliente le dice que su factura no es válida; la persona nuevamente llama a su proveedor de software y se vuelve un ciclo prueba y error hasta que resuelve una problemática que no tenía cuando solo utilizaba papel. Este es un pequeño ejemplo de la problemática que pasó un contribuyente al migrar de papel a facturación electrónica. ¿Sera verdad que con la facturación electrónica se beneficia el contribuyente? O ¿Quién se beneficia realmente? El contribuyente en lugar de beneficiarse ha gastado en un software caro y en más tiempo del que utilizaba para hacer algo que hacía en minutos.

CFDI 3.3

Después de 6 años cuando los contribuyentes por fin llevan una vida más o menos tranquila en cuestión de facturación (a veces falla el pac, se caducaron sus sellos), y sale la súper noticia de la migración a la nueva súper poderosa facturación electrónica 3.3 la cual contiene miles de mejoras, más organizada, lo mejor que le pudo pasar al contribuyente, y arrojan como 20 catálogos los cuales deben ser utilizados ahora en lugar de que el usuario capture lo que siempre capturaba. Ahora para capturar conceptos el SAT obliga a que capture el usuario el producto y una clave que proporciona el bondadoso SAT, y lo dicen como si el usuario solo buscara la clave entre más de 50 mil (un numero absurdo y más adelante veremos porque) y rápidamente le resolviera su vida pero aquí es por lo cual dije con anterioridad, estos catálogos debieron salir en la anterior versión, las personas ya utilizan sistemas donde tienen hasta miles de productos, los contribuyentes viven al día, y ahora para hacer una factura deben ir producto por producto buscando la clave más o menos adecuada (ya que hay ambigüedades) esto en el caso de los conceptos, ah pero si te equivocas el SAT te dará perdón unos meses porque los contribuyentes son unos pecadores por no saber cuál es la clave de sus conceptos. Ahora veamos lo absurdo de este famoso catalogo:

  • Clave 92111704 – Guerra de guerrillas
  • Clave 25151501 – Nave espacial tripulada
  • Clave 11131602 – Semen
  • Clave 92112100 – Guerra nuclear
  • Clave 92112207 – Guerra ambiental
  • Clave 92112403 – Guerra nuclear
  • Clave 92112404 – Guerra basada en el espacio
  • Clave 92111806 – Mercenarios

Estos son unos ejemplos, y es cuando me pregunto ¿En realidad eran necesarios más de 50 mil elementos? Además esto está lleno de huecos, hay bastantes ambigüedades, y otro problema es que ese catálogo debe seguir creciendo a la lógica del SAT, ya que habrá cada vez nuevos productos, creo que si querían absorber todo producto posible se metieron en un problema enorme. Se debió contemplar una categorización menor, no más de 1000 elementos, esto ayudaría bastante al usuario, pero yo casi estoy seguro que este catálogo tiende al fracaso. El simple hecho de evaluar si corresponde lo que capturo el cliente con la clave ya es algo engorroso, así que no dudo que el siguiente año se elimine o se reduzca este catálogo así como el de unidad que también es otra maravilla.

Hablar de facturación electrónica es un tema para más de una entrada, es por ello que me enfoque en la adaptación en estos años, en otras entradas hablare de los monopolios existentes, nomina electrónica, y también del famoso y paradójico complemento de pago.
La facturación electrónica también tiene sus puntos buenos y puede mejorar la forma en como está organizada, lástima que SAT teniendo recaudaciones enormes (2015: 300 mil millones de pesos) no invierta ni el 1% de eso para su departamento de sistemas (siguen utilizando applets, yo amo java, no las applets).
Nos vemos en siguientes entradas.

SAT, cfdi 3.3, facturación electrónica, la opinión de un desarrollador de software PARTE II – Beneficio.

¿Cómo obtener el #UUID (Timbre fiscal) de un xml timbrado en c#? #facturacion

Para obtener el UUID de un xml que ya tengamos timbrado del SAT lo podemos hacer con LINQ muy sencillo como muestro a continuación:

            //sustituir por la ruta de tu xml
            string rutaXML="C:/carpeta1/carpeta2/factura.xml";

            //variables del esquema
            XNamespace cfdi = @"http://www.sat.gob.mx/cfd/3";
            XNamespace tfd = @"http://www.sat.gob.mx/TimbreFiscalDigital";

            //cargamos el xml
            var xdoc = XDocument.Load(rutaXML);

            //Navegamos hasta el elemento que contiene el UUID
            var elt = xdoc.Element(cfdi + "Comprobante")
                          .Element(cfdi + "Complemento")
                          .Element(tfd + "TimbreFiscalDigital");

            //listo obtenemos el UUID
            var uuid = (string)elt.Attribute("UUID");

Catálogos para facturar CFDI 3.3 SAT en mysql

ULTIMA ACTUALIZACIÓN DE LOS CATÁLOGOS: 3 DE ENERO 2018

Pongo a disposición los catálogos en mysql publicados por SAT necesarios para la facturación 3.3.

Estaré actualizándolos conforme el SAT libere nuevos registros. Solo dar clic en el siguiente enlace:



DESCARGAR CATÁLOGOS SAT

Si deseas descargar los catálogos para sql server entra aquí

Si deseas descargar los catálogos para SQLite entra aquí