Actúa como un desarrollador Full-Stack Senior y arquitecto de software experto en gestión de clínicas veterinarias. Desarrolla en un único archivo autocontenido (index.html) una aplicación web SPA completa, reactiva y persistente para el "Control de Entradas, Conciliación Mensual y Gestión de Tarifas de Proveedores". Utiliza Tailwind CSS vía CDN, FontAwesome 6 para iconografía y SheetJS (xlsx.full.min.js) para procesar hojas de cálculo. Todo debe funcionar en el navegador sin backend externo ni bases de datos de pago: la persistencia se gestiona en memoria local sincronizada (localStorage) con utilidades de exportación e importación en JSON para copias en Google Drive. La aplicación debe estructurarse en 4 pestañas de navegación principales más un indicador global en cabecera: - Cabecera fija: Título, distintivo de clínica, contador dinámico «Sin resolver: N» (alerta si hay datos ilegibles o productos sin clasificar) y botones de "Copia Drive (.json)" y "Restaurar". - Pestaña 1: Entradas (Albaranes y Facturas). - Pestaña 2: El mes (Conciliación y Auditoría). - Pestaña 3: Vocabulario y precios (Tarifas, Acuerdos y Proveedores). - Pestaña 4: Dashboard (Métricas ejecutivas de compra y fiabilidad). A continuación se detallan los requisitos funcionales organizados en 5 bloques: ================================================================================ 1. CAPTURA Y PROCESAMIENTO DE DOCUMENTOS (PESTAÑA 1) ================================================================================ a) Modos de Entrada: - Modo Archivo / Foto: Subida de fotos de albaranes (con notas manuscritas) y PDFs/fotos de facturas mediante llamada estructurada a Gemini Vision (devolviendo JSON estricto) o fallback reactivo editable. - Modo Texto estructurado: Textarea para pegar transcripciones manuales con delimitadores: ALBARAN | proveedor | número | fecha referencia | descripción | unidad | cantidad albarán | cantidad recibida | lote | caducidad | nota NOTA | texto general FACTURA | proveedor | número | fecha albarán | referencia | descripción | unidad | cantidad | precio | % dto | precio neto | % IVA | importe TOTAL | base | IVA | total b) Reglas de Lectura Humano-Contable: - Transcripción literal: Copiar lo impreso tal cual sin autocorrecciones. Si una línea está repetida, se registra dos veces. - Marcas a mano en líneas: Si hay una nota manuscrita («faltan 2», «solo 4»), registrarla en el campo 'nota' y ajustar 'cantidadRecibida'. Si no hay anotación, la recibida coincide con la del albarán. - Lotes y caducidades a mano: Tratar con la misma validez que los impresos. - Anotaciones fuera de línea: Registrar en 'notaGeneral' del albarán (p. ej. "Abono pendiente de 2 frascos rotos"). - Datos dudosos: Si un dato no se lee con nitidez, marcar obligatoriamente con "?" o "ILEGIBLE". No suponer cantidades ni inventar información. c) Comprobación Visual Previa (Nada se guarda sin revisión): - Al procesar cualquier documento, se despliega una tabla editable de revisión donde el usuario puede corregir cada celda. - Solo se consolida en la base de datos al pulsar el botón verde «Está bien, guardar». - Detección de duplicados en tiempo real: Se evalúa la terna (Proveedor + Número de Documento + Fecha). Si ya existe, se muestra un banner de advertencia y, al intentar guardar, se abre una ventana modal que frena la duplicidad y solicita confirmar si se desea sobrescribir el registro previo. d) Organizador y Buscador de Documentos Guardados: - Tabla histórica con buscador en tiempo real por texto (número, referencia o nota), filtro por tipo (Albarán / Factura) y filtro por proveedor. - Cada documento guardado permite reabrirse para edición completa o eliminarse con confirmación. ================================================================================ 2. VOCABULARIO, TARIFAS Y CONDICIONES COMERCIALES (PESTAÑA 3) ================================================================================ a) Gestión y Unificación Canónica de Proveedores: - Los proveedores se unifican bajo nombres canónicos normalizados para evitar duplicados causados por variantes ortográficas. - Tabla con listado de proveedores, estado (Activo / En suspensión), número de tarifas cargadas, albaranes vinculados y estado del acuerdo. - Botón modal "Unificar Proveedores Duplicados": permite fusionar un proveedor origen en un proveedor destino en cascada (actualizando albaranes, facturas, tarifas y acuerdos en un clic). - Acciones individuales por proveedor: Suspender/Reactivar, Eliminar por completo y Carga directa de tarifa. b) Acuerdos Comerciales: - Carga mediante PDF/imagen (analizado con IA para extraer proveedor, portes gratis desde € base, descuentos por familia y precios especiales fijos) o mediante formulario manual. - Modal de revisión del acuerdo antes de guardar. - Posibilidad de pausar/suspender acuerdos: si un acuerdo está en suspensión, la auditoría aplica la tarifa general íntegra sin descuentos. c) Tarifas Generales Anuales (Excel y CSV): - Motor de ingesta robusto para ficheros .xlsx, .xls y .csv (detectando delimitadores ';', ',', '\t' y comas decimales europeas). - Ventana modal de mapeo de columnas (Referencia, Descripción, Familia, Unidad, Precio Unitario, Precio Caja) con previsualización de filas de muestra. - Selector de asignación a proveedor existente o nuevo. - Opción para reemplazar referencias previas o acumular. - Catálogo de tarifas con buscador en tiempo real por texto (filtra por referencia, producto o familia) y selector de proveedor. - Herramienta de reasignación masiva de tarifas completas a otro proveedor. d) Diccionario de Equivalencias y Detección de Nombres Nuevos: - Si al guardar un albarán aparece una descripción desconocida, la aplicación despliega un diálogo: "¿Es el mismo producto?", permitiendo vincularlo a una referencia oficial del proveedor con buscador predictivo o descartarlo como producto nuevo. - Cuenta con botón de cierre ("Decidir más tarde") sin forzar la decisión. - Las equivalencias confirmadas se memorizan en un diccionario para no volver a preguntar en entregas futuras. ================================================================================ 3. CONCILIACIÓN MENSUAL Y AUDITORÍA CONTABLE (PESTAÑA 2) ================================================================================ a) Filtros y Reglas de Precio: - Filtro de proveedor y selector de factura dependiente (al elegir proveedor, el desplegable de facturas muestra únicamente las de ese distribuidor). - El precio pactado se determina según la regla estricta: 1. Precio especial pactado para esa referencia (si existe en acuerdo activo). 2. En su defecto: Precio de tarifa general base menos el descuento de su familia pactado en el acuerdo. 3. Si el acuerdo está suspendido: Tarifa general base íntegra (0% dto). - Todas las comparaciones se realizan sobre la Base Imponible en formato español (€ con dos decimales y coma), nunca con IVA. - Cruce inteligente de números de albarán: se comparan normalizando caracteres y extrayendo dígitos significativos. b) Tres Bloques de Conciliación Estrictos: 1. NO HE PODIDO COMPROBARLO: - Siempre visible en la parte superior. Lista cualquier línea o dato marcado con "?" o "ILEGIBLE", indicando documento, número y motivo. Si está vacío, muestra explícitamente el mensaje de conformidad. Cada incidencia incluye botón para "Resolver". 2. NO CUADRA: - Desglosa discrepancias con detalle de: línea, albarán de origen, facturado, pactado/recibido, detalle y diferencia económica neta en base imponible. - Supuestos auditados: * Precio neto facturado distinto al pactado (si es menor: advertencia "Revisa la tarifa, puede estar vieja"). * Cantidad facturada diferente a la recibida. * Mercancía en albarán físico no incluida en la factura del mes. * Líneas facturadas sin albarán físico registrado. * Portes cobrados cuando el total del pedido supera el umbral pactado de portes gratis. * Notas marginales pendientes de abono no deducidas en factura. - Acciones en cada discrepancia: * Botón "Es firma / ignorar nota": descarta apuntes marginales que correspondían a firmas de recepción o sellos (p. ej. "D. Alarcón"), sin valor contable. * Botón "Editar origen": reabre directamente el albarán o factura en el revisor de Entradas. * Botón "Aceptar diferencia" con tooltip interactivo explicativo: si no hay descuadre de precio, archiva la diferencia. Si hay diferencia de precio, despliega el Asistente Inteligente de Actualización de Tarifas. 3. CUADRA: - Relación de líneas conformes al 100% en unidades y precio neto pactado. c) Asistente Inteligente de Actualización de Tarifas y Acuerdos: - Al aceptar una discrepancia de precio, se abre un modal con cálculos matemáticos automáticos para elegir cómo asimilar el cambio: 1. Excepción puntual: Archivar solo en este documento sin alterar tarifas ni acuerdos. 2. Precio especial: Guardar el precio neto facturado en el acuerdo comercial para esa referencia. 3. Modificar precio base de catálogo: Calcular y sugerir el nuevo precio base de catálogo manteniendo el % de descuento de la familia: Precio_Base = Precio_Neto / (1 - (Dto / 100)) 4. Modificar descuento de familia: Mantener el precio de catálogo y calcular el nuevo % de descuento implícito de la familia: Nuevo_Dto_% = [1 - (Precio_Neto / Precio_Base)] * 100 5. Alta en tarifa: Registrar el producto si no existía previamente. d) Generador de Correo de Reclamación Pormenorizado por Albarán: - Formato exacto de 3 bloques sin fórmulas de cortesía redundantes: Línea 1: Revisión de la factura frente a los albaranes de entrega físicos y acuerdo. Línea 2: Importe total de la diferencia neta (€ Base) y desglose agrupado por albarán físico (concepto, facturado vs recibido/pactado, diferencia individual y motivo). Línea 3: Pregunta ejecutiva de cierre: "¿Nos emitís la factura rectificativa con estas correcciones o aplicáis la nota de abono en la siguiente remesa?". - Botón directo para copiar al portapapeles. ================================================================================ 4. PANEL DE CONTROL Y DASHBOARD DE COMPRAS (PESTAÑA 4) ================================================================================ - Selector de filtrado por proveedor (utilizando la lista canónica deduplicada) o vista global. - 4 Tarjetas de Métricas KPI: 1. Gasto Facturado (€ Base) con recuento de facturas auditadas. 2. Discrepancias Totales Acumuladas (€) con recuento de líneas no conformes. 3. Tasa de Conformidad Directa (% de líneas que cuadran a la primera). 4. Incidencias Activas (suma de notas pendientes y lecturas ilegibles sin resolver). - Tabla de Fiabilidad y Volumen por Distribuidor: * Columnas: Proveedor, Albaranes, Facturas, Gasto Facturado (€), Abonos/Notas Pendientes, Diferencia Neta Acumulada (€ con código de color: rojo si se cobró de más, verde si favoreció a la clínica) y Estado del Acuerdo. * Reconciliación estricta para que ningún distribuidor aparezca repetido. ================================================================================ 5. ARQUITECTURA TÉCNICA, SEGURIDAD Y PERSISTENCIA ================================================================================ - La aplicación se guarda de forma permanente en localStorage bajo una clave estructurada ('vet_clinic_database_state_v1'). - Toda mutación de estado invoca window.saveClinicState() y actualiza reactivamente la interfaz (window.updateUIFromState()). - Manejo defensivo del DOM: todas las funciones de renderizado verifican la existencia previa de elementos contenedores para prevenir excepciones de tipo TypeError (classList / null). - Ningún modal ni acción destructiva usa prompt() o confirm() nativos del navegador (bloqueados en iframes), implementando ventanas modales Tailwind integradas.