Entradas

OpenLibsDTE y AppDTE Community: dos enfoques de desarrollo Java para la facturación electrónica en Chile

Un análisis técnico comparativo realizado con inteligencia artificial. La facturación electrónica en Chile ha impulsado el desarrollo de distintas soluciones informáticas destinadas a generar, firmar, validar y transmitir documentos tributarios electrónicos (DTE) al Servicio de Impuestos Internos (SII). Dentro de este ámbito existen proyectos que, aunque comparten tecnologías y resuelven problemas similares, fueron concebidos con objetivos y arquitecturas diferentes. En esta oportunidad quise realizar un ejercicio de análisis técnico comparando dos proyectos desarrollados en Java: OpenLibsDTE: desarrollado por NIC Labs, vinculado a la Universidad de Chile. AppDTE Community: una solución de facturación electrónica que he desarrollado de manera independiente. El propósito de este artículo no es establecer cuál proyecto es mejor, comparar las capacidades personales de sus desarrolladores ni generar una controversia entre iniciativas académicas e independientes. L...

Precarga de formularios web con Java Servlets, Thymeleaf y JavaScript: un caso práctico de facturación electrónica

En el desarrollo de aplicaciones web empresariales, uno de los desafíos habituales consiste en preparar formularios que necesitan información procedente de distintas entidades de una base de datos. Un ejemplo es la emisión de una factura electrónica. Antes de comenzar a ingresar productos, el sistema necesita disponer de clientes, bodegas, productos, condiciones de venta, modalidades de despacho y parámetros tributarios. Actualmente, muchas aplicaciones resuelven este problema utilizando JavaScript y varias solicitudes a una API REST. Sin embargo, existe otra alternativa: recuperar la información desde el servidor y generar el formulario HTML con los datos previamente cargados . En este artículo explicaré cómo implementé este mecanismo en AustralPOS , un sistema de punto de venta y facturación electrónica desarrollado con Java Servlets, Thymeleaf, JDBC, JavaScript y Bootstrap. 1. El problema: preparar el formulario Antes de mostrar la pantalla de emisión, el sistema debe recuper...

La evolución de las vistas HTML en Java: de Servlets a los motores de plantillas

  Java ha ofrecido, a lo largo de los años, distintas maneras de generar interfaces web. Desde la construcción directa de HTML mediante Servlets hasta los motores de plantillas modernos, cada tecnología ha propuesto una forma diferente de abordar la presentación y su relación con el código Java. Aunque actualmente gran parte de la atención se concentra en frameworks como Spring Boot y bibliotecas frontend como React, resulta interesante revisar cómo ha evolucionado el renderizado de HTML del lado del servidor. El objetivo fundamental no ha cambiado: procesar una solicitud HTTP, obtener los datos necesarios y generar una respuesta que el navegador pueda interpretar. Lo que ha cambiado es la manera de construir esa respuesta y de separar las responsabilidades dentro de una aplicación. 1. Servlets: generar HTML directamente desde Java Una de las formas más directas de generar HTML es mediante un Servlet. Utilizando el objeto HttpServletResponse , podemos obtener un PrintWriter y esc...

Por qué no debes editar un CAF al generar un DTE

  Cuando desarrollamos un sistema de facturación electrónica en Chile, una de las piezas fundamentales para generar un DTE es el CAF (Código de Autorización de Folios) entregado por el SII. A simple vista, el CAF es XML y puede resultar tentador tratarlo igual que cualquier otro XML de nuestra aplicación: leer sus nodos, normalizar textos, limitar largos o incluso cambiar su codificación. Ese es un error. Me encontré con este problema mientras trabajaba en la generación y envío de DTE. En mi caso, el error concreto fue aparentemente muy pequeño: estaba acortando el contenido del nodo RS del CAF . El resultado fue suficiente para invalidar la información firmada. ¿Qué contiene el CAF? Dentro del CAF encontramos información que autoriza a un determinado contribuyente a utilizar un rango de folios para un tipo específico de documento. Simplificando su estructura, podemos encontrar algo parecido a: <CAF version="1.0"> <DA> <RE>76040308-3</RE...

Cómo mapear una consulta SQL compleja a un objeto JSON usando JDBC

  Cuando desarrollamos una aplicación empresarial, no siempre podemos obtener la información que necesitamos desde una sola tabla. Es habitual que un documento dependa de datos almacenados en distintas entidades relacionadas. Un ejemplo es la construcción de un documento electrónico. Para generar su representación como JSON necesitamos recuperar información de la empresa, receptor, tipo de documento, forma de pago, totales y detalle de productos. En este ejemplo veremos cómo hacerlo utilizando Java, JDBC y SQL , sin utilizar un ORM. El problema Nuestro objetivo es construir un objeto DTEJson con una estructura similar a: DTEJson └── DocumentoJSON ├── EncabezadoJson │ ├── IdDteJson │ ├── EmisorJson │ ├── ReceptorJson │ └── TotalesJson └── DetalleDteJson[] Sin embargo, la información necesaria se encuentra distribuida entre varias tablas: Movimiento ├── Empresa ├── CliProv ├── TipoDocumentos ├── FPago ├── Despacho ├── Traslado ├── Referencia ...

Validación backend de un movimiento de venta con Java Servlets

  Cuando desarrollamos un sistema de ventas, una de las partes más importantes no es solamente capturar los datos ingresados por el usuario, sino comprobar que la operación sea válida antes de procesarla. En una aplicación web podemos utilizar JavaScript para realizar cálculos y entregar validaciones inmediatas en la interfaz. Sin embargo, las reglas importantes deben comprobarse nuevamente en el backend. En este ejemplo veremos cómo estructurar la validación de un movimiento comercial utilizando Java Servlets , una capa de servicios y excepciones específicas. El controlador utilizado en el ejemplo recibe una operación que posteriormente puede utilizarse para procesar distintos tipos de documentos, como facturas, facturas exentas, boletas, guías de despacho, notas de crédito o notas de débito. 1. El problema Una operación de venta contiene bastante más información que un formulario tradicional. Por ejemplo, necesitamos recibir: Cliente o proveedor. Tipo de documento. Bodega. Tipo ...

Saber Spring Boot no es lo mismo que saber desarrollar sistemas

 En los últimos años se ha vuelto común encontrar rutas de aprendizaje que llevan rápidamente a una persona desde los fundamentos básicos de programación hacia tecnologías como Spring Boot, React, Docker o servicios en la nube. No considero que esto sea necesariamente negativo. El problema aparece cuando confundimos el conocimiento de estas herramientas con una formación completa en desarrollo de sistemas. Una persona que recién termina la enseñanza secundaria puede perfectamente aprender Java, construir una API REST con Spring Boot, conectarla a una base de datos y desarrollar una interfaz web. Incluso puede llegar a trabajar profesionalmente con estas tecnologías. Pero saber utilizar un framework no significa necesariamente comprender todos los conceptos que existen detrás de él. La formación no consiste solamente en aprender tecnologías Una tecnicatura o una ingeniería relacionada con informática normalmente no busca enseñar únicamente las herramientas que demanda el mercado en...