Changelog

[Unreleased]

Integraciones Externas

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

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.4.1] - (31/07/2025)

Added

  • Se añadieron filtros por "Categoría" y "Etiqueta" en la página de listado de "Mis Comprobantes" para permitir una búsqueda más granular.
  • Se implementó la persistencia de los filtros en el listado de "Mis Comprobantes". Al procesar un comprobante y volver, se conservan los filtros y la paginación aplicados anteriormente.

Changed

  • Refactorización Mayor: Se ha unificado el concepto de "Facturas de Compra" dentro de "Mis Comprobantes" para eliminar la duplicación de datos y centralizar la gestión.
  • El módulo de "Pagos" ahora se asocia directamente a los "Comprobantes" procesados, simplificando el flujo de pago.
  • El panel de "Informes" ha sido completamente refactorizado para calcular todas las métricas (gasto pendiente, gasto proyectado, etc.) a partir de los datos y estados de "Mis Comprobantes".
  • La página de "Detalle de Impuestos" ahora agrega la información fiscal directamente desde el desglose detallado de IVA y otros tributos de los comprobantes.
  • La barra de filtros en el listado de "Mis Comprobantes" fue rediseñada para ser más compacta y ocupar una sola fila, mejorando la visibilidad de la tabla.
  • El filtro de "Estado" en "Mis Comprobantes" fue actualizado para incluir los nuevos estados de pago (Pagado, Pagado Parcial).

Removed

  • Se eliminó por completo el módulo CRUD de "Facturas de Compra" (/facturas), incluyendo su enlace en el menú lateral, rutas, plantillas y lógica asociada. Toda la funcionalidad ahora reside en el módulo "Mis Comprobantes".

[1.4.1] - (02/08/2025)

Added

  • Nuevo Módulo de Conciliación Bancaria: Se ha añadido una sección completa para la importación y conciliación de movimientos bancarios.
  • Importación de Extractos:
    • Se implementó un modal de importación por pasos que permite subir archivos CSV.
    • Componente de subida de archivos con funcionalidad de "arrastrar y soltar" (drag and drop).
    • Creado un sistema de "parsers" modular para soportar diferentes formatos de bancos (inicialmente Banco Galicia y Banco Siro).
    • Lógica de prevención de duplicados para evitar re-importar los mismos movimientos.
  • Listado y Gestión de Movimientos:
    • Nueva página centralizada con una interfaz de pestañas para "Movimientos Pendientes" y "Gastos Registrados".
    • Funcionalidad de búsqueda y paginación en ambas pestañas.
  • Asignación de Pagos (Débitos):
    • Modal interactivo para asignar movimientos de débito.
    • Asignación a Comprobantes: Búsqueda AJAX con autocompletado para encontrar facturas de compra (ComprobanteArca) con saldo pendiente, con sugerencias por monto.
    • Registro de Gasto Manual: Flujo para asignar un pago a un gasto sin comprobante (impuestos, comisiones, etc.).
  • Configuración de Gastos:
    • Nueva sección de administración para que los usuarios puedan crear y gestionar sus propias Categorías de Gasto e Items de Gasto.
  • Nuevos Modelos de Base de Datos: Banco, LoteImportacion, MovimientoConciliacion, CategoriaGasto, ItemGasto, GastoManual.
  • Nuevas Rutas API: Se añadieron endpoints para buscar comprobantes y obtener items de gasto dinámicamente.

Changed

  • Refactorización Mayor de Modelos: El archivo monolítico app/models.py ha sido reestructurado en un paquete app/models/ con archivos separados por dominio (account_models, arca_models, reconciliation_models, etc.) para mejorar la mantenibilidad y escalabilidad del código.
  • Menú de Navegación:
    • Se ha añadido un enlace principal "Conciliación" al menú lateral.
    • Se ha añadido "Configuración de Gastos" al submenú de "Administración".
  • Asignación de Comprobantes: Al asignar un pago, el estado del ComprobanteArca ahora se actualiza automáticamente a PAGO_PARCIAL o PAGADO.
  • Flujo de Importación: La funcionalidad de importación se ha movido de una página dedicada a un modal dentro de la página principal del listado para una experiencia de usuario más fluida.

Fixed

  • Manejo de Errores de Importación: Los parsers de extractos bancarios ahora manejan correctamente los errores de formato en los importes (ej. comas vs. puntos decimales), evitando que la importación falle y registrando los errores en la consola.
  • Importaciones Circulares: Se ha resuelto un problema de importación circular que surgía tras la refactorización del paquete de modelos.
  • Errores de Paginación en Jinja2: Se ha corregido la lógica de generación de URLs de paginación para que funcione correctamente con filtros activos.
  • Lógica de current_user en Formularios: Se ha corregido el QuerySelectField de bancos para que obtenga la cuenta del usuario (g.account) de forma correcta, tanto para dueños de cuenta como para operadores.
  • Envío de Formularios AJAX: Se ha solucionado un error por el cual el assign_type no se enviaba correctamente desde el modal de asignación.

Removed

  • Ruta y Plantilla de Importación Dedicada: Se eliminó la página /conciliacion/importar y su plantilla importar.html, ya que su funcionalidad fue absorbida por un modal.
  • Ruta y Plantilla de Gastos Registrados: Se eliminó la página /conciliacion/gastos-registrados y su plantilla, ya que su contenido ahora se muestra en una pestaña de la página principal de movimientos.

[1.4.0] - (31/07/2025)

Added

  • Se implementó un nuevo diseño visual para la plantilla de facturas en PDF, alineado con un formato más moderno y profesional.
  • Se añadió un sistema de consulta dinámica y cacheo de la lista de monedas válidas de AFIP para el formulario de nuevas ventas.
  • En las facturas de moneda extranjera, se incluye ahora un recuadro informativo que detalla el tipo de cambio y el importe total convertido a Pesos Argentinos (ARS).

Changed

  • Se refactorizó por completo el formulario de "Nueva Venta" para que el selector de moneda se popule dinámicamente con los datos de AFIP.
  • Se mejoró la macro de formato de moneda en el PDF para manejar múltiples símbolos ($, U$S, €, etc.) y separadores de miles de forma consistente.
  • El texto del encabezado de la tabla de ítems en el PDF fue abreviado y su tamaño de fuente reducido para mejorar la legibilidad y asegurar que quepa en una sola línea.

Fixed

  • Se corrigió un error crítico por el cual la solicitud a AFIP para facturas en moneda extranjera fallaba debido a un código de moneda incorrecto (se envía 'DOL' en lugar de 'USD').

[1.3.9] - (29/07/2025)

Added

  • Nueva sección "Configuración Fiscal" en "Mi Cuenta" para que los usuarios gestionen sus datos de facturación (CUIT, Razón Social, etc.).
  • Funcionalidad para subir un logo de empresa, que se muestra en las facturas PDF generadas.
  • El PDF de la factura ahora genera un código QR oficial de AFIP en lugar del antiguo código de barras.
  • En el formulario de "Nueva Venta", se añadieron opciones para facturar en moneda extranjera, especificar el tipo de cambio y seleccionar múltiples condiciones de venta.

Changed

  • El CUIT del emisor para la facturación electrónica ahora se obtiene de la "Configuración Fiscal" de la cuenta en la base de datos, en lugar de un valor fijo en el archivo de configuración.
  • La página "Mi Plan y Suscripción" se reestructuró con un sistema de pestañas para incluir la nueva sección de "Configuración Fiscal".
  • El diseño de la plantilla del PDF de la factura ha sido completamente refactorizado para replicar fielmente el formato estándar de AFIP/ARCA.
  • Se ha permitido el acceso de los usuarios "Operadores" a las secciones "Mi Plan" y "Configuración Fiscal", manteniendo las acciones críticas (cambiar de plan, pagar) restringidas al dueño de la cuenta.
  • La lógica para facturas tipo "B" ha sido implementada: el frontend ajusta dinámicamente las etiquetas (ej. "Precio Unitario" a "Precio Final") y el backend realiza el cálculo inverso del IVA.
  • El modelo VentaDetalle fue refactorizado para almacenar el código de la alícuota de IVA de AFIP en lugar del porcentaje, mejorando la integridad de los datos.

[1.3.8] - (24/07/2025)

Added

  • Nuevo módulo de creación de ventas multipaso (/comprobantes-arca/ventas/nueva).
  • Modelo Cliente para gestionar una agenda de clientes de la cuenta, con CRUD a través de un modal.
  • Modelo VentaDetalle para almacenar los ítems detallados de cada venta.
  • Búsqueda de clientes con Select2.
  • Consulta de datos de contribuyentes por CUIT/CUIL/DNI utilizando el web service oficial de AFIP ws_sr_constancia_inscripcion.
  • Lógica de frontend en _venta_form.js para manejar los pasos, cálculos de totales en tiempo real y adición dinámica de ítems.
  • Campos de fecha de servicio y vencimiento de pago que se muestran condicionalmente según el "Concepto" de la factura.
  • Formulario de cliente rediseñado para un mejor flujo de autocompletado con datos de AFIP.

Changed

  • El AfipService fue refactorizado para manejar la autenticación y el cacheo de Tickets de Acceso para múltiples web services (Facturación y Padrón).
  • El servicio de consulta de CUIT ahora construye y prueba múltiples CUILs a partir de un DNI para encontrar al contribuyente.
  • El modelo ArcaVenta ahora se relaciona con Cliente y VentaDetalle.
  • Se refactorizó ArcaVentaForm para soportar la estructura multipaso, FieldList de ítems y campos de fecha de servicio.
  • El servicio AfipService ahora recalcula todos los totales (Neto, IVA, Total) en el backend a partir de la lista de ítems para garantizar la consistencia de los datos enviados a la AFIP.
  • Se actualizaron las plantillas y el JavaScript para ser compatibles con la versión de Bootstrap 4 utilizada en el proyecto.
  • Se actualizó config.py y afip_service.py para apuntar al web service ws_sr_constancia_inscripcion.

Fixed

  • Corregido el cálculo incorrecto de IVA y cantidad en el frontend, mejorando la función de parseo de números y usando un mapa de alícuotas de IVA provisto por el backend.
  • Solucionado el fallo de validación del FieldList en el backend por nombres de campo generados incorrectamente en el JS.
  • Corregidos múltiples errores de la API de AFIP, incluyendo la falta de campos obligatorios (CondicionIVAReceptorId, fechas de servicio) y la inconsistencia entre los totales y el desglose de ítems.
  • Resueltos todos los problemas de migración de base de datos con Alembic/SQLite, nombrando explícitamente las ForeignKey y manejando correctamente las migraciones parciales fallidas.
  • Corregido el error de autenticación Computador no autorizado al habilitar el web service correcto en el portal de AFIP.
  • Corregido el parseo de la respuesta del Padrón de AFIP en afip_service.py para manejar la estructura de objetos de zeep y la ausencia de campos opcionales.
  • Solucionado el bug donde, al buscar por DNI, se guardaba el DNI de 8 dígitos en lugar del CUIL de 11 dígitos encontrado, causando un rechazo de AFIP al facturar.

[1.3.7] - (19/07/2025)

Added

  • Integración con Facturación Electrónica de AFIP (ARCA): Se ha incorporado al sistema un módulo completo para la gestión de ventas electrónicas.
  • Módulo de Ventas:
    • Creación de Facturas: Nuevo formulario para la emisión de facturas electrónicas (A, B, C) con validación y obtención de CAE en tiempo real directamente desde los servicios de AFIP.
    • Generación de PDF: Creación automática de la representación gráfica (PDF) de cada factura autorizada, cumpliendo con la normativa vigente de AFIP, incluyendo el logo fiscal y el código de barras Code 128.
    • Nuevo Listado de Ventas: Se implementó una nueva vista para gestionar todos los comprobantes de venta emitidos.

Changed

  • Interfaz de Listado de Ventas Unificada: Se rediseñó la interfaz del 'Listado de Ventas' para que sea idéntica en funcionalidad y apariencia al 'Listado de Compras'. Ahora incluye herramientas avanzadas como:
    • Búsqueda global.
    • Filtros por columna que se aplican automáticamente.
    • Ordenamiento por todas las columnas relevantes (Fecha, Tipo, Número, Cliente, Montos).
    • Paginación y selección de cantidad de resultados por página.

[1.3.6] - (18/07/2025)

Added

  • Filtros de Búsqueda por Columna: Se ha añadido una nueva fila de filtros en la cabecera de la tabla de Comprobantes ARCA, permitiendo la búsqueda específica por Fecha, Tipo, Número, Doc. Emisor, Proveedor y Estado.
  • Selector de "Filas por Página": Se ha incorporado un nuevo dropdown en la barra de filtros para que el usuario pueda seleccionar cuántos resultados ver por página (15, 25, 50, 100).
  • Listado Comprobantes ARCA: Se añadieron campos de búsqueda individuales para las columnas "Tipo", "Estado" y "Total" en la cabecera de la tabla, permitiendo un filtrado más granular.
  • Listado Comprobantes ARCA: El campo de búsqueda global ahora también busca coincidencias en la columna "Doc. Emisor".

Fixed

  • Listado Comprobantes ARCA: El filtro de columna "Tipo" ahora busca por el texto descriptivo del comprobante (ej. "Factura A") en lugar de su código numérico, correspondiendo con lo que el usuario ve en la tabla.
  • Búsqueda Global Ampliada: La barra de búsqueda global ahora incluye correctamente la columna "Doc. Emisor" en sus resultados.
  • Lógica de Filtros de Fecha: Se ha corregido el comportamiento de los filtros de fecha. Ahora, al seleccionar un rango de fechas se limpia la selección de año/mes, y viceversa, asegurando que los filtros no entren en conflicto.

[1.3.5] - (18/07/2025)

Added

  • Exportación Avanzada a Excel (.xlsx): Se implementó una nueva funcionalidad en el listado de "Mis Comprobantes ARCA" para exportar los datos a un archivo Excel con formato específico para software contable. Este reporte incluye:
    • Dos hojas separadas: "Comprobantes" y "Proveedores".
    • Encabezados con formato (color de fondo y bordes).
    • Notas de validación en celdas clave del encabezado para guiar al usuario.
    • Formato de número personalizado para CUITs, importes monetarios y otros campos.
    • Ancho de columna autoajustado para una mejor legibilidad.
  • Sincronización Automática: El proceso de guardado de un "Comprobante ARCA" ahora crea o actualiza automáticamente el registro correspondiente en la nueva tabla de exportación, asegurando que los datos para exportar estén siempre actualizados.

Changed

  • Listado Comprobantes ARCA: Se mejoró la experiencia de usuario de los filtros. La búsqueda en campos de texto ahora se activa tras ingresar 3 caracteres y tiene un retardo mayor (750ms) para evitar recargas indeseadas.
  • Listado Comprobantes ARCA: Se ajustó la lógica de filtro por período para que, si se selecciona un mes sin un año específico, se utilice el año actual por defecto.
  • Listado Comprobantes ARCA: La paginación ahora muestra 25 filas por defecto, con opciones configurables por el usuario.
  • UI (Filtros y Tabla): Se ajustó el estilo del botón "Limpiar Filtros" para mejorar su visibilidad. Las etiquetas de la barra de filtros principal y el contenido de la tabla de comprobantes ahora se alinean a la izquierda por defecto para una mejor legibilidad, con la columna "Total" alineada a la derecha.

[1.3.4] - (17/07/2025)

Added

  • Se ha creado el nuevo modelo ExportacionComprobante para generar un reporte de comprobantes en formato CSV plano y desnormalizado.
  • Se ha implementado la función crear_o_actualizar_exportacion_desde_arca que automatiza la creación y actualización de registros en ExportacionComprobante cada vez que un ComprobanteArca se procesa.
  • Se ha añadido lógica de backfill en el script de migración para poblar la tabla ExportacionComprobante con todos los comprobantes históricos ya procesados.

Changed

  • Se ha refactorizado el modelo ComprobanteArcaTributoItem añadiendo una columna tipo_tributo_principal para categorizar los tributos (ej. "IIBB", "IVA", "Ganancias").
  • Se ha actualizado la lógica en la ruta de procesamiento de comprobantes (arca_compras_processing_routes.py) para que guarde correctamente el tipo principal del tributo, eliminando la dependencia de listas de subtipos.
  • La lógica de exportación en arca_helpers.py ahora utiliza el campo tipo_tributo_principal para un mapeo más robusto y mantenible de las percepciones.
  • Se ha mejorado el script de migración para incluir la migración de datos de los tributos existentes a la nueva estructura.

[1.3.3] - (07/07/2025)

Added

  • Se ha añadido la funcionalidad de editar los campos del encabezado de un comprobante ARCA directamente desde la pantalla de procesamiento.
  • Se ha creado un nuevo formulario (ArcaCompraEditForm) y una nueva ruta en el backend para gestionar la lógica de edición del encabezado del comprobante.
  • Informes: Se añadieron nuevas métricas en la página de informes para un mejor control financiero: "Gasto Pendiente (Facturas Impagas)", "Gasto Proyectado (Servicios Recurrentes)" y "Total Gasto Pendiente".
  • Se añadieron los campos moneda_cod y tipo_cambio al modelo Factura para permitir un manejo preciso de transacciones en diferentes monedas.

Changed

  • Informes: La lógica de cálculo de gastos ahora convierte correctamente los montos de facturas en USD a ARS usando el tipo de cambio almacenado.
  • Facturas: El listado de facturas ahora muestra el símbolo de moneda correcto (USD o $) según la moneda de la transacción.
  • En la pantalla de procesamiento de comprobantes ARCA, el botón "Editar" del encabezado ahora está separado del título colapsable para evitar clics conflictivos.
  • Se mejoró la capacidad de respuesta de la sección "Detalles del Comprobante" utilizando columnas de Bootstrap más flexibles y media queries en CSS para ajustar el tamaño de la fuente, evitando que el texto se corte en ventanas más pequeñas.
  • En el listado de comprobantes ARCA, el botón de acción ahora muestra "Ver / Editar" para los comprobantes ya procesados, mejorando la claridad de la interfaz.
  • La lógica de validación de los botones "Guardar Cambios" (encabezado) y "Guardar y Crear Factura" (principal) ahora está correctamente separada gracias al uso del atributo formaction, evitando que se disparen validaciones incorrectas.
  • Se corrigió la alineación vertical del botón para eliminar filas en los desgloses de IVA e impuestos para que coincida perfectamente con la altura de los campos de entrada.
  • Refactorizado el formulario de edición de "Detalles del Comprobante" en la pantalla de procesamiento de compras ARCA.
  • El campo "Importe Total" ahora es de solo lectura y se calcula dinámicamente en el frontend a partir de sus componentes.
  • La lógica de recálculo del importe total se ha centralizado en el modelo ComprobanteArca para garantizar la consistencia y precisión de los datos.
  • El campo "Otros Impuestos" ahora es editable en el formulario de procesamiento y se incluye en el cálculo del importe total.
  • El cálculo inicial de "Otros Impuestos" durante la importación de CSV se ha restaurado para funcionar como la diferencia entre el total y los demás componentes.
  • Se ha mejorado la responsividad del layout en la página de procesamiento de compras ARCA, apilando las columnas principales en pantallas de tablet y los campos de desglose en móviles.
  • Se ha cambiado el icono para eliminar filas de desglose por un icono de papelera y se han unificado los estilos con otros botones de la aplicación para mayor consistencia visual.

Fixed

  • Servicios Recurrentes: Se corrigió un error que causaba que el "Importe Estimado" se mostrara como cero. Ahora, al procesar un comprobante vinculado a un servicio recurrente, se actualiza correctamente el importe y la fecha del último pago del servicio.
  • Procesamiento ARCA: Se implementó la selección automática del servicio recurrente en la pantalla de procesamiento de comprobantes si el proveedor solo tiene un servicio registrado.
  • Se ha solucionado un error que asignaba la categoría por defecto del proveedor solo en la primera carga y no en posteriores.
  • Corregido un error que causaba que el campo "Tipo de Comprobante" perdiera su valor seleccionado al entrar en el modo de edición en la pantalla de procesamiento de compras ARCA.
  • Corregido un error que causaba que el campo "Moneda" se reseteara a "ARS" al editar un comprobante cuya moneda era "USD".
  • Solucionado un AttributeError en la vista de listado de compras ARCA que ocurría al intentar acceder a tipo_comprobante_choices.
  • Corregido un BuildError en la plantilla de detalle del proveedor que apuntaba a un endpoint de procesamiento ARCA incorrecto.
  • Solucionado un NoReferencedTableError en el modelo ComprobanteArcaImportError debido a una clave foránea mal definida que impedía generar nuevas migraciones de base de datos.

[1.3.3] - (08/07/2025)

Added

  • Se ha creado el "Centro de Feedback", una nueva sección donde los usuarios pueden reportar fallos, proponer modificaciones y sugerir nuevas funciones.
  • Las solicitudes de feedback permiten adjuntar un archivo (imagen o PDF) con previsualización.
  • Se ha añadido un sistema de estados (Pendiente, Aprobado, Completado, Rechazado) para cada solicitud.
  • El usuario administrador de Fintex (cuenta ID=1) ahora puede cambiar el estado de cualquier solicitud.
  • El usuario administrador de Fintex puede eliminar permanentemente cualquier solicitud de feedback.

[1.3.2] - (07/07/2025)

Fixed

  • Se ha restaurado la funcionalidad de creación de facturas a partir de comprobantes ARCA procesados. Los comprobantes con estado "Procesado" ahora generan correctamente su correspondiente entrada en el listado de facturas.
  • Se ha corregido un error que impedía ver los archivos adjuntos de facturas originadas en el módulo ARCA desde el listado de facturas.
  • Solucionado un error de ruteo (BuildError) en el listado de facturas que impedía el acceso al comprobante ARCA de origen.
  • Se ha resuelto una advertencia de SQLAlchemy (SAWarning) durante el procesamiento de comprobantes ARCA, asegurando que la vinculación entre el comprobante y la nueva factura se guarde correctamente en la base de datos.
  • Orden alfabético para jurisdicciones de IIBB.

[1.3.1] - (04/07/2025)

Added

  • Se ha añadido la capacidad de quitar un archivo seleccionado en los componentes de subida antes de guardar, incluyendo Procesamiento ARCA, Biblioteca y Carga Masiva ARCA.
  • Se ha incorporado el Favicon al proyecto para mejorar la identidad visual de la aplicación.

Changed

  • Refactorización Mayor: Se ha estandarizado el componente de subida de archivos en toda la aplicación para unificar la funcionalidad y la experiencia de usuario. Las páginas de Procesamiento de Comprobantes ARCA, Biblioteca de Logos y Carga Masiva de ARCA ahora utilizan el mismo componente robusto.
  • Se ha mejorado la interfaz de eliminación de adjuntos, reemplazando el botón de texto por un icono 'X' minimalista con tooltip.
  • El área de 'arrastrar y soltar' para adjuntos ahora se desactiva visual y lógicamente una vez que ya se ha cargado un archivo, previniendo subidas accidentales y mejorando la claridad de la interfaz.

Fixed

  • Se ha corregido una regresión crítica donde los componentes de subida de archivos en la Biblioteca y la Carga Masiva de ARCA dejaron de funcionar después de la actualización inicial del previsualizador.
  • Se ha solucionado un problema por el cual los archivos PDF no se previsualizaban en el componente de subida debido a las políticas de seguridad del navegador (Permissions-Policy).
  • Se ha corregido la posición del icono de eliminación ('X') para evitar que se superponga con la barra de scroll del navegador en las vistas previas de adjuntos.

[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.