Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Fixed

  • [FASE 1] Cuando se edita una factura, se pierde el archivo adjunto.
  • [FASE 1] En Listado de Facturas el boton ver Adjunto, no funciona correctamente.

Added

  • [FASE 1] Editar/Eliminar Pagos.
  • [FASE 1] En Informes, agregar total pendiente de pago (Acumulado) sin filtro de periodo.
  • [FASE 1] En Informes, agregar total pendiente de pago proyectado (Acumulado) sin filtro de periodo.

Changed

  • [FASE 1] Mejorar estetica de Informes a un estilo mas dashboard de control.

Integraciones Externas

  • [FASE 3] Integración con API de Banco Galicia.
  • [FASE 3] Integración con API de Banco Roela/SIRO.
  • [FASE 3] Integración con API AFIP.

Funcionalidades Avanzadas e Informes Detallados

  • [FASE 3] Roles y Permisos de Usuario.
  • [FASE 3] Dashboard de Informes avanzado (gráficos, KPIs).
  • [FASE 3] Sistema de Notificaciones y Alertas.
  • [FASE 3] Generador de Informes Personalizables.

Backlog de Ideas

  • Notificaciones por email para vencimientos de facturas.
  • Exportar informes y listados a PDF.
  • Integración con calendario para recordatorios de pago.

[1.3.1] - (26/06/2025)

Added

  • Añadida la capacidad de eliminar un archivo adjunto en la pantalla de procesamiento de comprobantes ARCA antes de guardarlo.
  • Añadido Favicon para mejorar la identidad visual del sitio en pestañas y marcadores.

Changed

  • Mejorada la interfaz de eliminación de adjuntos, reemplazando el botón de texto por un icono 'X' más limpio y minimalista con tooltip.
  • El área de 'arrastrar y soltar' para adjuntos ahora se desactiva visualmente una vez que ya se ha cargado un archivo, mejorando la experiencia de usuario.

[1.3.0] - (26/06/2025)

Changed

  • Reestructurado completamente el menú de navegación principal para una mejor agrupación lógica de las funcionalidades.
  • Refactorizado el sistema de submenús para que el elemento padre se marque como activo cuando se visita una de sus sub-páginas, mejorando la orientación del usuario.
  • El estado de colapso del menú ahora se guarda en la sesión del servidor en lugar del localStorage del cliente, eliminando el parpadeo visual (FOUC) al recargar la página.

Added

  • Nueva funcionalidad de "pop-out" (menú flotante) para los submenús cuando la barra de navegación está en modo colapsado, permitiendo el acceso a todas las opciones.
  • Añadido un indicador visual () a los ítems del menú colapsado que contienen submenús.
  • Añadidos tooltips con el nombre de la sección al pasar el cursor sobre los iconos en el menú colapsado.
  • Nueva estética para los submenús en la vista expandida, utilizando líneas de conexión para clarificar la jerarquía.

[1.2.9] - (24/06/2025)

Added

  • Módulo de Empleados: Se ha añadido un nuevo módulo completo para la gestión de personal.
  • Nómina de Empleados: Funcionalidad para dar de alta, editar, eliminar y ver el detalle de los empleados.
  • Asignación de Talles: Se pueden configurar los talles de indumentaria (prenda superior, pantalón, calzado) para cada empleado desde su ficha en la nómina.
  • Órdenes de Compra de Indumentaria: Nuevo sub-módulo para crear y gestionar órdenes de compra de indumentaria.
  • Adición de Ítems en Lote: En el detalle de una orden, se pueden añadir múltiples tipos de prendas y cantidades para un empleado en una sola acción. El sistema autocompleta los talles.
  • Resumen de Compra Automático: Las órdenes de compra ahora muestran un resumen agrupado por tipo de prenda y talle, facilitando el pedido al proveedor.
  • Gestión de Estados de Orden: Implementado el flujo de estados (Pendiente, Comprada, Recibida, Cancelada) para las órdenes de compra.
  • Generación Automática de Historial: Al marcar una orden como "Recibida", el sistema crea automáticamente los registros de entrega en la ficha de cada empleado involucrado.
  • Exportación a PDF: Se ha añadido la funcionalidad de exportar el resumen de una orden de compra a un documento PDF.

Changed

  • Navegación del Sidebar: Se ha reestructurado el menú. "Empleados" es ahora un menú principal que contiene los submenús "Nómina" y "Órdenes de Compra". El anterior menú "Flota y Personal" se ha renombrado a "Flota".
  • Modelo EntregaIndumentaria: Se ha refactorizado para desnormalizar el nombre y talle del elemento, asegurando la integridad del historial aunque los datos de la orden cambien.
  • Formulario de Empleado: Los campos de talle ahora son menús desplegables con opciones predefinidas desde la configuración, en lugar de campos de texto libre.

[1.2.8] - (20/06/2025)

Changed

  • Se mejoró la limpieza de importaciones de CSV huérfanas para ser específica por usuario, evitando que un operador borre el trabajo pendiente de otro.
  • Se refactorizó el script de subida de archivos (_file_upload_preview.js) para ser más robusto y reutilizable en diferentes contextos (con y sin previsualización de imagen).

Fixed

  • Módulo ARCA (Procesamiento):
  • Se corrigió un error de cálculo en la vista de procesamiento de comprobantes que mostraba incorrectamente el valor de "Otros Impuestos".
  • Se solucionó un error 404 que impedía la previsualización de archivos adjuntos al editar un comprobante, moviendo la ruta de visualización (vista_adjunto) al blueprint correcto.
  • Se implementó la lógica de guardado que faltaba para el "Tipo Principal" y "Subtipo" del desglose de impuestos, asegurando que estos datos se persistan correctamente.
  • Se arregló la lógica del formulario de edición para que los campos "Tipo Principal" y "Subtipo" de impuestos se repueblen correctamente con los datos previamente guardados.
  • Módulo ARCA (Importación CSV):
  • Se solucionó un error que impedía la correcta importación de las columnas "Moneda" y "Tipo de Cambio" desde el archivo CSV de AFIP.
  • Se estandarizó el componente de subida de archivos en la página "Subir Compras", implementando la funcionalidad de arrastrar y soltar (drag-and-drop) y corrigiendo el botón "Seleccionar archivo" que no funcionaba.
  • UI/UX:
  • Se restauró el estilo visual del borde punteado en los componentes de subida de archivos en toda la aplicación.
  • Se mejoró la validación en el formulario de procesamiento de comprobantes para requerir la selección del "Subtipo" de impuesto si el campo de importe tiene valor y existen subtipos disponibles.

Removed

  • Se eliminó el CSS obsoleto del antiguo componente de subida de archivos (file-upload-fintex).

[1.2.7] - (17/06/2025)

Added

  • Configuración completa de despliegue para un entorno de producción en Ubuntu.
  • Integración de Nginx como reverse proxy y servidor de archivos estáticos.
  • Integración de Gunicorn como servidor de aplicaciones WSGI.
  • Creación de un servicio systemd (fintex.service) para gestionar el proceso de Gunicorn de forma robusta.
  • Creación de un usuario de sistema dedicado (fintexapp) para ejecutar la aplicación de forma segura.
  • Soporte para certificados SSL/HTTPS a través de Let's Encrypt y Certbot.

Changed

  • Refactorización en app/__init__.py para que las rutas de las carpetas de subida (uploads) se generen de forma dinámica, eliminando rutas harcodeadas y haciendo el proyecto portable entre diferentes entornos.
  • Refactorización en app/config.py para hacer más explícita y robusta la carga de configuración de la base de datos para entornos de desarrollo y producción, dependiendo únicamente de variables de entorno.
  • Actualización del servicio systemd para especificar explícitamente el entorno de producción (FLASK_CONFIG=prod).

[1.2.6] - (12/06/2025)

Added

  • Se implementó un sistema de bibliotecas de logos privadas por cuenta. Ahora, los logos subidos por un usuario se guardan en un directorio específico para su cuenta (instance/account_data/{id_cuenta}/logos/), garantizando la privacidad entre cuentas.
  • Se implementó un sistema de almacenamiento privado por cuenta para los adjuntos de los comprobantes ARCA, mejorando la seguridad y el aislamiento de los datos.
  • Se añadió un nuevo endpoint en la API (/biblioteca/api/logos/upload) para gestionar la subida de logos de forma asíncrona, mejorando la experiencia de usuario.

Changed

  • Se rediseñó la interfaz del selector de logos para mostrar tres pestañas: "Logos del Sistema", "Mis Logos Subidos" y "Subir Nuevo", ofreciendo una navegación más clara.
  • Se mejoró el diseño de la página de detalle del proveedor (proveedor_detalle.html) para mostrar el logo en un tamaño de 64x64px seguido de un separador y el nombre del proveedor, logrando una cabecera más limpia y profesional.
  • Se refactorizó por completo la lógica del biblioteca_routes.py para soportar el nuevo sistema de directorios dual (global y privado) para los logos.

Fixed

  • Se corrigió un error crítico (KeyError) que impedía el inicio de la aplicación debido a un cambio de nombre en una clave de configuración de las carpetas de logos.
  • Se solucionó un bug que impedía que los logos por defecto del sistema se mostraran en la lista del selector de logos.
  • Se corrigió un error que causaba que las imágenes de los logos globales aparecieran rotas (error 404) debido a una incorrecta resolución de la ruta del archivo.
  • Se solucionó un error (TypeError y el subyacente IntegrityError) que impedía la creación de nuevos Proveedores y Medios de Pago al intentar poblar el campo id del formulario en un registro nuevo.
  • Se corrigió un problema de usabilidad donde los datos de un formulario se borraban al seleccionar o subir un nuevo logo desde el modal.

[1.2.5] - (11/06/2025)

Added

  • Procesamiento ARCA: Se ha añadido un botón "Autocompletar con Total" en el desglose de "Otros Impuestos" para facilitar y agilizar la carga de datos.
  • Implementación de una nueva biblioteca de logos para proveedores, permitiendo seleccionar logos existentes desde una carpeta estática o subir nuevos archivos (.png, .jpg, .gif, .ico, .svg).
  • Soporte para imágenes en formato .svg en los logos de proveedores.
  • Añadida la columna "N° Factura" al listado de Comprobantes ARCA para una identificación más rápida del comprobante.

Changed

  • Comprobantes ARCA: Se han actualizado los estados a "Procesado" (verde), "Pendiente Proveedor" (celeste) y "Pendiente Procesamiento" (amarillo) para una mejor identificación visual.
  • Comprobantes ARCA: Se ha reorganizado el orden de las columnas en el listado para mejorar la legibilidad, siguiendo el orden: Fecha Emisión | Tipo | N° Factura | Proveedor | Nro Doc. Emisor | Total | Estado | Acciones.
  • Renombrado el estado de PENDIENTE_VINCULACION_PROVEEDOR a PENDIENTE_PROVEEDOR en el sistema de Comprobantes ARCA para mayor claridad.
  • Al vincular un proveedor a un Comprobante ARCA, ahora se actualizan automáticamente todos los demás comprobantes pendientes que compartan el mismo CUIT.
  • El filtro de formato de moneda (format_ars) ahora es sensible al código de moneda del comprobante (moneda_cod), mostrando "USD" para dólares y "$" para pesos en todas las vistas relevantes.
  • Actualizados los textos de "Icono" a "Logo" en todas las vistas relacionadas con proveedores.

Fixed

  • Procesamiento ARCA: Se ha corregido el cálculo del campo "Otros Impuestos" para que se base en los totales del comprobante (Total - Netos - IVA), asegurando la precisión del dato al cargar el formulario.
  • Procesamiento ARCA: Se solucionó un bug crítico donde los campos de moneda se multiplicaban incorrectamente al perder el foco. El helper de formato de moneda ahora maneja correctamente los separadores decimales y de miles.
  • Procesamiento ARCA: Se restauró la funcionalidad del botón "Adjuntar Comprobante", que había dejado de funcionar.
  • Procesamiento ARCA: Se ha añadido una validación que impide guardar el formulario si una fila del desglose de "Otros Impuestos" tiene un importe mayor a cero pero no se ha seleccionado un "Tipo Principal".
  • Procesamiento ARCA: El botón de acción para comprobantes en estado "Pendiente Proveedor" ahora enlaza correctamente a la página de asignación.

Removed

  • Eliminado el botón de "Editar" redundante de la lista de acciones de los Comprobantes ARCA. La edición y procesamiento se centralizan en el botón "Procesar Detalle".

[1.2.45] - (10/06/2025)

Changed

  • Mejorada la interfaz de comprobante_process.html haciendo colapsables las secciones de Detalles, Asociación, IVA y Otros Impuestos para una mejor organización.
  • Reorganizado el layout del bloque 'Detalles del Comprobante' para manejar mejor nombres de emisor largos y añadir los campos 'Moneda' y 'Tipo de Cambio'.
  • Se ha ajustado el layout de los campos de formulario en 'Asociación interna' para mejorar la simetría visual.
  • Se han acortado los textos de ayuda en la selección de servicios recurrentes para mayor concisión.
  • Mejorado el mensaje por defecto en el área de previsualización de adjuntos cuando no hay ningún archivo, haciéndolo más visual y descriptivo.

Fixed

  • Corregido el tamaño de fuente en los menús desplegables de Select2 para que sea consistente con el resto de los campos de formulario.
  • Solucionado un problema de alineación con el campo de búsqueda de Etiquetas que causaba una altura inconsistente en el control.

[1.2.4] - (09/06/2025)

Changed

  • Se ha refactorizado el flujo de gestión de facturas, eliminando la carga manual y la edición directa de facturas (facturas_cargar.html).
  • La creación y edición de facturas ahora se centraliza a través del procesamiento de ComprobanteArca.
  • La vista de "Listado de Facturas" se ha actualizado para funcionar como una vista de solo lectura de las facturas procesadas.
  • El botón de "Editar" en el listado de facturas ahora enlaza directamente con la pantalla de procesamiento del ComprobanteArca de origen.
  • Se ha actualizado el formato de visualización de las Etiquetas en la tabla de facturas para mostrar píldoras con sus respectivos colores.

Removed

  • Se ha eliminado la ruta, el formulario (FacturaForm) y la plantilla (facturas_cargar.html) asociados a la carga/edición manual de facturas.
  • Se ha eliminado el enlace "Subir Factura" del menú de navegación lateral.

Fixed

  • Se ha corregido un TemplateSyntaxError en la plantilla facturas_listado.html relacionado con el desempaquetado de diccionarios en los enlaces de ordenación y paginación.

[1.2.3] - (08/06/2025)

Added

  • Personalización de Etiquetas: Se añadió la funcionalidad para que los usuarios puedan asignar un color personalizado a cada etiqueta, permitiendo una mejor identificación visual.
  • En la página de vinculación de proveedores ARCA, el selector de "Categoría" ahora muestra la ruta jerárquica completa (ej. Servicios / Gastos Generales) para una mejor contextualización.
  • En la página de vinculación de proveedores ARCA, se muestra el texto descriptivo para "Tipo de Comprobante" (ej. "Factura A") y "Tipo Doc. Emisor" (ej. "CUIT") en lugar de sus códigos numéricos.
  • Se ha creado un nuevo componente CSS _detail_block.css para estandarizar la apariencia de los bloques de solo lectura.
  • Se ha añadido la funcionalidad para asignar una o más etiquetas (Etiqueta) a un ComprobanteArca desde la pantalla de procesamiento.

Changed

  • UI de Módulo de Etiquetas: Se modernizó la interfaz del módulo de "Etiquetas".
  • El formulario de creación/edición ahora es colapsable para una vista más limpia.
  • Se rediseñó la visualización de las etiquetas en la tabla, mostrando ahora un icono y el texto con el color personalizado por el usuario para un look más moderno y minimalista.
  • Se ha rediseñado la página de vinculación de proveedores ARCA (/link_provider) para mejorar la usabilidad y el flujo de trabajo.
  • El layout se ajustó a 4 columnas para el resumen del comprobante y 8 para el formulario de creación del proveedor.
  • El formulario de creación de proveedor ahora agrupa los campos "Tipo Documento", "Número Documento" y "Categoría" en una sola fila para optimizar el espacio vertical.
  • Se ha mejorado y compactado la estética del bloque de "Detalles del Comprobante ARCA", eliminando negritas y ajustando el espaciado para una apariencia más limpia.
  • Se ha refactorizado el selector de etiquetas en el formulario de procesamiento de comprobantes ARCA, cambiando de una lista estática de checkboxes a un componente Select2 dinámico y con capacidad de búsqueda.
  • Se ha mejorado la validación del lado del servidor para la selección de etiquetas en ComprobanteArcaForm al poblar correctamente las opciones del campo antes de la validación.
  • Se ha mejorado significativamente el estilo y la experiencia de usuario del componente Select2 para selección múltiple, corrigiendo errores de layout, la alineación del placeholder y el comportamiento del campo de búsqueda.

Fixed

  • Se ha robustecido la lógica de edición de etiquetas en el backend, adoptando el patrón de HiddenField para un manejo más seguro del estado.
  • Se ha corregido el mensaje de alerta en la página de vinculación de proveedores para que no muestre el código numérico del tipo de comprobante.

[1.2.2] - (07/06/2025)

Added

  • Jerarquía de Categorías: Se ha implementado un sistema de categorías de hasta 3 niveles de anidación.
  • El modelo Categoria ahora tiene una relación de auto-referencia (parent_id).
  • Se añadieron validaciones para prevenir bucles y limitar la profundidad a 3 niveles.
  • Visualización en Árbol: La página de "Administrar Categorías" ahora muestra las categorías en una vista de árbol jerárquico, mejorando drásticamente la visualización de la estructura.
  • Asignación de Categorías en Proveedores: El formulario de "Proveedores" ahora permite asignar una categoría terminal (hoja) del nuevo árbol jerárquico. El selector muestra la ruta completa para un mejor contexto (ej. "Gastos / Oficina / Insumos").

Changed

  • UI de Módulo de Categorías: El formulario de creación/edición de categorías ahora es colapsable y presenta un diseño más compacto y consistente con otros módulos de la aplicación.
  • Se ha mejorado la lógica para la selección de categorías padre, excluyendo la categoría actual y sus descendientes para evitar inconsistencias de datos.

Fixed

  • Corregido un TypeError al intentar filtrar categorías por su nivel de profundidad en la base de datos.
  • Solucionado un ValueError en el renderizado de los formularios al manejar correctamente la opción por defecto ("Nivel Raíz") en los SelectField con coerce=int.
  • Resuelta una dependencia circular (ImportError) que impedía el arranque de la aplicación al refactorizar el CategoriaForm.

[1.2.1] - (07/06/2025)

Added

  • Nueva relación funcional que permite asignar una "Categoría" de gasto a cada "Proveedor".
  • Indicadores visuales (*) para los campos obligatorios en el formulario de proveedores.
  • Notificación de error (Toastr) cuando el envío del formulario de proveedores falla por validación.

Changed

  • Refactorizada la lógica de creación y edición de Servicios Recurrentes para seguir las mejores prácticas de Flask-WTF, utilizando un HiddenField en el formulario para gestionar el ID de la entidad y simplificando el código en la ruta.
  • Mejorada la interfaz de "Servicios Recurrentes" para una experiencia más limpia y compacta.
  • El formulario de creación/edición ahora está contenido en un panel colapsable, que se expande automáticamente al editar.
  • Reorganizado el layout del formulario para presentar los campos principales en una sola fila en pantallas de escritorio.
  • Rediseñada la columna "Última Factura Vinculada" en la tabla para mostrar la información de forma más concisa y en una sola línea.
  • El formulario de "Agregar Nuevo Proveedor" ahora es colapsable para una interfaz más limpia y se expande automáticamente al editar o si hay errores.
  • Se ha rediseñado y compactado el layout del formulario de proveedores para un uso más eficiente del espacio.
  • El campo "Categoría Contribuyente" fue reemplazado por un selector de las Categorías de gastos existentes en el sistema.

Fixed

  • Corregido un error crítico en el módulo de Servicios Recurrentes donde la acción de editar creaba un nuevo registro en lugar de actualizar el existente, especialmente después de un error de validación del formulario.
  • Corregida la apariencia visual de los campos Select2 en el formulario de Servicios Recurrectes para que coincidan perfectamente en tamaño y estilo con los inputs estándar del formulario.
  • Asegurado que el panel del formulario de proveedores permanezca abierto después de un error de validación, facilitando la corrección de datos.

Fixed

  • Corregido un error fatal (AttributeError) en la página "Vincular Proveedor" del módulo ARCA, que ocurría al intentar renderizar el formulario de creación de proveedor con campos que ya no existían.
  • Actualizada la plantilla y la lógica de la ruta link_provider_for_arca para alinearla con la nueva estructura del ProveedorForm, asegurando consistencia en todo el sistema.

[1.2.0] - (06/06/2025)

Added

  • Módulo de Servicios Recurrentes:
    • Nuevo modelo ServicioRecurrente para gestionar gastos recurrentes individuales asociados a un proveedor.
    • Funcionalidad CRUD completa (Crear/Editar/Listar/Eliminar) para Servicios Recurrentes.
    • Nuevo campo dia_de_pago_estimado en ServicioRecurrente para registrar el día del mes en que se espera el pago.
  • Vista de Detalle de Proveedor:
    • Nueva ruta y plantilla (/proveedores/detalle/) para mostrar información detallada de un proveedor.
    • En esta vista se muestra la información general del proveedor, un listado de sus servicios recurrentes (con enlaces para editar), y las últimas 20 facturas asociadas a ese proveedor.
  • Integración de Comprobantes ARCA con Facturas:
    • Se añadió una clave foránea comprobante_arca_id al modelo Factura para vincularla con su origen en ComprobanteArca.
    • Al "procesar" un ComprobanteArca (en la vista /comprobantes-arca/procesar/), se crea o actualiza automáticamente una entrada correspondiente en el modelo Factura. Esto asegura que los comprobantes procesados aparezcan en el "Listado de Facturas" y los informes generales.

Changed

  • Refactorización Principal de Recurrencia de Proveedores:
    • El concepto de "Proveedor Recurrente" (proveedor_recurrente - campo BooleanField) en el modelo Proveedor ha sido eliminado y su lógica descontinuada. La recurrencia y proyección de gastos ahora se gestiona a través de la entidad ServicioRecurrente.
  • Lógica de ServicioRecurrente:
    • La propiedad importe_estimado en ServicioRecurrente ahora es calculada automáticamente. Toma el monto de la ComprobanteArca vinculada más reciente, multiplicado por su tipo_cambio.
    • Nuevas propiedades calculadas fecha_emision_estimada y fecha_pago_estimada_current_month en ServicioRecurrente para proyectar fechas de emisión y pago en el mes actual, basándose en la última factura o el dia_de_pago_estimado.
  • Flujo de Procesamiento de Comprobantes ARCA (/comprobantes-arca/procesar/):
    • Escenario 1 (Proveedor con 1 Servicio Recurrente): El campo ServicioRecurrente se auto-selecciona con el único servicio disponible y se deshabilita, minimizando la intervención del usuario. Se muestra un mensaje flash informativo.
    • Escenario 2 (Proveedor con >1 Servicio Recurrente): El campo ServicioRecurrente permanece habilitado para que el usuario seleccione. Se añade una validación para exigir la selección si el campo se deja vacío, y se muestra un mensaje flash de advertencia.
    • Escenario 3 (Proveedor sin Servicios Recurrentes): El campo ServicioRecurrente se oculta y, en su lugar, se muestra un botón "Crear Servicio Recurrente" que redirige al formulario de creación con el proveedor pre-seleccionado.
    • Al guardar el procesamiento del comprobante ARCA, se actualizan automáticamente las propiedades fecha_ultimo_pago_vinculado e importe_ultimo_pago_vinculado del ServicioRecurrente asociado.
  • Listado de Proveedores (/proveedores):
    • La columna "Recur." ahora muestra un icono y la cantidad de servicios recurrentes asignados al proveedor, o un icono gris si no tiene ninguno.
    • Se añadió un botón "Ver Detalle" en la columna de acciones que redirige a la nueva vista de detalle del proveedor.
  • Informes (/informes):
    • El cálculo de "Gasto Pendiente Total Proyectado" ha sido actualizado para basarse en la nueva lógica de ServicioRecurrente, utilizando su importe estimado o el monto real de la factura vinculada en el mes.
  • Exportación CSV de Facturas:
    • Se añadió la columna Comprobante ARCA ID para indicar el origen del comprobante.

Removed

  • La columna proveedor_recurrente del modelo Proveedor y su campo asociado en ProveedorForm.
  • La ruta factura.pendientes_carga y su plantilla (app/templates/facturas/pendientes_carga.html) han sido descontinuadas, ya que la funcionalidad de proyección ahora está centralizada en los informes y el módulo ServicioRecurrente.

[1.1.9] - (05/06/2025)

Added

  • Flujo de Vinculación de Proveedores para Comprobantes ARCA:
    • Implementación del nuevo estado PENDIENTE_VINCULACION_PROVEEDOR en el modelo ComprobanteArca para indicar comprobantes que aún no tienen un proveedor asociado en el sistema.
    • Nueva ruta y vista (/comprobantes-arca/link_provider/<id>) para un proceso dedicado de registro o vinculación de un proveedor a un comprobante ARCA.
    • Cuando un comprobante ARCA se importa o carga y no se encuentra un proveedor existente por CUIT/Denominación, se le asigna el estado PENDIENTE_VINCULACION_PROVEEDOR y el usuario es redirigido a esta nueva vista para registrar el proveedor faltante.
    • El formulario de registro de proveedor en la vista de vinculación (arca_link_provider.html) se autocompleta inteligentemente con los datos disponibles del comprobante (Nro. Doc. Emisor, Tipo Doc. Emisor, Denominación Emisor) para facilitar el registro.
    • Automatización de Vinculación en Lote: Al registrar un nuevo proveedor a través de este flujo, el sistema busca y actualiza automáticamente todos los demás comprobantes ARCA de la misma cuenta que comparten el mismo Nro. Doc. Emisor y Denominación Emisor y que también estén en estado PENDIENTE_VINCULACION_PROVEEDOR. Estos comprobantes adicionales se vinculan al nuevo proveedor y su estado cambia a PENDIENTE_PROCESAMIENTO.

Changed

  • Rediseño y Mejora de la Vista "Procesar Comprobante" (comprobante_process.html):
    • División de Pantalla 50/50: Se ajustó la proporción de las columnas principales en app/static/css/layout/_factura_layout.css de 30/70 a 50/50, proporcionando un diseño más equilibrado.
    • Estética Mejorada del Bloque "Datos del Comprobante (Lectura)": Se realizó un rediseño completo de este bloque. Los datos de solo lectura ahora se muestran de forma más visual, simulando campos de entrada bloqueados (display-input-block) con un fondo y borde distintivos, lo que mejora la legibilidad y la experiencia visual.
    • Introducción del nuevo componente CSS app/static/css/components/_detail_display.css para encapsular los estilos de visualización de datos de solo lectura.
    • El campo proveedor_id fue retirado del formulario principal de procesamiento de comprobantes ARCA, ya que su vinculación se gestiona ahora de forma obligatoria y anticipada a través del nuevo flujo de "Vinculación de Proveedores".
  • Manejo de Importación de Comprobantes ARCA (arca_routes.py):
    • La lógica de importación CSV ahora incluye una búsqueda activa de proveedores existentes en el sistema. Primero se busca por Nro. Doc. Emisor y Tipo Doc. Emisor, y si no se encuentra, se intenta por Denominación Emisor (Razón Social o Nombre de Fantasía).
    • El estado inicial de los comprobantes importados ahora puede ser PENDIENTE_VINCULACION_PROVEEDOR si no se detecta un proveedor existente.
  • Configuración de Tipos de Documento (config.py):
    • Se amplió el mapeo ARCA_TIPO_DOC_MAP para permitir una traducción más robusta de los códigos de tipo de documento (Tipo Doc. Emisor) recibidos en el CSV de ARCA a los tipos de documento internos del sistema (ej. '80' a 'CUIT').
  • Listado de Comprobantes ARCA (comprobantes_arca.html):
    • El listado ahora muestra el nuevo estado PENDIENTE_VINCULACION_PROVEEDOR y los comprobantes en este estado tienen un botón de acción directo para iniciar el proceso de "Vincular Proveedor".
    • El filtro de estado en la tabla ahora incluye el nuevo estado para facilitar la visualización y gestión.

[1.1.8] - (05/06/2025)

Added

  • Arquitectura JavaScript Modularizada:
  • Implementación de una nueva estructura modular para el código JavaScript en app/static/js/ (base/, layout/, modules/) para mejorar la organización, reusabilidad y mantenibilidad del frontend.
  • Creación de nuevos bundles de JavaScript (js_base, js_layout, js_modules) en app/init.py utilizando Flask-Assets para la concatenación y minificación de los scripts en producción.
  • Nuevo bloque Jinja {% block page_specific_data_js %} en base.html y plantillas hijas para una inyección temprana y segura de datos desde el backend (Python) a JavaScript (window.APP_DATA_PAGES).

Changed

  • Refactorización Completa del Código JavaScript del Frontend:
  • Todo el código JavaScript monolítico de main.js ha sido migrado y distribuido en archivos más pequeños y temáticos según su responsabilidad (_currency_helpers.js, _global_utils.js, _sidebar_nav.js, _facturas_form.js, _arca_process_form.js, _filters.js, _onboarding_plan.js, _general_crud.js).
  • Definición de Funciones Globales: Las funciones y helpers globales (ej. formatNumberAsCurrency, parseCurrencyToNumber, applyCurrencyFormatting, flashMessage, populateDependentSelect, initializeSelect2Multiple, initializeSelect2Single, showJsValidationError, calculateIvaDesglosadoSum, calculateTributoDesglosadoSum, calcularTotalFactura) han sido definidas explícitamente en el objeto window y fuera del evento DOMContentLoaded en sus respectivos archivos base/ para asegurar su disponibilidad inmediata al ser parseados por el navegador, previniendo ReferenceError.
  • Pase de Datos de Backend a Frontend: Todas las variables de Jinja necesarias en el lado del cliente ahora se inyectan a través del nuevo objeto window.APP_DATA_PAGES en el bloque page_specific_data_js de cada plantilla, reemplazando métodos anteriores y resolviendo problemas de timing en la carga de datos.
  • Funciones de Cálculo de Comprobantes ARCA: window.calculateIvaDesgloseSum y window.calculateTributoDesglosadoSum han sido refactorizadas para aceptar el "total esperado del comprobante" como argumento, eliminando su dependencia de variables globales propensas a errores de inicialización.
  • Manejo de Eventos de Botones "Añadir Línea": Se ha asegurado que los eventListener para añadir filas dinámicas (+ Añadir Línea de IVA, + Añadir Línea de Tributo) se adjunten de forma única y correcta al cargar la página, eliminando la doble adición de filas.
  • Inicialización de Módulos JavaScript: Se ha implementado una bandera _isInitialized en los módulos principales para asegurar que la lógica de inicialización dentro de DOMContentLoaded se ejecute una sola vez por carga de página.
  • Optimización de Select2: Se añadió destroy() antes de la reinicialización de Select2 para evitar warnings en consola y asegurar un comportamiento consistente.

[1.1.7] - (04/06/2025)

Changed

  • Módulo Comprobantes ARCA - Vista "Procesar Comprobante":
    • Se realizó un rediseño completo de la sección izquierda del formulario. Los datos originales del comprobante (Fecha de Emisión, Tipo, Punto de Venta, Número, CAE, Tipo y Nro. Doc. Emisor, Denominación, Tipo de Cambio, Moneda, Netos, Totales de IVA y Otros Tributos, Importe Total) ahora se muestran de forma clara en una tarjeta informativa y no son editables.
    • Sección "Desglose de IVA":
      • Se añadió un botón "Autocompletar IVA 21%" que permite rellenar rápidamente el importe del primer campo de IVA desglosado con el valor del IVA Total del comprobante.
      • Se implementó una validación estricta para el guardado: la suma de los ítems de IVA desglosados debe coincidir con el "IVA Total" del comprobante (con una pequeña tolerancia para flotantes). Si no coinciden, se muestra una advertencia y se bloquea el envío del formulario, informando al usuario la discrepancia.
    • Sección "Desglose de Otros Tributos":
      • Se implementó un sistema de selectores dependientes (cascada) para elegir el tipo de tributo. Al seleccionar un "Tipo Principal" (ej. "IIBB", "Percepción IVA"), el segundo selector ("Subtipo") se llena dinámicamente con opciones específicas (ej. provincias para IIBB, tipos para Percepción IVA).
      • Se amplió significativamente la lista de tipos de tributo disponibles en config.py para incluir una mayor discriminación (IIBB por jurisdicción, diversas percepciones, impuestos provinciales y municipales).
      • Se añadió una validación estricta similar a la del IVA: la suma de los ítems de tributos desglosados debe coincidir con el "Total de Otros Tributos" del comprobante. Si no coinciden, se muestra una advertencia y se bloquea el envío del formulario.

Fixed

  • Módulo Comprobantes ARCA:
    • Se corrigieron múltiples ReferenceError en main.js relacionados con el orden de definición y ejecución de funciones de cálculo y de construcción de filas de desglose, asegurando que todas las funciones estén disponibles cuando se les llama.
    • Se solucionó el SyntaxError de Jinja2 en comprobante_process.html al corregir la sintaxis para iterar sobre listas que podrían ser nulas o vacías.
    • (Pendiente de confirmación para mañana): Se está trabajando para asegurar que el formulario de procesamiento no permita guardar si las sumas desglosadas de IVA o Tributos no coinciden con los totales del comprobante.

[1.1.6] - (03/06/2025)

Added

  • Se añadió un módulo completo para la gestión de Comprobantes ARCA, permitiendo la carga manual y masiva (CSV) de comprobantes.
  • La carga manual permite registrar datos básicos del comprobante y adjuntar un archivo.
  • La carga masiva importa datos desde un CSV de ARCA, identificando y gestionando duplicados y errores de formato. Se proporciona un resumen detallado de la importación y la opción de confirmar o cancelar la carga.
  • Se implementó una vista de listado de comprobantes ARCA con filtros por proveedor, tipo, estado, año y mes, y ordenamiento por diversas columnas.
  • Se añadió una vista detallada para "procesar" cada comprobante, permitiendo desglosar el IVA y otros tributos con sus respectivas alícuotas/tipos.
  • Se incluye la funcionalidad de descarga de adjuntos para los comprobantes ARCA.

Changed

  • Módulo Comprobantes ARCA: El campo "Tipo de Cambio" en los formularios de carga/edición y procesamiento ahora se muestra con formato de moneda ($ X.XXX,XX).
  • Módulo Comprobantes ARCA: El listado de comprobantes ARCA fue reordenado para mostrar: Fecha Emisión, Proveedor, Nro Doc. Emisor, Tipo (formateado), Neto (antes Neto Gravado), IVA Total, Otros Trib., Total (antes Monto), Estado, Acciones.

Fixed

  • Se corrigió un error por el cual la columna "Tipo" en el listado de comprobantes ARCA se mostraba vacía.

[1.1.5] - (02/06/2025)

Added

  • Nuevo Módulo: Vehículos:
  • Implementación CRUD (Crear/Editar/Listar/Eliminar) para vehículos.
  • Campos a registrar: Marca, Modelo, Año, Patente.
  • Registro de documentación asociada (Título, Cédulas, VTV, Seguro, Obleas GNC, etc.).
  • Registro de servicios técnicos y mantenimientos.
  • Registro de vencimiento de VTV.
  • Asignación de Chofer a vehículo.
  • Nuevo Módulo: Choferes:
  • Modelo y rutas CRUD (Crear/Editar/Listar/Eliminar).
  • Definición de campos principales.
  • Nuevo Módulo: Logs de Actividad:
  • Registro de todas las operaciones de modificación de la base de datos por usuario (creación, edición, eliminación de pagos, facturas, etc.).
  • Vista para auditar los logs.

[1.1.4] - 31/05/2025

Added

  • Nuevo Submenú "Pendientes de Carga" bajo Facturas:
  • Identifica y lista proveedores marcados como "recurrentes" (proveedor_recurrente=True) que no tienen ninguna factura registrada en el mes actual (fecha de emisión).
  • Para cada proveedor listado, calcula y muestra un "Importe Proyectado" basado en el promedio de todas sus facturas anteriores (con fecha de emisión anterior al mes actual).
  • Botón "Subir" en cada fila que redirige a la página de carga de facturas (/facturas/cargar), pre-seleccionando automáticamente el proveedor correspondiente en el formulario.
  • Nuevo ítem de menú en la barra lateral para acceder a esta funcionalidad.
  • Widget de "Gasto Pendiente Total Proyectado" en Informes:
  • En la página de informes (/informes), se añadió un nuevo widget que muestra el "Gasto Pendiente Total Proyectado".
  • Este total se calcula como la suma del "Gasto Pendiente Actual" (facturas pendientes o parciales) y la "Sumatoria de Importes Proyectados" de los proveedores listados en "Pendientes de Carga".
  • Validación JavaScript de Campos Requeridos: Implementada validación en el lado del cliente para campos de formulario requeridos (Proveedores, Número de Factura, Fecha de Emisión, Neto Gravado) para evitar envíos de formularios incompletos.
  • Persistencia de Archivo Adjunto en Fallos de Formulario: El archivo adjunto seleccionado/subido se mantiene visible en la previsualización del formulario incluso si la validación del lado del servidor falla, evitando que el usuario tenga que volver a subir el archivo.

Changed

  • Mejora en la Pre-selección de Proveedor en Formulario de Factura: La ruta /facturas/cargar ahora acepta un parámetro de consulta pre_select_proveedor_id para inicializar el campo de proveedor en el formulario.
  • Filtrado del Cálculo de "Importe Proyectado": Se asegura que las facturas usadas para el cálculo del promedio de "Importe Proyectado" de un proveedor sean solo aquellas con fecha de emisión anterior al mes actual, para evitar sesgos con datos del mes en curso.
  • Estilo de Input de Etiquetas (Select2): Se ajustó el CSS para las etiquetas seleccionadas en el campo Select2 (select2-multiple), haciéndolas más pequeñas y visualmente coherentes.
  • Altura de Campos Select2 'single': Se uniformó la altura de los campos Select2 de selección única (como Proveedor y Categoría) para que coincida con la altura de los demás inputs pequeños del formulario.
  • Altura de Campo "Detalle / Descripción": Se ajustó la altura inicial del campo textarea a la de los inputs normales, manteniendo su capacidad de redimensionarse verticalmente.
  • Estilo del Bloque "Importe Total Factura": Se mejoró la estética de este bloque para hacerlo más prominente y visualmente atractivo.
  • Lógica de Archivos Adjuntos: Se refactorizó el manejo de archivos adjuntos en el backend para una mayor robustez. Ahora, los archivos se guardan temporalmente en el servidor, su nombre se persiste a través de un campo oculto en el formulario, y se vinculan a la base de datos solo si el formulario se valida exitosamente. Esto evita la pérdida de archivos y mejora la experiencia del usuario.
  • Ruta de Descarga de Adjuntos Temporales: Se añadió una nueva ruta (/facturas/adjuntos_temp/<filename>) para servir archivos adjuntos que han sido subidos temporalmente pero aún no están vinculados a una factura en la base de datos.

Fixed

  • Errores de inicialización de Select2: Se corrigieron problemas que impedían que Select2 se inicializara correctamente en algunos campos.
  • Errores de sintaxis JavaScript: Se resolvieron varios SyntaxError relacionados con la inicialización y el manejo de Select2 en main.js.
  • Errores de ámbito (scope) de variables en Python: Se corrigieron NameError en factura_routes.py al asegurar que las variables (uploaded_temp_filename, file_to_delete_on_fail_path) se inicialicen correctamente.
  • Previsualización de adjuntos al fallar la validación: Se aseguró que la previsualización del archivo adjunto no se pierda si el formulario no valida, mostrando el archivo que el usuario subió hasta que se complete el formulario.
  • Se eliminó el error AttributeError: 'ImmutableMultiDict' object has no attribute 'args' en factura_routes.py.
  • El campo de etiquetas ahora se inicializa vacío por defecto y permite quitar etiquetas correctamente.

[1.1.3] - 30/05/2025

Added

  • Comando de Compilación de Assets: Introducción del comando flask assets build para pre-compilar los activos estáticos, esencial para el despliegue en producción.
  • Control de Versiones (Git): Inicialización del repositorio Git en la raíz del proyecto, configuración de .gitignore para excluir archivos temporales y sensibles, y conexión con un repositorio remoto para respaldo y sincronización.

Changed

  • Arquitectura CSS Modular: Implementada una estructura de carpetas modular (base/, layout/, components/) para organizar el código CSS. Adopción de una metodología de nomenclatura inspirada en BEM (Block, Element, Modifier) para las clases CSS (ej. card__title, btn-link--icon-only), mejorando la legibilidad, mantenibilidad y reusabilidad.
  • Gestión de Activos Estáticos (Flask-Assets): Integración de la extensión Flask-Assets en app/__init__.py para la compilación, concatenación y minificación automática del CSS. Definición de un Bundle principal (main_css) que agrupa todos los archivos CSS modulares en un único archivo packed.min.css.
  • Flujo de Trabajo de CSS: Transición de un enfoque de desarrollo con @import para modularidad a un enfoque de despliegue con un único archivo CSS compilado, optimizando la entrega al navegador y reduciendo solicitudes HTTP.
  • Uso de Clases HTML: Actualización masiva de todas las plantillas HTML para utilizar las nuevas clases CSS con nomenclatura inspirada en BEM, mejorando la semántica y el desacoplamiento entre estructura y estilo.

Fixed

  • Rendimiento de Carga de UI: Resuelta la lentitud en la carga de las páginas web que se producía debido a la alta cantidad de solicitudes HTTP generadas por los @import anidados en el CSS. La concatenación del CSS a través de Flask-Assets redujo estas solicitudes a una única.
  • Funcionalidad de Menús (Sidebar): Sincronización de la lógica JavaScript en main.js con las nuevas clases CSS del sidebar y sus submenús (is-active, is-open), restaurando la funcionalidad de colapsado y despliegue.
  • Alineación de Asteriscos Requeridos: Corregido el desplazamiento vertical de los asteriscos * de los campos requeridos en los formularios. La lógica en la macro render_field de _form_helpers.html fue ajustada para renderizar el asterisco correctamente dentro de la etiqueta <label>, asegurando su alineación.
  • Error de Filtro Flask-Assets: Resolución del error ValueError: No filter 'url_rewriting' durante la compilación de assets, eliminando el filtro no disponible del bundle CSS.

[1.1.2] - 29/05/2025

Changed

  • Migración de Estilos CSS: Se realizó una refactorización completa de los estilos de la página manage_plan.html, moviendo todas las reglas CSS inline y las definidas en el bloque <style> de la plantilla a styles.css.
  • Eliminación de Estilos Inline: El bloque <style> fue completamente removido de manage_plan.html.
  • Ajustes de Clases HTML: Se adaptó el HTML para utilizar clases predefinidas o nuevas clases introducidas en styles.css (ej. account-title-status, usage-card, plan-card-option), mejorando la modularidad y la coherencia visual.
  • Nuevas Variables CSS: Añadidas variables --color-gray-200 y --color-orange-100 a styles.css para el fondo de encabezados de planes no populares y el color de texto de subtítulos en planes populares.
  • Nuevas Clases de Estilo: Incorporación de nuevas secciones de estilo y clases específicas en styles.css para Account Summary, Usage Cards y Plan Selection Grid, encapsulando los estilos y mejorando la organización.
  • Coherencia y Adaptación CSS: Asegurada la coherencia con Bootstrap y los estilos existentes de Finix, utilizando variables CSS y ajustando el padding/márgenes. El botón "Cambiar de Plan" (submitPlanChangeBtn) mantiene su estilo consistente.

Fixed

  • Ninguna corrección de error específica en esta versión, ya que el enfoque fue la refactorización de estilos.

[1.1.1] - 28/05/2025

Added

  • Sistema de Gestión de Suscripciones:
  • Modelo Account: Añadidos campos para el estado de la cuenta (status: ACTIVE, SUSPENDED), fecha de creación (date_created), fecha de vencimiento del plan (plan_expires_at), fecha de suspensión (suspended_at), y fecha del último pago (last_payment_date).
  • Nuevo Modelo SubscriptionPayment: Una tabla dedicada para registrar el historial de cada pago de suscripción, incluyendo detalles como monto, plan pagado, período cubierto y referencias a Mercado Pago.
  • Migraciones de Base de Datos: Generación y aplicación de las migraciones necesarias para integrar estos nuevos campos y la tabla SubscriptionPayment.
  • Lógica de Activación y Suspensión Automática: Implementada en app/__init__.py (a través de @app.before_request) para verificar el vencimiento del plan y automáticamente cambiar el status de la cuenta a SUSPENDED si ha expirado.
  • Registro de Pagos de Suscripción: El mercadopago_webhook (en main_routes.py) ahora activa la cuenta (status = 'ACTIVE'), calcula y establece la nueva plan_expires_at (extendiendo desde la fecha actual o la fecha de vencimiento anterior, sumando un mes), y registra el pago detallado en el nuevo modelo SubscriptionPayment, actualizando last_payment_date.
  • Cálculo de "Saldo a Abonar": Se muestra el importe pendiente a pagar si el plan ha vencido.
  • Página dedicada para Cuentas Suspendidas: (suspended_account.html) que informa al usuario y lo guía para reactivar su suscripción.

Changed

  • Rediseño Completo de la Página "Mi Cuenta y Plan" (manage_plan.html):
  • Sección "Estado de Cuenta": Presentación más clara del status actual (Activo/Suspendido) y fechas clave (fecha de alta, último pago, vencimiento). El campo "Vencimiento del Plan" ahora muestra los días restantes (o días vencidos) de forma dinámica y visualmente resaltada. El "Saldo a Abonar" se muestra de forma prominente.
  • Sección "Uso Actual de Recursos": Las tarjetas individuales (Proveedores, Facturas, Operadores) han sido estilizadas con una barra naranja vertical en el margen izquierdo. Tipografía y espaciado ajustados. Implementada una barra de progreso visual para el uso de facturas registradas.
  • Sección "Cambiar de Plan": Nuevo estilo de tarjetas de plan (diseño vertical, moderno e interactivo), diseño de 4 columnas en pantallas grandes, interactividad mejorada con efectos de hover y selected. Los botones "Seleccionar" usan clases de Bootstrap. Se añadió un "Popular Ribbon" y un icono de verificación (fa-check) para la selección.
  • Historial de Pagos de Suscripción: Añadida una tabla para listar todos los pagos registrados.
  • Flujo de Usuario Suspendido: Los usuarios con cuentas SUSPENDED son redirigidos directamente a la página "Mi Cuenta y Plan" y se les muestra una notificación Toastr. Se mantiene el acceso restringido a otras páginas.
  • Activación de Planes Gratuitos: La selección del plan "Gratuito" durante el onboarding o al cambiar de plan ahora activa la cuenta (status='ACTIVE') y establece plan_expires_at como None.
  • Reactivación de Cuentas: Las cuentas suspendidas se activan automáticamente a ACTIVE al realizar un pago exitoso de un plan de pago o al seleccionar el plan "Gratuito".
  • Flujo de Creación de Cuenta (Google OAuth): Nuevas cuentas creadas a través de Google (auth_routes.py) ahora se inicializan con una fecha de creación (date_created), un estado activo (status='ACTIVE') y el plan por defecto.
  • Lógica de Cambio de Plan (account_settings_routes.py): Modificaciones en la ruta para integrar la verificación del estado actual de la cuenta y el cálculo del "saldo a abonar".
  • Optimización de Código: Ajuste en app/__init__.py para que la variable now inyectada al contexto de Jinja sea un objeto datetime completo, permitiendo cálculos de fecha más precisos en las plantillas.
  • Iconos de Características de Plan: Los íconos de las características incluidas en el plan actual y en las opciones de cambio de plan han sido actualizados de fas fa-check a fas fa-check-circle.

Fixed

  • Errores de Migración SQLite (Cannot add a NOT NULL column with default value NULL): Corregida la migración generada automáticamente añadiendo server_default a las columnas date_created y status para permitir que SQLite las agregue a tablas existentes con datos.
  • ReferenceError: highlightSelectedPlanCard is not defined: Resuelto el error de JavaScript eliminando la llamada directa onclick en el HTML de las tarjetas de plan. La interactividad de selección ahora se maneja completamente mediante addEventListeners en JavaScript.
  • Error de Localización en Formateo de Moneda (TypeError: category LC_ALL is not supported): Corregido el filtro format_ars que fallaba en algunos entornos Python; ahora utiliza locale.LC_NUMERIC y cuenta con un sistema de fallback más robusto.
  • Error de Atributo Indefinido (UndefinedError: 'Account object' has no attribute 'balance_due'): Resuelto al asegurar que los atributos de la cuenta (balance_due, status, due_date, last_payment_date, y suspension_date) sean accedidos de forma segura en la plantilla, presuponiendo su inclusión en el modelo Account y la disponibilidad de filtros para su formateo.
  • Persistencia de Nuevos Campos: Asegurada la persistencia de los nuevos campos de suscripción durante el flujo de creación y actualización de cuentas y pagos.

[1.1.0] - 27/05/2025

Added

  • Filtro por Estado de Pago en Listado de Facturas:
  • Añadido SelectField en la plantilla facturas_listado.html.
  • Actualizada la lógica de filtrado en factura_routes.py para Factura.estado.
  • Constantes ESTADOS_FACTURA_CHOICES y ESTADOS_FACTURA_VALIDOS añadidas a config.py e inyectadas para uso en plantillas y validación.
  • Iconos para Entidades (Proveedores, Categorías, Medios de Pago):
  • Añadido campo nombre_archivo_icono a los modelos Proveedor, Categoria, MedioDePago y migraciones aplicadas.
  • Definidas carpetas de subida (UPLOAD_ICONOS_PROVEEDOR_FOLDER, etc.) en config.py y creadas en app/__init__.py.
  • Añadido FileField (con FileAllowed y ALLOWED_ICON_EXTENSIONS de config.py) y BooleanField (eliminar_icono) a ProveedorForm, CategoriaForm, MedioDePagoForm.
  • Actualizadas las rutas CRUD correspondientes para procesar subida, reemplazo y eliminación de iconos físicos y en DB.
  • Añadidas rutas de descarga (descargar_icono_<entidad>) para servir los iconos.
  • Actualizadas las plantillas de listado y edición para mostrar los iconos, el campo de subida y la opción de eliminar icono.

Changed

  • Notificaciones Pop-up: Reemplazados mensajes flash estándar por notificaciones Toastr.js en base.html.
  • Mejoras UI/UX Sidebar:
  • Sidebar ahora colapsa por defecto en la primera visita (estado guardado en localStorage).
  • Botón de toggle rediseñado como una pestaña/línea vertical sutil en el borde del sidebar.
  • Actualizados CSS (styles.css) y JavaScript (main.js) para el nuevo comportamiento y apariencia del sidebar y su toggle.
  • Rediseño Página Medios de Pago:
  • Título de página implementado como "breadcrumb" en el main-header.
  • Layout del formulario y listado reestructurado para mejor uso del espacio y estética.
  • Estilos de botones btn-link estandarizados y aplicados.
  • CSS específico de la página consolidado en styles.css y buttons_finix.css.

Fixed

  • Corregido NameError: name 'send_from_directory' is not defined en rutas de descarga de iconos.
  • Corregido RuntimeError: Working outside of application context en forms.py al instanciar FileAllowed con current_app.
  • Corregido el poblamiento de form.<FileField>.data en las rutas al instanciar los formularios (usando Form() en POST).
  • Corregido jinja2.exceptions.TemplateSyntaxError en facturas_listado.html por sintaxis en url_for.
  • Solucionado IndentationError en app/__init__.py.
  • Ajustes de alineación de iconos y texto en botones btn-link.

[1.0.9] - 26/05/2025

Changed

  • CSS completamente centralizado en app/static/css/styles.css. Bloques extra_css eliminados de plantillas específicas o dejados vacíos.
  • Organización interna de styles.css mejorada con secciones comentadas para mayor claridad y mantenibilidad.

Fixed

  • Corregido layout y alineación de la barra de filtros en facturas_listado.html y impuestos_detalle.html.
  • Eliminados comentarios de Jinja residuales que se mostraban como texto en impuestos_detalle.html.
  • Asegurada la funcionalidad del auto-submit en filtros de impuestos_detalle.html y su correcta interacción con los parámetros del backend.

[1.0.8] - 25/05/2025

Changed

  • Refactorización parcial del formulario de Carga/Edición de Facturas (FacturaForm) para usar Flask-WTF para campos estáticos (Proveedores, Categoría, Tipo Comprobante, Número, Fechas, Etiquetas, Detalle, Importes principales, Percepciones individuales). Secciones dinámicas de IVA/IIBB y manejo de archivos mantienen lógica anterior por ahora.

Fixed

  • Corregido ValueError: invalid literal for int() with base 10: '' en FacturaForm al quitar coerce=int de SelectField y SelectMultipleField, manejando la conversión a entero manualmente en la vista.
  • Asegurada la correcta población de choices para los campos de selección en FacturaForm dentro de la vista cargar_o_editar_factura.

[1.0.7] - 24/05/2025

Changed

  • Refactorización de formularios para usar Flask-WTF:
  • Formulario de Categorías (CategoriaForm): Implementación completa, validación de unicidad en la vista.
  • Formulario de Etiquetas (EtiquetaForm): Implementación completa, validación de unicidad en la vista.
  • Formulario de Medios de Pago (MedioDePagoForm): Implementación completa, validación de unicidad en la vista.
  • Formulario de Registro de Pagos (PagoForm): Implementación con SelectField dinámicos y StringField para monto.

Fixed

  • Corregido NameError: name 'proveedor_bp' is not defined en pago_routes.py, usando pago_bp.
  • Solucionado ValueError por coerce=int en SelectField de PagoForm.
  • Corregida importación faltante de Proveedor en pago_routes.py.
  • Ajustes visuales en la página de Changelog (badges de Fase y formato de fecha).

[1.0.6] - 23/05/2025

Added

  • Inicialización y configuración de Flask-Migrate para la gestión de cambios en el esquema de la base de datos.
  • Creación del repositorio de migraciones (migrations/) y archivo alembic.ini.
  • Generación y aplicación de la primera migración base ("Initial database schema.") que captura el estado actual de los modelos.
  • Ejemplo de flujo de migración: Añadido campo es_activo al modelo Categoria, generación y aplicación del script de migración correspondiente.

Fixed

  • Solucionado TypeError: _get_facturas_query_con_filtros() missing 1 required positional argument: 'args' en exportar_facturas_csv al pasar request.args.
  • Corregido jinja2.exceptions.UndefinedError: 'date' is undefined en script de impuestos_detalle.html pasando current_year_for_js desde la vista.

[1.0.5] - 22/05/2025

Added

  • Campo "Detalle/Descripción" (TEXT) añadido al modelo Factura, integrado en formulario y mostrado (parcialmente) en listado.
  • Filtros por Rango de Fechas (Emisión Desde/Hasta, Vencimiento Desde/Hasta) y por Período Mensual (Año/Mes) en el Listado de Facturas y en el nuevo Módulo de Impuestos.
  • Columnas "Tipo", "Neto Gravado", "IVA Total", "Total Factura", "Saldo Pendiente", "Estado", "Vencimiento" hechas ordenables en el Listado de Facturas.
  • Nuevo Módulo: Medios de Pago (Modelo MedioDePago, CRUD completo con formulario, plantilla medios_de_pago.html y enlace en sidebar).
  • Opción para Exportar Listado de Facturas a formato CSV, respetando los filtros aplicados.
  • Nuevo Módulo: Impuestos (impuesto_routes.py, plantilla impuestos_detalle.html) con desglose granular de IVAs, IIBB por jurisdicción y otras percepciones, con filtros de fecha/período.

Changed

  • Modelo Pago: Campo medio_pago (String) cambiado a medio_de_pago_id (ForeignKey) y relacionado con MedioDePago.
  • Formulario de Pagos: Campo "Medio de Pago" ahora es un SelectField.
  • Mejoras de UI en Listado de Facturas e Impuestos (barra de filtros, botones, encabezados de tabla).
  • Presentación de Detalle de Impuestos mejorada usando tarjetas.

Fixed

  • Eliminado botón "Recalcular Estado" de facturas.
  • Corregidos múltiples TemplateSyntaxError en facturas_listado.html relacionados con url_for.
  • Asegurada la correcta visualización del Changelog en la aplicación.

[1.0.4] - 22/05/2025

Fixed

  • Corregido estado de factura para que se actualice correctamente a "PAGADA" (antes "PAGADA PARCIAL" con saldo cero).
  • Mejorado comportamiento de inputs de moneda en "Subir Factura" para que el "0,00" se borre al hacer clic.

[1.0.3] - 21/05/2025

Changed

  • Refactorización Mayor de la Estructura del Proyecto:
  • Implementada estructura de paquete app/.
  • Rutas migradas a Blueprints (main, proveedor, factura, pago, categoria, etiqueta).
  • Configuración centralizada en config.py.
  • Archivo de ejecución run.py en la raíz.
  • Actualizadas todas las llamadas url_for en plantillas para sintaxis de Blueprint.
  • Módulo de Proveedores refactorizado para usar Flask-WTF (ProveedorForm).

Fixed

  • Corregidos errores de importación de db y modelos post-refactorización.
  • Solucionados TemplateSyntaxError y TemplateNotFound.

[1.0.2] - 20/05/2025

Added

  • Nuevo Módulo: Categorías (Modelo, CRUD, plantilla, integración con Facturas).
  • Nuevo Módulo: Etiquetas (Modelo, tabla M2M, CRUD, plantilla, integración Select2 en Facturas).

Changed

  • Logo de la aplicación actualizado a "Finix" y nombre de la empresa en footer.

[1.0.1] - 20/05/2025

Added

  • Módulo de Proveedores (Mejorado): Nuevos campos en modelo (nombre_fantasia, razon_social, documento_tipo, documento_numero, etc.), CRUD completo (Agregar, Listar, Editar, Eliminar).

[1.0.0] - 20/05/2025

Added

  • Funcionalidad Central Inicial (FASE 1 del Roadmap):
  • Módulo de Proveedores (MVP: Nombre, CUIT).
  • Módulo de Facturas (Carga/Edición detallada, Listado con filtros/ordenamiento, Adjuntos).
  • Módulo de Pagos (Registro y actualización de estado de factura).
  • Módulo de Informes (Básico: Resúmenes y pendientes).
  • UI/UX Inicial: Sidebar colapsable, layout 2 columnas para carga facturas, previsualización de adjuntos.
  • Tecnologías Base: Flask, SQLAlchemy, SQLite, Bootstrap 4, Font Awesome 5.