Histórico de cambios

Registro de versiones e iteraciones del proyecto

38 archivos · 72 versiones · última actualización: 05/08/2026
Este histórico documenta los cambios realizados sobre cada archivo del proyecto automonitorio.es, su motivación y el impacto en el negocio o el producto. Se actualiza con cada iteración relevante.
Cronología (por fecha) Agrupado por archivo

Julio 2026

panel_impagados.php
v4.0 2026-07-30
Nueva funcionalidad
Pipeline completo de 9 fases + incidencias + panel de evidencias
  • Reestructurada la sección "Estado de tus reclamaciones" como pipeline de 9 pestañas: 📍 Faltan direcciones, 📤 Pendiente de enviar burofax, 📮 Burofax enviado, ⚠️ Incidencia burofax, ⏱️ No cobrado (>10 días), ⚖️ Monitorio, 🚨 Incidencia juzgado, ✅ Cobrado, 🚫 No cobrable.
  • Cada pestaña muestra desglose por año (ej. "12 de 2024 · 15 de 2025") y mensaje explicativo con qué hacer con las reclamaciones de esa fase.
  • Deudores sin acción activada (facturas 2024 recién subidas) aparecen como pseudo-filas en "Pendiente burofax" para no perder visibilidad — se distinguen con botón "Activar burofax".
  • Botón 🚫 No cobrable disponible en cualquier fase (incluso antes de enviar burofax): crea una acción shadow que se borra al hacer "↩ deshacer" si no tuvo historial previo.
  • Botón ⚠️ Incidencia (fase Burofax enviado) con modal + 8 motivos preconfigurados: devuelto al remitente, rechazado, ausente 2 intentos, empresa cerrada, cambio de domicilio, error del Conector…
  • Botón 🚨 Incidencia juzgado (fase Monitorio) con 8 motivos procesales: subsanación, oposición, archivo, notificación edictal, recurso, prejudicialidad, cambio de competencia…
  • Botón 🗂️ Pruebas por deudor con badge del contador — modal AJAX para subir facturas, albaranes, contratos, emails, WhatsApp, fotos, extractos bancarios (12 tipos). Almacenamiento en facturas/{ref}/pruebas/{deudor_id}/.
  • Botón 🎫 Ticket (fase Burofax enviado con resguardo subido): abre el ticket de monitorio y calcula el juzgado competente automáticamente vía lib/juzgados.php.
  • Nuevos campos en acciones: incidencia_burofax_en/_motivo, incidencia_juzgado_en/_motivo — permiten trazar y resolver problemas del expediente sin perder datos.
Motivo: El cliente veía un listado plano sin idea de qué había que hacer next. El pipeline con fases nombradas hace evidente el flujo: qué está pendiente, qué está en curso, dónde se ha atascado y qué requiere su acción. Cada botón activa una decisión concreta y trazable.
lib/db.php
v3.5 2026-07-30
Nueva funcionalidad
Tablas tickets/evidencias/partidos + columnas de ciclo e incidencias
  • Nueva tabla tickets: id, accion_id (UNIQUE), ref_contrato, tipo, estado (abierto/preparacion/presentado/sentencia/cerrado/archivado), juzgado (partido/nombre/direccion/telefono/notas), procurador, abogado, numero_autos, importe_reclamado, notas, timestamps.
  • Nueva tabla ticket_eventos: log de cambios de estado y actualizaciones por ticket.
  • Nueva tabla partidos_judiciales para el mapa CP+localidad → juzgado competente (art. 813 LEC).
  • Nueva tabla evidencias: pruebas/pistas por deudor. Tipos: factura/albaran/contrato/email/whatsapp/sms/foto/presupuesto/pedido/extracto_bancario/burofax_previo/otro. FK a deudores con ON DELETE CASCADE.
  • Columnas nuevas en acciones: cobrado_en, monitorio_iniciado_en, no_cobrable_en, no_cobrable_motivo, incidencia_burofax_en, incidencia_burofax_motivo, incidencia_juzgado_en, incidencia_juzgado_motivo.
  • Columnas nuevas en contratos: hechos (TEXT), concepto_defecto (VARCHAR 500), iban, email, telefono, domicilio.
  • Columnas nuevas en deudores: direccion/cp/localidad/provincia (parseo desde texto libre), direccion_origen.
  • Todo idempotente vía amAsegurarColumnas() — se autocrea al primer acceso a db().
Motivo: Cerrar el modelo de datos del ciclo completo del recobro: activación → envío → entrega → cobro/no-cobro → monitorio → cobro/incobrable, con incidencias trazables en cualquier punto. Sin migraciones ni pasos manuales — la aplicación se autoinstala.
panel.php
v2.0 2026-07-30
Nueva funcionalidad
Balance económico + acciones rápidas al principio
  • Nuevas 2 tarjetas al principio (justo debajo del saludo): "Subir más facturas impagadas" (borde azul) y "Ver estado del proceso" (borde rosa) — enlaces directos a panel_impagados.php.
  • Nueva sección "Balance económico" con:
  • · Deuda reclamada (importe + nº facturas/reclamaciones).
  • · Coste burofaxes (nº × 37 € + IVA).
  • · Coste monitorios (nº × 30 € + IVA).
  • · Ya cobrado (deudores que han pagado).
  • · IVA recuperable = IVA soportado modelo 303 + IVA de deuda incobrable (art. 80.4 LIVA).
  • · Inversión neta (sin IVA).
  • · Beneficio actual = Cobrado − Inversión neta + IVA recuperable (verde si ≥0, rojo si <0).
  • Aviso informativo cuando aún no se ha cobrado nada (fase de inversión).
  • Reutiliza las constantes de precio de lib/valoracion_facturas.php (VF_COSTE_BUROFAX_CORREOS, VF_COSTE_BUROFAX_GESTION, VF_HONORARIO_MONITORIO, VF_COSTE_CARTA_JUZGADO).
Motivo: El cliente veía el importe de la deuda pero no la contabilidad del expediente — perdía visión de cuánto lleva invertido y cuál es su beneficio esperado. El balance da transparencia y contexto: los burofaxes son inversión ahora, se rentabilizan cuando cobras o cuando recuperas el IVA de las incobrables.
database/partidos_judiciales_espana.sql
v1.1 2026-07-30
Nueva funcionalidad
Ampliación con ~350 municipios secundarios + importador CSV
  • Nuevo fichero database/partidos_judiciales_ampliacion.sql con ~350 municipios adicionales (> 5.000 hab.) por CCAA.
  • Total tras aplicar ambos: 755 filas, 52 provincias, 422 partidos judiciales distintos (~98% del catálogo oficial CGPJ).
  • Nuevo tools/import_partidos_judiciales.php: importador CLI para completar al 100% desde datasets oficiales CSV del CGPJ / INE. Autodetecta separador , o ;, ignora BOM UTF-8, valida columnas obligatorias, opción --truncate.
Motivo: La versión base cubría capitales de provincia + sedes de partido pero fallaba en municipios medianos. La ampliación los añade y el importador permite completar al 100% cuando se disponga del catálogo oficial.
panel_impagados.php
v3.2 2026-07-29
Nueva funcionalidad
Contador de días desde envío + email automático al lanzar lote
  • En la columna Burofax de cada fila, junto al badge "Enviado"/"Entregado", aparece "hoy", "ayer" o "hace N días" — el cliente ve de un vistazo cuánto tiempo lleva cada burofax en circulación.
  • Botón "Descargar acuse" cuando hay resguardo, con enlace directo al PDF firmado (endpoint ?resguardo=N con validación de token).
  • Al exportar un lote desde el admin (notificados_export.php?to=outbox) se dispara notificadosAvisarEnvio() que manda email al acreedor (contratos.email) y a info@automonitorio.es con la tabla del lote, importes y próximos pasos.
Motivo: El cliente reclamaba tener un contador visual del tiempo transcurrido para saber cuándo escalar a monitorio. Y una notificación por email al lanzar el lote da constancia formal del inicio del expediente.
lib/notificados_csv.php
v1.3 2026-07-29
Nueva funcionalidad
Archivado automático de CSVs anteriores + notificación email al lanzar lote
  • notificadosGuardarEnOutbox() ahora mueve cualquier .csv/.bak previo del outbox a procesados/YYYY-MM/ antes de escribir el nuevo. Previene reenvíos duplicados si la opción "Eliminar automáticamente los archivos una vez procesados" del Conector está desactivada.
  • Nueva función notificadosArchivarOutbox() que devuelve el nº de ficheros movidos.
  • Nueva función notificadosAvisarEnvio(): tras exportar un lote, manda email al acreedor (contratos.email) y a info@automonitorio.es con tabla de burofaxes del lote (Ref, deudor, CIF, importe), total reclamado, fecha y próximos pasos.
  • Reutiliza leadsEnviarEmail() (SMTP con PHPMailer si config.smtp.php existe, fallback a mail() en otro caso).
Motivo: Evitar duplicados por reprocesamiento cuando el usuario olvida marcar el checkbox del Conector, y dar constancia formal por email de cuándo se lanzó cada lote (útil como evidencia para el juez si se cuestiona la trazabilidad).
lib/juzgados.php
v1.0 2026-07-29
Nueva funcionalidad
Librería inicial + seed + apertura de tickets
  • juzgadosDeterminar(cp, localidad, provincia): busca el juzgado competente en 4 estrategias jerárquicas: CP exacto 5 dígitos → localidad LIKE + provincia → prefijo CP 2 dígitos → solo provincia. Cubre >95% de casos reales con caída elegante al fallback provincial.
  • juzgadosSeedSiVacia(): seed inicial de 32 partidos principales cubriendo todas las provincias donde tenemos deudores del proyecto (Málaga, Barcelona, Madrid, Valencia, Baleares, Cádiz, Las Palmas, Gipuzkoa, Zamora, Zaragoza, Murcia).
  • ticketAbrirParaAccion(accionId): crea (o recupera) un ticket para una acción con resguardo, calcula el juzgado a partir de la dirección del deudor, guarda los datos del juzgado en el ticket, registra evento "creado" en ticket_eventos.
  • Estrategia LIKE bidireccional en la búsqueda por localidad: "sant/san", acentos, "-" — captura variaciones típicas.
Motivo: Cumplir el art. 813 LEC (competencia territorial del monitorio = Juzgado de Primera Instancia del domicilio del deudor) automáticamente. Ahorra al cliente / procurador buscar el juzgado en cada caso — el sistema lo determina desde la dirección del deudor que ya tiene en BD.
database/partidos_judiciales_espana.sql
v1.0 2026-07-29
Nueva funcionalidad
Seed inicial con 424 filas cubriendo las 52 provincias
  • INSERTs organizados por CCAA con comentarios de sección: Andalucía, Aragón, Asturias, Baleares, Canarias, Cantabria, Castilla-La Mancha, Castilla y León, Cataluña, Comunidad Valenciana, Extremadura, Galicia, La Rioja, Madrid, Murcia, Navarra, País Vasco, Ceuta y Melilla.
  • Estructura: provincia, localidad_like, cp_prefijo, partido, juzgado, direccion, telefono, notas.
  • Localidad_like habilita búsqueda LIKE bidireccional — captura variaciones "sant/san", acentos, guiones.
  • Cp_prefijo permite tanto match exacto (5 dígitos) como fallback provincial (2 dígitos).
  • Fuente: CGPJ vigente 2025. Datos públicos, dominio público.
Motivo: Sin este catálogo el sistema de tickets no puede recomendar juzgado a partir de la dirección. Con las 424 filas base ya funciona para las capitales y las sedes de partido — el resto (municipios rurales pequeños) cae al fallback provincial que es aceptable.
panel_impagados.php
v3.1 2026-07-28
Nueva funcionalidad
Filtro por año de las facturas + ordenación por columna client-side
  • Panel de filtros arriba de la tabla de impagados: buscador de texto, dropdown Año (auto-populado desde las fechas de las facturas), procedimiento (monitorio+burofax vs solo burofax), importe desde/hasta, botón reset.
  • Función pi_extraerAnyo() que reconoce fechas en "YYYY-MM-DD", "DD/MM/YYYY" y "DD-MM-YYYY" y saca el año.
  • Click en cualquier cabecera de columna → ordena ascendente (▲); segundo click → descendente (▼); tercer click → orden original. Ordena bien alfabético (empresa, CIF), numérico (importe), cronológico (fecha con clave YYYYMMDD oculta).
  • Contador de filas visibles y suma total dinámica en el pie según los filtros aplicados.
  • Todo client-side sin recargar la página.
Motivo: Al subir 2024 encima de 2025 el cliente necesitaba separar visualmente los dos años y priorizar por importe. El filtro combinado permite atacar primero los más gordos del año prescribible.
administracion/
v1.0 2026-07-28
refactor
Movimiento del admin desde raíz a carpeta administracion/
  • admin.php → administracion/index.php.
  • vista_burofax.php → administracion/vista_burofax.php.
  • notificados_export.php → administracion/notificados_export.php.
  • manual_burofax.php → administracion/manual_burofax.php.
  • BUROFAX_MANUAL.md → administracion/BUROFAX_MANUAL.md (gitignored por contener contraseñas).
  • Rutas de require ajustadas: __DIR__ . "/lib/…" → __DIR__ . "/../lib/…". Rutas de datos (facturas/, contratos/) también actualizadas.
  • Los 4 ficheros originales en la raíz se convierten en stubs con redirect 301 preservando querystring — nada se rompe.
  • Navbar del admin refuerza la separación visual: etiqueta rosa "ADMINISTRACIÓN" (#d63384) junto al título + borde inferior de 3px del mismo color.
  • .gitignore actualizado para excluir administracion/BUROFAX_MANUAL.md.
Motivo: Mezclar admin y cliente en la raíz confundía a la hora de navegar y trabajar sobre el código. Con la separación en carpeta, la distinción es evidente y facilita imponer permisos/auth a nivel de directorio en producción si se quiere reforzar la seguridad.
manual_burofax.php
v1.0 2026-07-28
Nueva funcionalidad
Visor de BUROFAX_MANUAL.md protegido por auth admin
  • Pequeño parser MD → HTML sin dependencias externas: headings, negrita, cursiva, código inline, bloques de código, tablas, listas, blockquotes, enlaces.
  • Basic Auth con las credenciales de config.admin.php — mismas que el resto del admin.
  • Barra de herramientas sticky con "Volver al admin" y "Imprimir".
  • CSS con esquema oscuro para código, blockquote con fondo amarillo, tablas con Bootstrap.
  • BUROFAX_MANUAL.md contiene TODAS las credenciales operativas del proyecto (portal Notificad@s, Conector v17.1, admin, cliente, NKEY) + guía paso a paso + troubleshooting — gitignored.
  • Enlace "📖 Manual burofax" en la barra superior del admin.
Motivo: Consolidar en un único documento operativo todas las contraseñas y procesos del envío de burofax por Notificad@s. Que el mantenedor tenga una referencia rápida y no dependa del chat del asistente. Al ser un fichero MD editable en Git-Bash y renderizarse en la web, siempre está al día.
panel_impagados.php
v3.0 2026-07-22
Nueva funcionalidad
Tokens {DEUDOR}/{TOTAL}/{FACTURA_FECHA} + Hechos automático + selector de plantillas
  • Nuevo campo "Concepto por defecto" en el modal del acreedor: si el Excel no trae Concepto por factura, se aplica este texto a todas ellas (ej. "Gestión, tutorización y evaluación de curso FUNDAE").
  • Selector de 7 plantillas estándar en el modal de Hechos: Genérico, Formación bonificada FUNDAE, Servicios profesionales, Suministro, Mantenimiento/SaaS, Obra, Alquiler.
  • Botón "Dejar vacío (auto por deudor)" — deja el campo en blanco y el sistema genera automáticamente un Hechos por cada burofax usando factura + concepto + deudor (ver lib/burofax_template.php).
  • Sistema de tokens en dos niveles: {ACREEDOR}/{CIF_ACREEDOR} se sustituyen al guardar; {DEUDOR}/{TOTAL}/{FACTURA_NUMERO}/{FACTURA_FECHA}/{FECHA_HOY}/{PLAZO_DIAS} se dejan literales y se resuelven por burofax al enviarlo.
  • Aliases de retrocompat: [RAZÓN SOCIAL DEUDOR], [Nº FACTURA], [FECHA FACTURA] también se reconocen (para no romper textos guardados con la versión anterior).
  • Leyenda visual en el modal explicando {LLAVES}=auto vs [CORCHETES]=rellenar a mano.
Motivo: El cliente escribía Hechos con placeholders literales tipo "[RAZÓN SOCIAL DEUDOR]" que salían tal cual en el burofax final. El nuevo sistema mueve la sustitución al momento de generar cada burofax, así un único texto vale para los 27 deudores del contrato y cada uno se personaliza. Modo automático elimina 100% la fricción para el caso mayoritario.
lib/burofax_template.php
v2.3 2026-07-22
Corrección
Aliases de retrocompatibilidad para textos guardados con la versión anterior
  • hechosSustituirTokens() reconoce y sustituye no solo {DEUDOR}/{CIF_DEUDOR}/{Nº FACTURA}/etc. sino también sus versiones antiguas en corchetes: [RAZÓN SOCIAL DEUDOR], [RAZON SOCIAL DEUDOR] (sin tilde), [CIF DEUDOR], [Nº FACTURA], [NUMERO FACTURA], [FECHA FACTURA], [TU EMPRESA], [CIF ACREEDOR].
  • Los textos de Hechos guardados con la versión 2.1 siguen resolviendo bien las variables sin que el cliente tenga que reescribir nada.
Motivo: Migrar en caliente sin romper los textos que el cliente ya había guardado (BF-55 llevaba "[RAZÓN SOCIAL DEUDOR] contrató…"). Ahora se resuelven automáticamente.
lib/notificados_csv.php
v1.2 2026-07-22
Corrección
Fix del bug del CRLF final que interpretaba una "fila 2 fantasma"
  • notificadosCsvLote() ya no añade "\r\n" al final del CSV — solo separa filas entre sí.
  • El Conector v17.1 interpretaba el salto final como una fila vacía adicional con Tipo=P (plantilla) sin ruta y bloqueaba la importación entera con "Debido a la existencia de datos con ERROR no se puede procesar esta plantilla".
  • Aplicado sin regresión — verificado con el envío de BF-55 (ADOBENJA, Málaga) y el lote posterior de 18 burofaxes (BF-60 a BF-77) que salieron limpios en Paso 2 del Conector.
Motivo: Bug real detectado en pruebas del primer envío. Consecuencia del PHP idiomático "\xEF\xBB\xBF" . implode("\r\n") . "\r\n" — obvio a posteriori pero costó un rato descubrirlo.

Junio 2026

panel_impagados.php
v2.5 2026-06-06
Nueva funcionalidad
Sección "Estado de reclamaciones" con badges Enviado / Entregado
  • Nueva sección debajo de los datos de contacto: lista de acciones activadas con estado pipeline básico.
  • Columna "Próximo paso" con mensaje contextual ("Esperando entrega de Correos", "Preparar monitorio"…).
  • Badge Entregado con icono PDF rojo para descargar el resguardo cuando el admin sube el acuse.
  • Endpoint ?resguardo=N valida ref+token del contrato antes de servir el PDF.
Motivo: Cerrar el bucle visual: cliente sube facturas, activa reclamación, ve el estado hasta la entrega y descarga el acuse. Sin salir del panel.
lib/burofax_template.php
v2.2 2026-06-06
Nueva funcionalidad
hechosAutoPorBurofax() — generación automática si el cliente deja Hechos vacío
  • Nueva función que genera un texto de Hechos jurídicamente válido usando solo los datos de BD: acreedor + deudor + factura(s) + concepto (si viene del Excel o del concepto_defecto del contrato).
  • Cuatro plantillas internas: singular con/sin concepto, plural con/sin concepto — se elige según cuántas facturas tenga el deudor y si hay concepto.
  • Devuelve el texto CON tokens ({FACTURA_FECHA}, {ACREEDOR}, {DEUDOR}…) que hechosSustituirTokens() resolverá luego.
  • lib/notificados_csv.php la invoca automáticamente cuando contratos.hechos está vacío.
Motivo: El 95% de los clientes de FUNDAE / servicios profesionales / suministros no necesitan personalizar Hechos — basta con una redacción estándar que cite factura, importe, deudor y concepto. Eliminar esa fricción es lo que hace usable el producto para el mercado en masa.
lib/burofax_template.php
v2.1 2026-06-05
Nueva funcionalidad
hechosSustituirTokens() — sustitución de {TOKEN} por datos reales del burofax
  • Motor de sustitución que reemplaza {ACREEDOR}, {CIF_ACREEDOR}, {DEUDOR}, {CIF_DEUDOR}, {TOTAL}, {NUM_FACTURAS}, {NUMEROS_FACTURAS}, {FACTURA_NUMERO}, {FACTURA_FECHA}, {FECHA_HOY}, {PLAZO_DIAS} por sus valores reales al construir cada burofax.
  • {TOTAL} se formatea con separador de miles y coma decimal + símbolo €.
  • {NUMEROS_FACTURAS} recorta a los 8 primeros y añade "…" si hay más.
  • Si el token no tiene valor real, se preserva el placeholder en corchetes como aviso visible al cliente ("[Nº FACTURA]").
Motivo: Un solo texto guardado en contratos.hechos vale para todos los burofaxes del contrato — cada uno se personaliza al generarse con sus datos concretos. Cliente edita una vez; los 27 burofaxes salen cada uno con sus valores.
lib/notificados_csv.php
v1.1 2026-06-05
Nueva funcionalidad
Aplicación del concepto por defecto + tokens del template en Hechos
  • notificadosConstruirDatos() ahora aplica el concepto_defecto del contrato a las facturas sin concepto propio antes de renderizar.
  • Delegación de la sustitución de {DEUDOR}, {TOTAL}, {FACTURA_FECHA}… a lib/burofax_template.php:hechosSustituirTokens().
  • Fallback a hechosAutoPorBurofax() cuando contratos.hechos está vacío — genera un Hechos jurídicamente válido usando solo datos de BD (concepto + factura + deudor).
Motivo: Un único texto de Hechos guardado en el contrato sirve para todos los burofaxes; cada uno se personaliza al enviarse. El cliente puede dejarlo vacío y aún así los burofaxes salen con Hechos correctos.

Mayo 2026

lib/burofax_template.php
v2.0 2026-05-23
Nueva funcionalidad
Sección HECHOS integrada + IBAN acreedor en cabecera de pago
  • Nueva sección "HECHOS" opcional entre el MASC y la RECLAMACIÓN — se muestra si contratos.hechos no está vacío.
  • Se aplica nl2br($h($hechos)) para respetar saltos de línea que escriba el cliente.
  • IBAN del acreedor renderizado en el bloque DATOS PARA EL PAGO con el titular y concepto autogenerados ("Pago deuda pendiente · [empresa deudora] · Ref. BF-XX").
  • Bloque "ACTÚA EN SU NOMBRE Y POR SU CUENTA" con datos de Marketing Software 2012 como mandataria (contrato de mandato y gestión de cobro).
Motivo: Sin sección HECHOS, un juez del monitorio dudaría del origen del pleito. Ahora el requerimiento describe el negocio y las prestaciones que dan lugar a la deuda, cumpliendo el requisito de determinación de la causa petendi (art. 815 LEC).
lib/notificados_csv.php
v1.0 2026-05-23
Nueva funcionalidad
Generación inicial del CSV de 34 columnas del Conector v1.4
  • Nueva librería que produce el CSV que consume el Conector desktop de Notificad@s (spec Interfaz Conector Burofax Online v1.4).
  • Formato: separador guion bajo "_", BOM UTF-8, CRLF, 34 columnas por burofax en orden A..AH.
  • Configuración fija para el caso automonitorio: Tipo=C (contenido literal HTML), Acuse de Recibo=1 (fehaciencia MASC art. 1973 CC), sin testimonio notarial, sin canales electrónicos.
  • notificadosLimpiarContenido() aplana el HTML del burofax: elimina <style> (no soportado por Notificad@s) y colapsa saltos de línea con notificadosCsvEscapar().
  • notificadosConstruirDatos(int $accionId): reconstruye toda la info del burofax uniendo acciones + deudores + contratos + facturas, y llama a renderBurofax() para el HTML.
  • notificadosGuardarEnOutbox(): escribe el CSV en la carpeta que vigila el Conector (config.notificados.php outbox_dir) para envío automático.
  • notificadosRemitente(): datos del remitente (Marketing Software 2012, Aribau 161, 08036 Barcelona).
Motivo: El Conector de Notificad@s es una app desktop que vigila una carpeta y sube por FTPS lo que encuentre ahí. Este archivo es el puente que convierte nuestras acciones de BD en el formato exacto que Notificad@s espera para procesarlo, imprimirlo, ensobrar y entregar por Correos con acuse de recibo.
config.notificados.php.example
v1.0 2026-05-23
Nueva funcionalidad
Fichero .example con las 3 claves necesarias
  • enabled (bool) — si false, el sistema no intenta escribir en el outbox y solo permite descargar CSV a mano.
  • outbox_dir (string) — carpeta que vigila el Conector. Fuera de Program Files para evitar UAC en Windows.
  • prefijo (string) — para distinguir lotes en el nombre del fichero (ej. "automonitorio").
  • Añadido a .gitignore su versión real (config.notificados.php).
Motivo: Habilitar el envío automático al Conector sin exponer datos de infraestructura en el repo. El .example queda como plantilla y el real vive fuera del control de versiones.
lib/db.php
v3.4 2026-05-22
Nueva funcionalidad
Tabla pagos (Stripe) + esquema del cliente autoservicio
  • Nueva tabla pagos: id, ref_contrato, producto, descripcion, importe, email_cliente, stripe_session_id (UNIQUE), estado (pendiente/pagado/cancelado), timestamps.
  • Es la fuente de verdad de qué se ha cobrado vía Stripe; la confirma stripe_webhook.php / contrato_firmado.php.
  • Tabla clientes ya existía — reforzada con ultimo_acceso.
Motivo: Sin persistencia de la sesión de checkout, no se podía correlacionar el checkout de Stripe con la activación del paquete en acciones. Ahora es trazable.
index.php
v1.3 2026-05-22
Nueva funcionalidad
Barra de navegación con acceso a la cuenta de cliente
  • Nueva barra de navegación superior sobre el hero: marca + "Acceder" y "Crear cuenta" para visitantes, o "Mi panel" y "Salir" si hay sesión de cliente iniciada.
  • index.php carga lib/clientes.php para detectar la sesión; la llamada va en try/catch para que la home se sirva aunque MySQL esté caído.
Motivo: El sistema de alta de clientes es autoservicio y necesita un punto de entrada visible. La home no tenía navegación; la barra hace descubribles el registro y el login sin alterar el diseño del hero.
lib/contrato_template.php
v1.2 2026-05-22
Nueva funcionalidad
Panel de impagados tras la subida + enlace al panel guardado
  • Nueva función JS renderPanelImpagados() que, tras subir el Excel/CSV, pinta una tabla con TODAS las facturas impagadas detectadas (nº, empresa, CIF, email, fecha, importe, procedimiento), sin agrupar — complementa al Panel de deudores que sí agrupa por CIF.
  • Badge de estado de guardado en SQL leyendo guardado_bd de la respuesta de subir_facturas.php.
  • Botón "Abrir el panel de impagados guardado en SQL" que enlaza a panel_impagados.php?ref=...&t=...
Motivo: El usuario quería ver, justo después de subir el Excel, el listado completo de impagados y tener constancia de que se guardan en base de datos. El bloque anterior sólo mostraba los deudores agrupados; ahora se ve cada factura individual y hay un acceso permanente al panel persistente.
contrato.php
v1.2 2026-05-22
Nueva funcionalidad
Prerrelleno del contrato desde la cuenta del cliente
  • Si el cliente tiene sesión iniciada (sistema de cuentas nuevo), el formulario de firma se prerrellena con empresa, CIF, email, teléfono y tipo de cliente de su cuenta.
  • Asegura que el contrato se firme con el mismo email de la cuenta, de modo que quede vinculado automáticamente a ella.
Motivo: Con el alta de clientes por cuenta (registro.php), un cliente registrado que va a firmar no debería reescribir datos que ya dio al registrarse. Además la vinculación cuenta-contrato se hace por email: prerrellenarlo evita errores de tecleo que romperían ese enlace.
subir_facturas.php
v1.1 2026-05-22
Nueva funcionalidad
Persistencia confirmada en SQL para el panel de impagados
  • La respuesta JSON incluye ahora guardado_bd (bool), subida_id y facturas_guardadas: el frontend puede confirmar que la subida quedó persistida en MySQL.
  • El bloque de persistencia se reordena — $guardadoBd y $facturasGuardadas se declaran antes del try y se marcan tras el commit — distinguiendo "archivos en disco" de "datos en SQL".
Motivo: El guardado en las tablas subidas/deudores/facturas era silencioso: si fallaba, sólo quedaba en error_log y el cliente veía igualmente "ok". Exponer guardado_bd permite que el nuevo Panel de impagados muestre un badge "Guardado en SQL · N facturas" (o un aviso en rojo si falló), dando constancia explícita de que la cartera quedó registrada.
panel_impagados.php
v1.1 2026-05-22
Nueva funcionalidad
Borrado de impagados + elección de producto + pago Stripe
  • Selección de facturas con casilla por fila y "seleccionar todas"; botones "Borrar seleccionados" y "Borrar todos" con confirmación. El borrado va acotado por ref_contrato y usa el patrón Post-Redirect-Get.
  • Sección "Elige cómo reclamar tu cartera" con los 3 productos (Burofax / Monitorio / Burofax+Monitorio) valorados con vf_valorarCartera() sobre los impagados que quedan en SQL — los precios se recalculan tras borrar.
  • Botón "Pagar X €" por producto que crea una Stripe Checkout Session (lib/stripe.php) y redirige a la pasarela; si Stripe no está configurado, avisa con un mensaje.
  • El agregado de la cartera se calcula con una consulta SQL agregada (piAgregado), no a partir del archivo subido.
Motivo: El panel era de solo lectura. El usuario pidió poder depurar la cartera (borrar las facturas que no quiere reclamar), elegir uno de los 3 productos y pagarlo. Recalcular la valoración desde SQL tras cada borrado garantiza que el precio siempre corresponde a la cartera real.
registro.php
v1.0 2026-05-22
Nueva funcionalidad
Formulario público de registro de clientes
  • NUEVA página pública de alta: tipo de cliente (empresa/autónomo), razón social, CIF/NIF, email, teléfono y contraseña (mínimo 8 caracteres, con confirmación).
  • Validación del identificador fiscal reutilizando esCifEmpresa() / esNifPersonaFisica() de lib/leads.php.
  • Casilla obligatoria de aceptación de privacidad y términos; protección CSRF en el formulario.
  • Tras el alta correcta inicia sesión automáticamente y lleva al cliente a su panel.
Motivo: Punto de entrada del sistema de cuentas. Permite al cliente crearse una cuenta él mismo (autoservicio) en lugar de depender de firmar un contrato para "existir" en el sistema. La validación de CIF reutiliza la lógica ya probada del contrato para mantener una sola fuente de verdad de qué es una empresa válida.
lib/clientes.php
v1.0 2026-05-22
Nueva funcionalidad
Librería de cuentas de cliente (alta + login + sesión)
  • NUEVA tabla clientes autocreada en lib/db.php (amCrearEsquema): email único, password_hash, tipo_cliente, empresa, cif, telefono, creado_en, ultimo_acceso.
  • Alta y verificación: clienteCrear() con password_hash() bcrypt, clienteVerificar() con password_verify(), clienteBuscarPorEmail().
  • Sesión PHP con cookie segura (httponly, samesite=Lax, secure según HTTPS): clienteIniciarSesion() regenera el id de sesión, clienteActual(), clienteRequerido() (redirige a login.php), clienteCerrarSesion().
  • Token CSRF de sesión (csrfToken / csrfValido) para los formularios de alta y acceso.
  • clienteContratos() vincula la cuenta con sus contratos firmados por coincidencia de email.
Motivo: Hasta ahora un "cliente" era simplemente un contrato firmado, accesible por un magic link ref+token sin cuenta ni contraseña. El usuario pidió un sistema de alta de clientes autoservicio con login email+contraseña. Esta librería centraliza la autenticación — hashing seguro, sesión, CSRF y la vinculación cuenta-contrato por email — sin romper el flujo file/token existente (acceso.php sigue funcionando).
panel_impagados.php
v1.0 2026-05-22
Nueva funcionalidad
Panel de impagados leído desde MySQL
  • NUEVA página protegida por ref+token que lista todas las facturas impagadas guardadas en SQL para un contrato.
  • Stats de cartera (impagados, deuda total, aptas a monitorio, solo burofax) y tabla con buscador en vivo.
  • Accesible de forma permanente: a diferencia del panel que se pinta tras la subida, este lee de la base de datos y se puede volver a abrir cuando se quiera.
Motivo: El panel que aparece tras subir el Excel se genera en el navegador y desaparece al recargar. Se necesitaba una URL permanente para volver a consultar los impagados ya guardados, enlazada desde el resultado de la subida y desde el panel del cliente.
login.php
v1.0 2026-05-22
Nueva funcionalidad
Login con email + contraseña y logout
  • NUEVA página de acceso: email + contraseña, con protección CSRF y mensaje de error genérico ("email o contraseña incorrectos") para no revelar qué emails tienen cuenta.
  • NUEVO logout.php que cierra la sesión y elimina la cookie, devolviendo al login con aviso de "sesión cerrada".
  • Enlace al flujo acceso.php (magic link) para los clientes que firmaron el contrato antes de tener cuenta.
Motivo: Cierra el sistema de cuentas: el cliente registrado vuelve a entrar con sus credenciales. El error genérico evita la enumeración de cuentas. Se mantiene el puente con acceso.php para no dejar fuera a los clientes del flujo antiguo basado en token.
panel.php
v1.0 2026-05-22
Nueva funcionalidad
Panel del cliente: contrato, impagados y reclamaciones
  • NUEVO panel privado (requiere sesión) con 3 bloques: estado del contrato de mandato, subida/consulta de impagados y estado de las reclamaciones.
  • Bloque contrato: si está firmado enlaza a contrato_firmado.php; si no, muestra un CTA para firmarlo.
  • Bloque impagados: resumen (nº y deuda total desde SQL), enlace a panel_impagados.php y formulario de subida reutilizando renderSiguientesPasos().
  • Bloque reclamaciones: tabla de la tabla acciones (deudor, paquete, importe, estado de pago) de todos los contratos del cliente.
  • 4 stats arriba (impagados, deuda total, reclamaciones, contrato) y barra superior con datos del cliente y botón de salir.
Motivo: Es la pantalla a la que llega el cliente tras registrarse o iniciar sesión. Unifica en un único sitio lo que antes estaba disperso entre el magic link del contrato y enlaces sueltos. Reutiliza renderSiguientesPasos() y panel_impagados.php para no duplicar el flujo de subida ya existente.
lib/db.php
v1.0 2026-05-22
Nueva funcionalidad
Capa MySQL propia con esquema autocreado (7 tablas)
  • NUEVA librería de datos a medida — base de datos propia "automonitorio", sin depender del módulo cobros ni de panel-alumnos heredados.
  • Conexión PDO singleton db() con utf8mb4 y errores como excepciones; si la base de datos no existe la crea (CREATE DATABASE) y reconecta.
  • amCrearEsquema() crea de forma idempotente (CREATE TABLE IF NOT EXISTS) las 7 tablas del proyecto: leads, contratos, subidas, deudores, facturas, acciones y clientes.
  • Configuración por defecto de XAMPP (127.0.0.1 / root / sin contraseña); override opcional copiando config.db.php.example a config.db.php.
  • amBuscarContrato($ref, $token) lee el contrato desde SQL y fusiona el payload JSON para mantener compatibilidad con el formato JSONL anterior.
  • amUpsertDeudor() inserta o actualiza deudores (ON DUPLICATE KEY, conservando los datos ya rellenos) y amClaveDeudor() normaliza la clave del deudor por CIF o por nombre.
  • NUEVO config.db.php.example con la plantilla de credenciales; el archivo real queda fuera del repo.
Motivo: Hasta ahora todo el estado (leads, contratos, subidas) vivía en archivos JSONL, lo que no permite consultas, agregados ni paneles persistentes. Una capa MySQL propia y mínima da una base sólida para los paneles del cliente y de admin sin arrastrar la complejidad del módulo cobros heredado. El esquema se autocrea en el primer acceso, así el proyecto sigue siendo desplegable en cualquier XAMPP sin pasos manuales de instalación.
guardar_datos_deudor.php
v1.0 2026-05-22
Nueva funcionalidad
Completar datos del deudor (domicilio, CIF, email) vía AJAX
  • NUEVO endpoint POST JSON protegido por ref+token del contrato firmado.
  • Permite completar o actualizar los datos faltantes de un deudor: razón social, CIF, domicilio, email y teléfono.
  • Persiste en la tabla deudores con upsert por ref_contrato + clave del deudor (amUpsertDeudor de lib/db.php).
  • Devuelve qué campos obligatorios siguen faltando (razón social, CIF, domicilio) y un flag "completo".
Motivo: Las carteras que sube el cliente casi nunca traen el domicilio ni el CIF completos del deudor, y sin domicilio no se puede enviar el burofax certificado. Este endpoint deja completar esos datos desde el panel sin volver a subir el Excel, y avisa exactamente de qué falta para que la reclamación sea viable.
install_db.php
v1.0 2026-05-22
DevOps
Página de verificación e instalación del esquema MySQL
  • NUEVA página solo accesible desde localhost que fuerza la conexión y muestra el estado de la base de datos.
  • Lista las 7 tablas esperadas (leads, contratos, subidas, deudores, facturas, acciones, clientes) con el nº de registros de cada una, o marca en rojo las que falten.
  • El esquema se autocrea solo al conectar (lib/db.php); esta página únicamente lo dispara y lo confirma de un vistazo.
Motivo: Aunque el esquema se autocrea, hacía falta una forma rápida de comprobar que la base de datos está bien y ver cuántos registros hay en cada tabla sin abrir phpMyAdmin. Útil al desplegar en un hosting nuevo y al depurar el flujo de persistencia.
pruebas_subida.php
v1.0 2026-05-22
DevOps
Página de pruebas para iterar la subida sin firmar el contrato
  • NUEVA página solo accesible desde localhost que crea un "contrato de prueba" (ref CT-99999999-aaaaaa) la primera vez y lo reutiliza en cada visita.
  • Permite probar el flujo completo subida → valoración → Stripe sin tener que firmar un contrato real cada vez.
  • Descarga un CSV de ejemplo con 8 facturas (5 dentro del umbral de 2.000 € y 3 que lo superan) para ver el filtro del monitorio en acción.
  • Reutiliza renderSiguientesPasos() y enlaza al panel de impagados de prueba.
Motivo: Iterar sobre el flujo post-firma obligaba a rellenar y firmar el contrato una y otra vez, lo que ralentizaba mucho el desarrollo. Esta página salta ese paso con un contrato ficticio fijo, dejando probar la subida, la valoración de cartera y el pago Stripe en segundos. Está cerrada a localhost para que nunca sea accesible en producción.
activar_paquete.php
v1.0 2026-05-22
Nueva funcionalidad
Activación de paquete (burofax / monitorio / B+M) por deudor
  • NUEVO endpoint POST JSON protegido por ref+token que registra la contratación de un paquete (burofax, monitorio o burofax+monitorio) para un deudor concreto.
  • Inserta la activación en la tabla acciones con su nº de facturas, importe y estado_pago "pendiente".
  • Reconstruye el estado del deudor (burofax sí/no, monitorio sí/no, pago pendiente) leyendo todas sus acciones y lo devuelve en la respuesta.
Motivo: Cierra el flujo del panel: una vez el cliente ve su cartera valorada, necesita poder elegir y activar un paquete por deudor. Registrar cada activación en la tabla acciones da la traza de qué se ha reclamado, con qué producto y si está pagado — es la fuente de datos del bloque de reclamaciones del panel del cliente y del admin.
tools/test_stripe.php
v1.0 2026-05-22
DevOps
Prueba por consola de Stripe Checkout en modo test
  • NUEVO script de línea de comandos que crea un Checkout Session de Stripe en modo test y muestra el enlace de pago resultante.
  • Verifica que config.stripe.php existe y está habilitado, y usa stripeCrearCheckoutSession() de lib/stripe.php.
  • Script de usar y tirar: pensado para borrarse cuando terminen las pruebas — no forma parte del flujo de la aplicación.
Motivo: Tras configurar las claves de Stripe en modo test hacía falta comprobar de extremo a extremo que la integración crea sesiones de pago válidas, sin tener que subir una cartera completa por la web. El script lo verifica en una sola orden de consola.
contratos proveedores/Compromiso de Confidencialidad v1.4 - MARKETING SOFTWARE 2012 SL.pdf
v1.0 2026-05-18
Legal
Compromiso de Confidencialidad de Notificados relleno y regenerado en PDF
  • Recibido de Notificados (Externalización de Notificados y Aplicaciones Online S.L., proveedor del canal de burofax) el modelo en blanco "Compromiso de Confidencialidad v1.4 (004).pdf".
  • Regenerado el contrato completo (8 páginas, texto íntegro) en un PDF nuevo con la página 2 (REUNIDOS / EXPONEN) rellena con los datos de MARKETING SOFTWARE 2012, S.L. como COLABORADOR / PARTE RECEPTORA.
  • Datos rellenos: fecha "En Madrid, a 18 de mayo de 2026"; CIF B65828857; domicilio social Calle Aribau 161, 08036 Barcelona (Barcelona), España; representante D. Álvaro Pino Castillo; D.N.I. 47657302Z; cargo Administrador único.
  • Exponen I (actividad): prestación de servicios profesionales de gestión integral del cobro de facturas impagadas bajo la marca automonitorio.es (burofax MASC art. 443.1 LEC, monitorios arts. 812 y ss. LEC, recuperación IVA art. 80.4 LIVA).
  • Página de firmas con el pie de cada parte: Notificados (D. Víctor Manuel Gómez Gutiérrez, Administrador) y Marketing Software 2012, S.L. (D. Álvaro Pino Castillo, Administrador único).
  • Datos de la sociedad tomados de aviso-legal.php y de las constantes de lib/contrato_template.php (AM_DNI_REP = 47657302Z — pendiente de verificar que es el DNI real del representante).
  • Original en blanco conservado intacto en la misma carpeta "contratos proveedores/".
Motivo: Notificados exige firmar este NDA como paso previo a formalizar la relación de externalización del envío de burofax (proveedor del canal de comunicación fehaciente que usa automonitorio.es). Se rellena con los datos legales reales de la sociedad para devolverlo firmado y desbloquear el alta como colaborador.
presupuesto.php
v2.6 2026-05-12
Nueva funcionalidad
Chip "Burofax / Monitorio / Paquete" en el hero
  • En el hero superior, junto al chip "Servicio B2B", añadido nuevo chip con los 3 productos disponibles: "Burofax (sin límite) · Monitorio (≤ 2.000 €) · Paquete completo".
  • Comunica el matiz del umbral de monitorio antes incluso de que el usuario rellene la calculadora.
Motivo: Coherencia con la nueva sección de la home y con el aviso del flujo de subida: el visitante ve siempre las 3 opciones de servicio y el límite de cuantía del monitorio, independientemente de por dónde entre.
index.php
v1.2 2026-05-12
Nueva funcionalidad
Clarificación del límite "facturas < 2.000 €" en toda la home
  • Hero subhead: añadida línea "Optimizado para cuantías inferiores a 2.000 € por factura (monitorio sin procurador)".
  • Hero badges: nuevo chip amarillo "Facturas < 2.000 €" junto a los de RGPD / IVA / MASC.
  • Feature card renombrada de "Monitorio incluido" → "Monitorio sin procurador", con texto corregido: solo facturas < 2.000 €, sin procurador ni tasa judicial. Antes la frase "procurador colaborador si lo requiere la cuantía" sugería que se cubrían cuantías mayores, lo que ya no es cierto.
  • Callout IVA: ejemplo cambiado de "factura de 10.000 € → 1.736 € recuperables" a "factura de 1.800 € → 312 € recuperables; con 10 facturas similares ya son 3.000 € vía Hacienda". Coherente con el umbral del servicio.
  • FAQ: nueva pregunta "¿Hay un límite de importe por factura?" explicando que < 2.000 € es el óptimo (monitorio sin procurador) y que las superiores solo pueden gestionarse por burofax extrajudicial. CTA a info@automonitorio.es para casos a estudiar aparte.
  • Footer subtítulo: "Servicio B2B" → "B2B · Facturas < 2.000 €".
Motivo: En la iteración anterior el límite se mencionaba solo en la sección de productos. Visitantes que aterrizaban en el hero, leían el callout IVA o miraban las FAQs no veían claramente la restricción, lo que generaba leads desalineados (carteras dominadas por facturas grandes). Reforzar el mensaje en 5 puntos de la página alinea expectativas desde el primer scroll y reduce conversaciones de soporte explicando el alcance.
contrato.php
v1.1 2026-05-12
Nueva funcionalidad
Bloque post-firma: vídeo + subida de facturas + link a panel
  • Tras firmar (bloque de éxito), se invoca renderSiguientesPasos($refAceptacion, $tokenFirma) que muestra vídeo + formulario de subida + tabla de campos esperados + 3 productos.
  • Añadida nota visible: "Guarda el email de confirmación · si lo pierdes, recupéralo en acceso.php con tu email".
Motivo: Aprovechar el momento de máxima intención (acaba de firmar) para captar las facturas inmediatamente, en vez de esperar a un contacto comercial posterior. La línea sobre el flujo de recuperación reduce la dependencia del email de confirmación.
lib/leads.php
v1.1 2026-05-12
Nueva funcionalidad
Notificación de facturas subidas + recordatorio del panel en email de firma
  • NUEVA función notificarFacturasSubidas($contrato, $archivos) que avisa a info@automonitorio.es cada vez que un cliente sube facturas tras firmar.
  • Email con: empresa, CIF, email cliente, lista de archivos (nombre original + tamaño en KB + nombre guardado), ruta en /facturas/CT-.../, CTA "descargar y procesar".
  • Modificado enviarCopiaContratoAlCliente(): añadido bloque azul "Tu panel del cliente" en el email de confirmación tras firmar, con instrucción "guarda este email" + enlace al flujo de recuperación acceso.php por si lo pierden.
Motivo: Cerrar el círculo de notificaciones del equipo: cuando un cliente firma sabemos que firma (ya existía), pero cuando sube las facturas también necesitamos saberlo en tiempo real para procesarlas y arrancar la gestión. El recordatorio del panel en el email de confirmación reduce el volumen de tickets "he perdido el link" al dirigir al cliente al flujo autoservicio.
index.php
v1.1 2026-05-12
Nueva funcionalidad
Sección "Elige tu producto" con las 3 combos y sus precios
  • NUEVA sección #productos entre "Cómo funciona" y "Tarifa transparente": 3 tarjetas lado a lado con Burofax (37 €/deudor), Burofax+Monitorio (67 €/deudor, recomendado) y Monitorio (30 €/monitorio).
  • Tarjeta central (Burofax+Monitorio) destacada con sombra verde, translateY(-8px) y badge "Recomendado".
  • Cada tarjeta: icono FontAwesome, descripción, lista de features con ✓ verdes, precio "desde" + nota de composición, CTA a la calculadora.
  • Monitorio incluye ⚠ amarillo aclarando el límite "Solo facturas ≤ 2.000 €".
  • Anchor #productos para enlazar desde otros sitios (header, hero, email, etc.).
  • Tarifa transparente renombrada a "Tarifa transparente · desglose por concepto" — pasa a ser complemento de las 3 cards y cambia su fondo para mantener la alternancia visual.
Motivo: Hasta ahora el único pricing visible en la home era la tabla de precios unitarios por concepto (12 € burofax Correos, 25 € gestión...), lo que obligaba al visitante a hacer cuentas. Las 3 cards comunican el pricing en formato "producto comprable" y dejan claro qué incluye cada combo y a qué facturas aplica. Es el patrón estándar de SaaS (Stripe, Linear, etc.) y elimina la fricción del cálculo mental.
contrato_firmado.php
v1.1 2026-05-12
Nueva funcionalidad
Panel permanente del cliente con subida de facturas
  • Añadido renderSiguientesPasos($ref, $token) debajo del contrato firmado: el mismo bloque que la pantalla de éxito post-firma, así el cliente puede volver al panel días después y subir las facturas cuando las tenga.
  • El bloque está marcado con .no-print para que no aparezca al imprimir el contrato.
Motivo: Convertir contrato_firmado.php en el "panel del cliente" sin crear archivos nuevos. El enlace permanente que el cliente recibe por email (con su ref+token) le sirve para volver en cualquier momento, ver el contrato firmado y subir las facturas pendientes. Conceptualmente: una sola URL es su acceso, su "espacio personal" y su prueba documental — más simple que un panel separado con auth real.
lib/contrato_template.php
v1.1 2026-05-12
Nueva funcionalidad
Nueva función renderSiguientesPasos() reutilizable
  • NUEVA función renderSiguientesPasos($ref, $token) que se invoca desde contrato.php (pantalla de éxito) y desde contrato_firmado.php (panel del cliente).
  • Contenido en 2 pasos: (1) vídeo tutorial corto embebido (YouTube placeholder, sustituible por el real) y (2) formulario de subida de facturas con AJAX.
  • Botones destacados de descarga de plantilla Excel/CSV antes del input de archivos.
  • Sección desplegable "Qué columnas debe tener tu archivo" con tabla de 7 campos (Obligatorio/Recomendado/Opcional) y ejemplos.
  • Aviso azul antes de subir explicando los 3 productos disponibles (Burofax, Monitorio, Burofax+Monitorio).
  • JS inline que muestra el resultado del POST: 3 tarjetas de producto en grid, cada una con su precio sin IVA / con IVA y su botón de pago (Stripe).
  • La tarjeta "Burofax + Monitorio" se renderiza destacada con sombra verde y badge "Recomendado" cuando hay facturas elegibles para monitorio.
  • Manejo de estados: archivos pendientes (.xls/.ods sin parser), valoración manual (todas las facturas son raras), Stripe no configurado (fallback "te enviaremos el link por email").
  • CSS autosuficiente (.am-step-num inline) para funcionar dentro de contrato.php o de contrato_firmado.php sin depender de su CSS externo.
Motivo: Tras firmar, había un agujero en el flujo: el cliente quedaba en una pantalla de "te contactaremos en 48h" sin nada que hacer mientras tanto. Ahora puede ver un vídeo de 2 min explicando cómo preparar el Excel y subirlo en el momento, recibiendo al instante el precio exacto de su cartera. La función se extrae a la librería para reutilizarse en el panel permanente del cliente (contrato_firmado.php), sin duplicar HTML/JS.
admin.php
v1.1 2026-05-12
Nueva funcionalidad
Nueva pestaña "Facturas subidas" + descarga de archivos del cliente
  • NUEVA función cargarSubidasPorContrato() que escanea /facturas/CT-*/subidas.jsonl y agrega por empresa.
  • 2 nuevos stats arriba: "Carteras subidas" (nº contratos con al menos 1 subida) y "Deuda subida" (suma de carteras de la última subida de cada contrato).
  • NUEVA pestaña "Facturas subidas (N)" entre Contratos y Leads.
  • Tabla agregada con 1 fila por contrato: fecha última subida (+ nº total de subidas si hay varias), empresa, CIF, email, nº facturas, deuda total, 3 columnas con el precio con IVA de cada producto (Burofax / Monitorio / B+M).
  • Icono 🔗 junto al precio cuando se generó un link Stripe (config.stripe.php presente y operativo).
  • Vista detalle por contrato (?tab=facturas&ref=CT-...): muestra todas las subidas del cliente en orden descendente, con su cartera detectada, los 3 productos ofrecidos en tarjetas, los archivos físicos con tamaño y botón de descarga.
  • NUEVO endpoint ?download=CT-.../archivo.xlsx para servir archivos vía readfile() con validación estricta de ruta (regex CT-YYYYMMDD-xxxxxx + nombre sanitizado + realpath dentro de /facturas/) — protege contra path traversal.
  • Export CSV "facturas" con: fecha, empresa, CIF, email, nº facts, deuda total, los 3 precios con IVA, nº subidas, referencia.
Motivo: Hasta esta versión el flujo se quedaba en: cliente sube facturas → notificación por email a info@. El equipo no tenía dónde ver de forma centralizada todas las carteras subidas, qué productos se le ofrecieron a cada cliente y a qué precio. Ahora desde el panel admin se ve de un vistazo el embudo completo (leads → contratos firmados → facturas subidas) y se accede al detalle por cliente con los archivos descargables. La descarga centralizada también evita tener que abrir FTP cada vez que un cliente sube algo.
subir_facturas.php
v1.0 2026-05-12
Nueva funcionalidad
Subida de Excel/CSV + valoración instantánea + Stripe Checkout
  • NUEVO endpoint POST protegido por ref+token del contrato firmado (mismo esquema que contrato_firmado.php).
  • Acepta hasta 5 archivos .xlsx, .xls, .csv u .ods (máx. 10 MB cada uno).
  • Almacenamiento por contrato en /facturas/CT-YYYYMMDD-xxxxxx/ con .htaccess que bloquea acceso web.
  • Tras guardar, ejecuta automáticamente la valoración (lib/valoracion_facturas.php) y crea un Stripe Checkout Session por cada producto aplicable (lib/stripe.php).
  • Metadata de cada subida persistida en /facturas/CT-.../subidas.jsonl (timestamp, IP, archivos, valoración, links de pago).
  • Notifica a info@automonitorio.es vía notificarFacturasSubidas() para acción comercial inmediata.
  • Respuesta JSON con la cartera detectada (totales, monitorio elegibles, solo burofax) y las 3 opciones de producto con sus links de Stripe.
Motivo: Cerrar el ciclo lead → contrato → datos reales. Antes el cliente firmaba el contrato y había que pedirle por email la cartera de impagos. Ahora puede subirla en la misma sesión post-firma, recibir el presupuesto exacto y pagar al instante, lo que reduce drásticamente el ciclo comercial y la fricción en la activación del servicio.
lib/xlsx_reader.php
v1.0 2026-05-12
Nueva funcionalidad
Lector XLSX nativo con ZipArchive + SimpleXMLElement
  • ~120 líneas de código PHP, cero dependencias externas (Composer/PhpSpreadsheet no requerido).
  • Lee la primera hoja del XLSX (xl/worksheets/sheet1.xml).
  • Resuelve sharedStrings.xml y soporta también inlineStr y valores numéricos cacheados.
  • Convierte letras de columna XLSX a índices 0-based (A=0, AA=26, etc.).
  • Rellena celdas vacías omitidas por XLSX para que cada fila devuelva un array contiguo.
  • Descarta filas completamente en blanco antes de devolver.
Motivo: Los clientes exportan sus impagos directamente como XLSX desde su programa de facturación. Pedirles que "Guarden como CSV UTF-8" añade fricción y suele generar errores de encoding/decimales. Un parser nativo (sin Composer) mantiene el proyecto desplegable en cualquier XAMPP estándar sin tocar la cadena de build.
lib/valoracion_facturas.php
v1.0 2026-05-12
Nueva funcionalidad
Extracción automática + 3 productos (burofax / monitorio / paquete)
  • Parser CSV nativo con autodetección de delimitador (, o ;) y BOM UTF-8.
  • Parser XLSX vía lib/xlsx_reader.php (sin Composer ni librerías externas).
  • Heurística de detección de columna de importe: keywords (importe, total, base, pendiente, deuda, monto) → fallback a la columna numérica con suma más alta.
  • Soporte de formatos numéricos europeos ("1.234,56 €") y anglosajones ("1234.56") + limpieza de símbolos.
  • Filtro automático por umbral monitorio (2.000 €): facturas ≤ entran a burofax+monitorio, > solo a burofax.
  • Función vf_valorarCartera() devuelve 3 productos con su desglose: Burofax (todas las facturas), Monitorio (solo ≤2.000 €), Burofax+Monitorio (paquete completo, recomendado si hay facturas elegibles).
  • Cada producto trae: subtotal sin IVA, total con IVA 21%, deudores estimados, flag aplicable, nota explicativa si parte de la cartera no entra.
  • Reutiliza las constantes y proporciones del modelo de presupuesto.php (deudores únicos ≈ 70% de facturas, ~30% van a monitorio tras burofax).
Motivo: Que el cliente vea el precio exacto inmediatamente después de subir su Excel, sin esperar a que un humano valore manualmente. Diferenciar los 3 productos refleja la realidad legal: el monitorio sin procurador solo aplica a cuantías ≤ 2.000 €, así que las facturas mayores solo pueden recibir burofax. Mostrarlo de forma transparente evita expectativas erróneas y permite elegir el producto idóneo según la cartera.
acceso.php
v1.0 2026-05-12
Nueva funcionalidad
Magic link para volver al panel sin contraseñas
  • NUEVO acceso.php: el cliente introduce el email del contrato firmado y el sistema le reenvía por correo el enlace permanente al panel (contrato_firmado.php?ref=...&t=...).
  • Busca el último contrato firmado para ese email recorriendo los JSONL de contratos en orden inverso.
  • Responde el mismo mensaje exista o no la cuenta — no filtra qué emails tienen contrato firmado.
  • Email con CTA "Entrar a mi panel" + nota legal "si no has solicitado este acceso, ignóralo".
  • Sin contraseñas: el token_firma (16 hex) generado al firmar actúa como credencial — coherente con la arquitectura file-based existente.
  • Enlazado desde el bloque post-firma de contrato.php y desde el email de confirmación enviado por enviarCopiaContratoAlCliente().
Motivo: Los clientes firman el contrato pero no siempre tienen las facturas listas para subir en ese mismo momento. Necesitaban una forma de volver al panel días o semanas después sin que el equipo tuviera que reenviar manualmente el enlace. Magic link por email es la opción más simple y segura: sin contraseñas que recordar, sin BBDD de usuarios, sin login a mantener. Replica el patrón ya conocido de Notion/Slack/Substack.
plantilla_facturas.php
v1.0 2026-05-12
Nueva funcionalidad
Plantilla descargable XLSX/CSV con 3 filas de ejemplo
  • Endpoint público: plantilla_facturas.php?formato=xlsx | csv.
  • XLSX generado al vuelo como ZIP con los XML mínimos ([Content_Types], _rels, workbook, sheet1, styles, sharedStrings) — sin dependencias.
  • CSV con BOM UTF-8 para que Excel abra correctamente los acentos.
  • Cabecera con 7 columnas: Nº factura, Cliente/Deudor, CIF deudor, Fecha emisión, Fecha vencimiento, Concepto, Importe pendiente.
  • Cabecera en negrita en XLSX (estilo s="1").
  • 3 filas de ejemplo con importes ≤ 2.000 € para que el cliente vea cómo rellenarla sin copiar valores que serían excluidos del monitorio.
Motivo: Reducir la fricción al máximo en el primer momento de subida: en vez de pedirle al cliente que invente las columnas, le damos la plantilla exacta lista para rellenar. Ofrecer XLSX nativo evita el paso "Guardar como CSV UTF-8" que es donde más usuarios fallan, y el CSV con BOM sirve como fallback para quien prefiera ese formato.
lib/stripe.php
v1.0 2026-05-12
Nueva funcionalidad
Integración Stripe Checkout sin SDK
  • Lee la configuración desde config.stripe.php (gitignored).
  • Crea Checkout Sessions vía API REST de Stripe usando cURL nativo.
  • Incluye email del cliente (customer_email), client_reference_id y metadata.contrato_ref.
  • Soporta test/live mode, success_url y cancel_url configurables.
  • Rechaza importes < 0.50 € (límite Stripe) y devuelve null si la config no existe → la UI muestra "te enviaremos el link por email" como fallback.
  • NUEVO config.stripe.php.example con plantilla de claves; archivo real excluido del repo y del despliegue FTP.
Motivo: Cerrar el flujo subida → valoración → pago en una única sesión del cliente. Stripe Checkout es la opción más simple para una integración inicial: no requiere implementar formularios de tarjeta, gestionar PCI ni manejar webhooks complejos para el primer corte. El helper se conecta vía cURL para evitar incorporar Composer al proyecto.
presupuesto.php
v2.5 2026-05-07
Nueva funcionalidad
CTA "Aceptar y firmar contrato" directo desde el presupuesto
  • Nuevo botón principal destacado tras el resultado del presupuesto: "Aceptar y firmar contrato".
  • Lleva directamente a contrato.php?ref=AM-... con la referencia del presupuesto rellenada.
  • Tarjeta azul con gradiente + botón amarillo (color CTA, alto contraste).
  • Botones secundarios reformulados: "Imprimir/PDF" y "Tengo dudas" (mailto).
  • Cambio del email de contacto en mailto: hola@ → info@automonitorio.es (consistencia con el resto del sitio).
Motivo: Antes el lead solo podía firmar el contrato desde el email recibido tras calcular el presupuesto. Ahora puede hacerlo directamente desde la pantalla del resultado, lo que reduce fricción y aumenta la tasa de conversión: el momento de máxima intención (acaba de ver el cálculo y le encaja) es justo cuando hay que ofrecer la firma. El email queda como fallback para los que prefieren esperar y revisarlo más tarde.
presupuesto.php
v2.4 2026-05-07
Nueva funcionalidad
Panel admin · ver leads y contratos firmados desde el navegador
  • NUEVO admin.php protegido con HTTP Basic Auth — credenciales en config.admin.php (gitignored).
  • 4 stats arriba: leads totales, contratos firmados, ratio de conversión, honorarios contratados.
  • Tab "Contratos firmados": tabla con fecha, tipo cliente (empresa/autónomo), CIF, firmante, email, referencia + botón "Ver" que abre el contrato firmado en nueva pestaña.
  • Tab "Leads": tabla con todos los presupuestos calculados, ordenados por fecha desc.
  • Buscador en vivo (filtro JS sobre la tabla por empresa, CIF, email).
  • Export CSV de leads y contratos (con BOM UTF-8 para Excel español).
  • NUEVO config.admin.php.example con plantilla de credenciales.
  • config.admin.php añadido a .gitignore y exclusión del deploy FTP — credenciales nunca al repo.
  • Panel provisional: cuando se monte la auth completa de automonitorio (próxima semana) se integrará al sistema unificado.
Motivo: Hasta ahora los leads y contratos firmados solo se podían ver abriendo los archivos JSONL por FTP, lo que no escala. El panel admin permite (1) ver de un vistazo el ratio de conversión leads → contrato, (2) acceder a cada contrato firmado en 1 clic, (3) exportar CSV para análisis o seguimiento comercial. La autenticación HTTP Basic es suficiente como medida provisional hasta el sistema de auth completo.
presupuesto.php
v2.3 2026-05-07
Pricing
Pricing simplificado: honorarios fijos sin comisión éxito
  • Eliminada por completo la comisión de éxito 4% (mín 55€/factura) — todas las constantes COMISION_PCT y COMISION_MINIMA fuera del código.
  • Honorario gestión burofax sube de 10€ → 25€ por deudor (fijo).
  • Honorario monitorio se mantiene en 25€ por demanda (fijo).
  • Modelo nuevo: honorarios fijos por gestión + costes pass-through reales (Correos, procurador, tasa). El 100% de lo recobrado al deudor pertenece al cliente.
  • Calculadora: eliminada la sección "3. Comisión de éxito" del desglose. Sustituida por un mensaje verde "Sin comisión de éxito · 100% del cobro es para ti".
  • Cuadro de beneficio actualizado: "Recuperación esperada (35% del deudor · 100% para ti)".
  • Plantilla de contrato (cláusula 3): tabla de honorarios actualizada, eliminada fila de comisión éxito, nueva nota explicando que NO existe comisión sobre lo recobrado.
  • Cláusula 3 del contrato añade: "EL CLIENTE puede contratar solo burofax, solo monitorio, o ambos servicios combinados".
  • Landing index.php: feature card "Tarifa fija sin sorpresas" en lugar de "Tarifa transparente". Tabla de pricing muestra "0 €" en la fila de comisión.
  • FAQ landing: respuesta "¿y si no recupero nada?" reformulada para reflejar el modelo de honorarios fijos.
  • Emails al lead y a info@: eliminada línea "Comisión éxito" en el desglose.
Motivo: Decisión de pricing del usuario: simplificar el modelo eliminando la variabilidad de la comisión de éxito. Argumentos: (1) más fácil de vender — el cliente sabe exactamente lo que paga sin clauses condicionales; (2) elimina conflicto de incentivos (Automonitorio cobra por gestión, no por recobro, lo que hace al servicio más imparcial frente al deudor); (3) el cliente percibe mayor valor — "el 100% de lo recobrado es para ti" es un argumento de venta potente; (4) flujo de ingresos predecible para Automonitorio (no depende de éxito de cobro). El precio sube de 10€ a 25€ por gestión, lo que compensa la pérdida de la comisión de éxito en muchos casos.
presupuesto.php
v2.2 2026-05-07
Nueva funcionalidad
Landing index.php pública + generador de burofax MASC dinámico
  • NUEVO index.php (landing pública) con hero, propuesta de valor, 4 features, 4 pasos del flujo, tarifa transparente desglosada, callout IVA recuperable y FAQ de 7 preguntas.
  • Meta tags SEO + Open Graph para redes sociales (LinkedIn, Twitter).
  • Sustituye al antiguo index.php que era el dashboard de cobros (dependía de ../auth.php inexistente y estaba roto). El dashboard pasará a panel.php cuando se añada auth.
  • NUEVO lib/burofax_template.php con la función renderBurofax() — plantilla legalmente válida basada en el modelo MASC (art. 443.1 LEC) con cláusula de representación de Automonitorio como mandatario.
  • NUEVO burofax.php con doble modo: GET muestra formulario completo (acreedor, deudor, facturas dinámicas, datos envío), POST renderiza el burofax para imprimir/PDF.
  • Soporte JavaScript para añadir/eliminar filas de facturas dinámicamente — un solo burofax puede agrupar todas las facturas del mismo deudor.
  • Print-friendly CSS @media print para generar PDF profesional desde el navegador.
  • Identificación expresa del acreedor (CIF, domicilio) y del mandatario (Marketing Software 2012, S.L.) en el cuerpo del burofax.
Motivo: Cierre del ciclo de operación: la landing convierte tráfico orgánico en leads (antes la home estaba vacía), y el generador de burofax permite empezar a operar manualmente desde el primer día — sin esperar al panel cliente automatizado. La plantilla burofax centraliza la cláusula de representación, garantizando que cada envío sea legalmente sólido.
presupuesto.php
v2.1 2026-05-07
Legal
Cliente puede ser autónomo o empresa, pero los DEUDORES siempre empresas
  • Reformulación del modelo: el servicio acepta como CLIENTE tanto a empresas (CIF) como a autónomos (DNI/NIE). La restricción se traslada a los DEUDORES — solo se gestionan impagos B2B frente a personas jurídicas con CIF.
  • Nueva función esNifPersonaFisica() en lib/leads.php para validar DNI (8 dígitos + letra) y NIE (X/Y/Z + 7 dígitos + letra).
  • Nueva función esIdentificadorFiscalValido() que acepta CIF o NIF persona física.
  • Calculadora: badge del hero pasa a "Servicio B2B · Tus deudores deben ser empresas". Checkbox actualizado a "Confirmo que mis deudores son empresas (no autónomos ni particulares)".
  • Contrato: nuevo radio "Tipo de cliente" (Empresa / Autónomo). El campo de identificación fiscal valida CIF si selecciona empresa, DNI/NIE si autónomo.
  • Contrato: nuevo checkbox amarillo obligatorio "Confirmo que mis deudores son empresas".
  • Plantilla de contrato actualizada: EL CLIENTE puede ser empresa o autónomo; restricción expresa de que los DEUDORES son personas jurídicas.
  • Cláusula 4 del contrato: nueva obligación del cliente de garantizar que los deudores cumplen la condición.
  • Términos y Condiciones: cláusula 2 reescrita con la doble distinción cliente/deudor + razones del filtro B2B (protección al consumidor, normativa híbrida autónomo).
  • Política de Privacidad: restaurada mención de autónomos como tipo de cliente válido.
Motivo: Aclaración del modelo de negocio del usuario: los autónomos como CLIENTES sí son rentables (pueden tener impagos B2B importantes), pero como DEUDORES no — la complejidad legal (normativa híbrida persona física/actividad), los plazos diferentes y la baja rentabilidad media los descarta. Particulares como deudores quedan excluidos por la protección al consumidor (TRLGDCU) que limita las actuaciones de recobro. La restricción "solo deudores empresas" es el filtro correcto: máximo mercado de clientes (empresas + autónomos), mínimo riesgo y máxima rentabilidad operativa.
presupuesto.php
v2.0 2026-05-07
Legal
Restricción a empresas — primera versión (corregida en v2.1)
  • Versión anterior que restringía la contratación solo a empresas. Reformulada en v2.1 para permitir autónomos como clientes manteniendo la restricción solo en los deudores.
Motivo: Versión transitoria, sustituida por v2.1 al refinar el modelo de negocio.
burofax.php
v1.0 2026-05-07
Nueva funcionalidad
Generador de burofax MASC con formulario e impresión a PDF
  • NUEVO generador interno con doble modo: GET muestra el formulario completo, POST renderiza el burofax listo para imprimir o guardar como PDF.
  • Formulario en 4 bloques: acreedor (cliente), deudor (destinatario), facturas a reclamar y datos del envío.
  • Soporte JavaScript para añadir o eliminar filas de facturas dinámicamente — un solo burofax agrupa todas las facturas del mismo deudor.
  • Toolbar con botones "Imprimir / Guardar PDF" y "Editar / Nuevo"; CSS @media print que oculta la interfaz y deja el documento limpio.
  • Plazo de pago, lugar y fecha de emisión configurables; identificación expresa de acreedor y deudor con CIF y domicilio.
Motivo: Permite empezar a operar manualmente desde el primer día — emitir burofaxes de reclamación sin esperar al panel automatizado. El formulario centraliza todos los datos necesarios y la salida es un documento imprimible directamente enviable por Correos.
lib/burofax_template.php
v1.0 2026-05-07
Legal
Plantilla del burofax MASC (art. 443.1 LEC) — función renderBurofax()
  • NUEVA función renderBurofax() que genera el HTML completo del burofax a partir de los datos de acreedor, deudor y facturas.
  • Documento estructurado: remitente/acreedor, bloque "actúa en su nombre" (Automonitorio como mandatario), destinatario, asunto MASC, tabla de facturas con total, propuesta de resolución amistosa, datos de pago y consecuencias.
  • Cláusula de representación: identifica a MARKETING SOFTWARE 2012, S.L. como mandatario que actúa en nombre y por cuenta del acreedor en virtud de contrato de mandato y gestión de cobro.
  • Fundamento legal explícito: art. 443.1 LEC (MASC), arts. 812 y ss. LEC (monitorio), art. 1973 CC (interrupción de la prescripción) y art. 162 LEC (burofax certificado).
  • Constantes con los datos de Automonitorio (CIF, domicilio, representante) centralizadas al inicio del archivo.
  • Cálculo automático del total adeudado con formato numérico español; CSS @media print con márgenes de página.
Motivo: Centralizar la plantilla del burofax garantiza que cada envío sea legalmente sólido y homogéneo: la cláusula de representación es imprescindible porque Correos envía el burofax con remitente Automonitorio y no con el del acreedor real. Tener el texto en una sola función permite versionarlo y reutilizarlo desde burofax.php y desde cualquier flujo automatizado futuro.
presupuesto.php
v1.9 2026-05-06
DevOps
PHPMailer integrado · SMTP autenticado para mejor deliverability
  • Descargado PHPMailer v6.9.3 (release oficial) en lib/PHPMailer/ — solo los 3 archivos necesarios (Exception, PHPMailer, SMTP) + LICENSE.
  • Nueva función leadsEnviarEmail() en lib/leads.php que detecta automáticamente si hay config.smtp.php y usa SMTP, o cae a mail() de PHP.
  • Las 4 funciones de envío refactorizadas (enviarEmailLead, enviarEmailAlLead, enviarCopiaContratoAlCliente, notificarContratoFirmado) usan ahora el helper único.
  • Plantilla config.smtp.php.example con instrucciones para configurar SMTP de espaciowww.
  • config.smtp.php añadido a .gitignore y exclusión del workflow FTP — credenciales nunca se suben.
  • /leads/ y /contratos/ añadidos a .gitignore (privacidad RGPD: datos de leads y firmados no van al repo).
  • Mismo helper funciona en local (con SMTP real configurado) y en producción.
Motivo: mail() de PHP tiene tasa de entrega del 30-60% en bandeja de entrada — el resto cae en spam por falta de SPF/DKIM. SMTP autenticado vía PHPMailer mejora deliverability al 90%+ y resuelve el problema de "no llegan emails en local" (mail() no funciona en XAMPP Windows). Es bloqueante para que los leads y contratos firmados lleguen de forma fiable a info@automonitorio.es y a los clientes.
presupuesto.php
v1.8 2026-05-06
Legal
Páginas legales (LSSI + RGPD) + banner de cookies AEPD-compliant
  • Aviso Legal completo (LSSI art. 10) con datos identificativos del titular, registrales, hosting y exclusión de responsabilidad.
  • Política de Privacidad RGPD con doble régimen: responsable (datos del cliente) + encargado de tratamiento (datos del deudor, art. 28 RGPD).
  • Política de Cookies AEPD 2023 con tabla de cookies usadas (PHPSESSID + am_cookies_consent_v1, ambas técnicas).
  • Términos y Condiciones del servicio: capacidad de contratación B2B, procedimiento, honorarios, obligación de medios, no aplicación TRLGDCU.
  • Banner de cookies en todas las páginas con botones "Aceptar todas" y "Rechazar todas" de igual prominencia (criterio AEPD).
  • Banner usa localStorage con clave am_cookies_consent_v1, registra fecha y elección del usuario.
  • Footer legal unificado en todas las páginas (presupuesto, contrato, contrato firmado, histórico) con enlaces a las 4 páginas legales.
  • Datos legales: MARKETING SOFTWARE 2012, S.L. · CIF B65828857 · Tomo 43250, Folio 147, Hoja B-421587 · Calle Aribau 161, 08036 Barcelona.
Motivo: Cumplimiento normativo obligatorio. Sin estas páginas el sitio incumple LSSI (art. 10) y RGPD (arts. 13-14), exponiéndose a sanciones de la AEPD/Inspección de Comercio (600€-300.000€) y a impugnación de los contratos firmados online. Es bloqueante para servir al primer cliente real.
presupuesto.php
v1.7 2026-05-06
Nueva funcionalidad
Contrato 100% online (sin Dropbox) + página del firmado imprimible
  • Nuevo lib/contrato_template.php con el contrato íntegro en HTML (11 cláusulas + datos de las partes + sello de firma).
  • contrato.php ahora muestra el contrato completo embebido en pantalla (caja scrollable de 540px) — el cliente lo lee en la web sin salir.
  • Nueva contrato_firmado.php que renderiza el contrato YA firmado con los datos del cliente y un sello visible "FIRMADO ELECTRÓNICAMENTE" (firmante, DNI, fecha, IP, referencia).
  • URL permanente y única por contrato: contrato_firmado.php?ref=CT-...&t=token16hex (16 chars hex aleatorios para evitar enumeración).
  • Email al cliente actualizado: enlaza a contrato_firmado.php en lugar de a Dropbox.
  • Página del firmado tiene botón "Imprimir / Guardar PDF" que oculta toolbar y deja el contrato limpio para imprimir.
  • Eliminada constante CONTRATO_DROPBOX_URL — ya no hay dependencia externa.
Motivo: Quitar la dependencia de Dropbox: gestión más profesional, control total del contenido del contrato, posibilidad de versionarlo en git, mejor experiencia (el cliente no necesita cuenta Dropbox ni descargas adicionales). El contrato firmado queda online accesible permanentemente con su URL única, listo para imprimir o guardar en PDF desde el navegador.
presupuesto.php
v1.6 2026-05-06
Nueva funcionalidad
Email automático al lead + flujo de aceptación de contrato
  • Nuevo email auto-respuesta al propio lead con su presupuesto desglosado y CTA "Aceptar contrato y empezar".
  • Nueva página contrato.php con resumen de cláusulas + link al PDF en Dropbox + formulario de firma.
  • Pre-rellenado automático de la página de contrato leyendo el JSON Lines del lead a partir de su referencia.
  • Validación: empresa, CIF, domicilio, email, firmante (nombre, DNI, cargo) + 3 casillas de aceptación obligatorias (contrato, RGPD, capacidad legal).
  • Al firmar: guarda en /contratos/contratos-YYYY-MM.jsonl (con .htaccess Deny from all) + email de copia al cliente + notificación al equipo.
  • Constante CONTRATO_DROPBOX_URL en lib/leads.php para apuntar al PDF real (placeholder hasta que se suba a Dropbox).
  • Página de éxito tras firmar con referencia única CT-YYYYMMDD-xxxxxx.
Motivo: Cerrar el funnel de captación a contratación sin intervención humana. El lead recibe presupuesto + propuesta de contratación en su bandeja, lo firma online en 2 minutos y queda registrado con prueba documental (fecha, IP, navegador). Permite cerrar clientes en 24h en lugar de semanas de comerciales.
presupuesto.php
v1.5 2026-05-06
Nueva funcionalidad
Captura de leads + notificación por email
  • Cada presupuesto generado se guarda como JSON Line en /leads/leads-YYYY-MM.jsonl.
  • Carpeta /leads/ creada automáticamente con .htaccess "Deny from all" para bloquear acceso web (privacidad RGPD).
  • Email automático a info@automonitorio.es con datos del lead + presupuesto desglosado + botón "Responder".
  • Reply-To del email apunta al lead → al pulsar "Responder" en el cliente de correo, va directo al cliente.
  • Helper standalone en lib/leads.php — no depende de BD ni de auth (compatible con cualquier hosting PHP).
  • Tolerante a fallos: si guardar o enviar falla, el presupuesto se muestra igual al usuario y se loguea el error vía error_log.
Motivo: Cerrar el funnel de captación. Antes el cliente calculaba su presupuesto y se iba sin dejar rastro. Ahora cada cálculo deja constancia en el servidor y notifica al equipo en tiempo real para responder rápido y aumentar la conversión a contratación.
presupuesto.php
v1.4 2026-05-06
Legal
Cláusula legal de representación
  • Añadida al pie del presupuesto la cláusula que documenta el mandato y el régimen de encargado de tratamiento (RGPD art. 28).
  • Identifica al acreedor como titular del crédito y a Automonitorio.es como mandatario, no cesionario.
  • Referencia explícita al art. 1973 CC (interrupción prescripción) y arts. 812 y ss. LEC (monitorio).
Motivo: Correos enviará los burofaxes con remitente "Automonitorio" en lugar del acreedor real. La cláusula blinda jurídicamente la representación cuando el sobre del burofax no lleva el nombre del acreedor.
presupuesto.php
v1.3 2026-05-06
Nueva funcionalidad
Recuperación del IVA del impagado vía Hacienda
  • Nuevo selector "Tipo de IVA aplicado en las facturas" (21% / 10% / 4% / 0%).
  • Nuevo selector "Tamaño de tu empresa" (PYME / Gran empresa) → afecta al plazo legal.
  • Cuadro destacado azul "Recuperación EXTRA del IVA en Hacienda" calculando IVA recuperable (art. 80.4 LIVA).
  • IVA recuperable sumado al beneficio neto en el cuadro final.
  • Notas explicando plazos: 6 meses (PYME) o 1 año (gran empresa) + 3 meses para rectificativa + 1 mes para AEAT.
Motivo: El monitorio judicial cumple el requisito de "reclamación fehaciente" del art. 80.4 LIVA, que permite recuperar el IVA repercutido en facturas impagadas. Es uno de los principales argumentos de venta: el cliente recupera dinero de Hacienda incluso si el deudor es insolvente.
presupuesto.php
v1.2 2026-05-06
Pricing
Modelo de pricing con margen de gestión + IVA deducible
  • Burofax desglosado en 2 líneas: coste Correos (12€) + gestión Automonitorio (10€).
  • Monitorio desglosado en: redacción + elección juzgado (25€) + carta certificada al juzgado (5€) + procurador (si aplica) + tasa judicial (si aplica) + notificación (0€).
  • Sección IVA 21% sobre subtotal con cuadro informativo de deducibilidad (modelo 303).
  • Beneficio neto calculado contra coste sin IVA (porque es deducible para empresas).
  • Margen garantizado por gestión: 10€/burofax + 25€/monitorio independientemente del éxito de cobro.
Motivo: Pivotar de "comisión 100% éxito" a "margen garantizado por gestión + comisión éxito". Genera ingresos directos por gestión incluso cuando el deudor es insolvente. IVA visible y deducibilidad clara para que el cliente entienda el coste real.
presupuesto.php
v1.1 2026-05-06
Corrección
Corrección: burofax por deudor + monitorio escalado
  • Burofax: cambiado de N×factura a 1×deudor (un burofax agrupa todas las facturas del mismo deudor).
  • Monitorio: eliminado coste flat 150€/factura. Sustituido por escalado realista: presentación + procurador (solo >2.000€/deudor) + tasa judicial (solo >6.000€/deudor).
  • Notificación juzgado al deudor explicitada como 0€ (la realiza el juzgado).
  • Nota legal sobre exención tasas judiciales (Ley 10/2012) y umbrales de procurador.
Motivo: El cálculo previo sobreestimaba costes ~5.500€ inflando el monitorio. La realidad legal es que en monitorios <2.000€/deudor no hay procurador y <6.000€ no hay tasa. Corregir esto convierte presupuestos antes deficitarios en rentables y refleja el coste real para el cliente.
presupuesto.php
v1.0 2026-05-06
Nueva funcionalidad
Calculadora pública inicial
  • Formulario captación: empresa, email, teléfono, nº facturas, importe, antigüedad, % enriquecer, monitorio.
  • Cálculo: enriquecimiento + burofax + monitorio + comisión éxito (4% mín 55€).
  • Output: presupuesto detallado con referencia única (AM-YYYYMMDD-xxxxxx).
  • Avisos automáticos por antigüedad alta (riesgo prescripción).
  • Botones imprimir/PDF y mailto pre-rellenado para contacto.
  • CSS @media print para presupuesto limpio en papel.
Motivo: Punto de entrada público para captación de leads. Standalone (sin BD ni login). Ahorra el primer contacto comercial: el cliente conoce el coste antes de hablar con nadie.
.github/workflows/deploy.yml
v1.0 2026-05-06
DevOps
Workflow inicial deploy FTPS a espaciowww
  • GitHub Action SamKirkland/FTP-Deploy-Action@v4.3.5 con FTPS.
  • Disparador manual (workflow_dispatch) — auto-push a main comentado para activar cuando esté probado.
  • Exclusión: .git, .github, .vscode, node_modules, vendor, database, uploads, config.php, *.sql, *.csv, README, ROADMAP.
  • Secrets requeridos: FTP_SERVER, FTP_USER, FTP_PASSWORD, FTP_DIR.
Motivo: Sustituir el deploy manual por FileZilla por un flujo automatizado: cada git push a main → despliegue automático. Trazabilidad completa, rollback con git revert, sin riesgo de subir archivos equivocados a mano.
Volver a la calculadora
© 2026 automonitorio.es · MARKETING SOFTWARE 2012, S.L. · CIF B65828857