# Memoria tecnica - shared-assets

Fecha: 2026-07-27

## Jornada tecnica 2026-07-27 - Plantilla compartida de reembolso

### Nueva comunicacion al donante

- Se incorpora `templates/emails/donor_refund_email.php` como plantilla fallback comun para el correo manual de reembolso.
- El mensaje confirma que Fundacion CARF ha tramitado el reembolso solicitado por el donante.
- La tabla de detalle muestra solo valores disponibles: importe, fecha, motivo, referencia de donacion, campaña y metodo de pago.
- Se informa de que el tiempo de reflejo en cuenta puede depender de la entidad bancaria o del medio de pago.
- La plantilla mantiene la identidad visual compartida, el logotipo configurado mediante `SHARED_ASSETS_URL` y estilos inline compatibles con clientes de correo.

### Integracion y seguridad

- `donoradmin` consume esta plantilla desde `DonationMailer` y la expone en el catalogo de plantillas editables.
- La plantilla no realiza consultas ni contiene datos reales: recibe un contexto ya validado por el panel.
- No se incorporan credenciales, adjuntos, dumps ni documentos generados.

### Verificaciones realizadas

- Sintaxis PHP validada en la plantilla.
- Revision del HTML y de las variables opcionales para evitar filas vacias.
- Comprobacion de formato Git mediante `git diff --check`.

## Alcance del repositorio

`shared-assets` contiene recursos compartidos entre la pasarela `dona` y el panel `donoradmin`: estilos base, librerias frontend vendorizadas, iconos, imagenes corporativas, utilidades JS y plantillas fallback para emails/PDF.

## Relacion con otros repositorios

- `dona` consume este repositorio para estilos globales, SweetAlert2, scripts comunes, logotipos, iconos y plantillas de email/PDF.
- `donoradmin` consume este repositorio para estilos globales, SweetAlert2, scripts comunes, logotipos, iconos, biblioteca de medios base y plantillas fallback.
- Es un repositorio de soporte compartido: los cambios aqui pueden afectar simultaneamente a la pasarela publica y al panel administrativo.

## Contenido principal

- `css/`: Bulma, SweetAlert2, variables/base compartidas y estilos de paginas comunes.
- `js/`: SweetAlert2 y utilidades CARF compartidas.
- `fonts/`: fuente Inter usada por las interfaces.
- `img/`: logotipos, favicons, iconos de pago, iconos de formularios y recursos visuales comunes.
- `templates/emails/`: plantillas fallback de emails.
- `templates/pdf/`: plantillas fallback de certificados.

## Cambios recientes incluidos en esta copia

- 2026-07-01 - Datos premium en plantillas de email compartidas:
  - Las plantillas con prefijo `donor_` distinguen entre donante particular, empresa y donacion anonima para mostrar solo los datos relevantes en cada caso.
  - Los datos del donante se ordenan de forma uniforme: tipo de donante, datos personales o societarios, contacto, documento, correo, telefono y ubicacion cuando procede.
  - Los emails dirigidos al donante omiten campos vacios o no aplicables, evitando mostrar datos bancarios o de pago que no se han informado para esa operacion concreta.
  - Las plantillas con prefijo `admin_` mantienen una lectura mas completa para administracion, incluyendo datos internos utiles como identificadores, referencias, estado, metodo de pago, recurrencia y consentimiento cuando existen.
  - Se evita duplicar informacion: el nombre visible del donante no se repite si ya queda desglosado por nombre/apellidos o razon social/contacto.
  - La estructura visual existente se mantiene intacta: tarjetas, tablas, colores, cabecera, pies y estilos inline siguen alineados con el sistema actual.
  - Archivos tocados: `templates/emails/admin_donation_email.php`, `templates/emails/admin_transfer_pending_email.php`, `templates/emails/admin_recurring_cancellation_email.php`, `templates/emails/donor_donation_email.php`, `templates/emails/donor_transfer_pending_email.php` y `templates/emails/donor_recurring_cancellation_email.php`.
- 2026-06-30 - Unificacion de plantillas fisicas de email:
  - Las plantillas con prefijo `admin_` se alinean visualmente con `admin_donation_email.php`, compartiendo estructura de tarjeta, cabecera con logotipo, tabla de datos y pie interno oscuro.
  - Las plantillas con prefijo `donor_` se alinean visualmente con `donor_donation_email.php`, manteniendo tono de confirmacion al donante, tabla de resumen y pie corporativo.
  - `admin_donation_email.php` amplia la informacion mostrada con los datos disponibles de donante, contacto, direccion, pago, IBAN/mandato cuando procede y consentimiento.
  - `admin_transfer_pending_email.php` conserva la informacion de transferencia pendiente y adopta el mismo formato interno que el resto de emails administrativos.
  - `admin_recurring_cancellation_email.php` conserva la informacion de cancelacion y anade datos principales de donante y direccion cuando llegan en el contexto.
  - `donor_donation_email.php`, `donor_transfer_pending_email.php` y `donor_recurring_cancellation_email.php` muestran datos principales del donante y de la operacion cuando estan disponibles, omitiendo campos vacios de forma limpia.
  - Las etiquetas `Email` se sustituyen por `Correo electronico` en los campos de correo del donante.
  - Se elimina la exposicion de `Municipio ID`; las plantillas esperan `municipality_name` y `province_name` para mostrar ubicacion legible.
  - Las plantillas mantienen compatibilidad con los datos existentes: no consultan base de datos, no cambian nombres de archivo y no introducen dependencias nuevas.
  - Archivos principales tocados: `templates/emails/admin_donation_email.php`, `admin_transfer_pending_email.php`, `admin_recurring_cancellation_email.php`, `donor_donation_email.php`, `donor_transfer_pending_email.php` y `donor_recurring_cancellation_email.php`.
- 2026-06-24 - Plantillas compartidas:
  - Se corrigen las rutas de imagen en plantillas fallback de email para que el logotipo apunte al origen del dominio y a `/shared-assets/img/Carf_negro.png`, evitando rutas erroneas bajo `/dona/` o `/donoradmin/`.
  - Se actualizan los templates de email de donacion, transferencia pendiente y cancelacion de recurrencia, tanto para notificaciones internas como para comunicaciones al donante.
  - Se valida que la ruta publica del logotipo en staging responde correctamente con `HTTP 200` y `content-type: image/png`.
  - Se ajusta la plantilla PDF de certificado para resolver imagenes desde `shared-assets/img` mediante ruta de disco relativa al propio repositorio.
  - Se corrige la generacion del importe en letra del certificado, aplicando apocope masculina: `un euro`, `veintiun euros`, `veintiun mil`, `treinta y un`, `ciento un mil`, etc.
  - Se mejora el parseo de importes con formatos europeos y mixtos como `1.234,56`, evitando lecturas incorrectas de miles y decimales.
  - Se normalizan tildes en numeros frecuentes y se contempla el caso de millones exactos como `un millon de euros`.
- Consolidacion como dependencia explicita de `dona` y `donoradmin`.
- Documentacion de la relacion entre proyectos para facilitar despliegues y copias de seguridad independientes.
- Preparacion de `.gitignore` para evitar incluir documentos generados, dumps o secretos si se incorporan accidentalmente en el futuro.

## Criterios de seguridad para Git

No se versionan dumps SQL, claves privadas, backups ni PDFs generados con datos reales. Los assets publicos, plantillas fallback y librerias frontend compartidas si quedan versionados.

## Notas de despliegue

Debe publicarse de forma que los proyectos puedan acceder a rutas absolutas como `/shared-assets/css/...`, `/shared-assets/js/...`, `/shared-assets/img/...` y `/shared-assets/templates/...`.

---

## Jornada tecnica 2026-07-02 - Plantillas centralizadas y certificado oficial

Durante esta jornada se ajustan las plantillas compartidas para que `dona` y `donoradmin` consuman la misma base visual y puedan migrarse de dominio sin rutas fijas.

### Emails compartidos

- Las plantillas fallback de email sustituyen rutas absolutas hardcodeadas por `SHARED_ASSETS_URL`.
- Los logotipos y recursos visuales quedan preparados para publicarse bajo el dominio configurado por cada proyecto consumidor.
- Se mantienen los nombres de archivo y la estructura de datos esperada por `dona` y `donoradmin`.

### Certificado PDF

- `templates/pdf/certificado_template.php` queda como plantilla oficial comun para certificados generados desde la pasarela y desde el panel.
- El formato visual se alinea con la plantilla usada por `dona` en el envio posterior a la donacion, evitando el aspecto antiguo que cortaba el footer.
- La cabecera, cuerpo, firma y pie legal se ajustan para A4 con margenes absolutos y tamanos de fuente mas contenidos.
- La palabra `CERTIFICA` elimina espacios manuales que alargaban el subrayado y descuadraban el bloque.
- El domicilio del donante deja de mostrar IDs internos; compone municipio y provincia en texto legible y evita duplicados cuando coinciden.
- La plantilla acepta alias de assets (`logo_url`, `carf_logo_url`, `firma_url`, `signature_url`) y embebe imagenes desde `shared-assets/img` cuando se ejecuta por disco.
- El calculo de importes en letra conserva compatibilidad con importes ya preformateados y normaliza cantidades en formato europeo.
- El ejercicio del certificado admite `anio_donacion`, `certificado_anio` y `certificate_year`.

### Validaciones realizadas

- Sintaxis PHP validada en la plantilla de certificado.
- Prueba local de renderizado HTML/PDF con WeasyPrint usando datos ficticios, verificando que el ano llega correctamente y que el PDF se genera.

---

## Jornada tecnica 2026-07-07 - Certificado dinamico y recuperacion de donaciones

Durante esta jornada se actualizan las plantillas compartidas consumidas por `dona` y `donoradmin` para soportar certificados mas precisos y el nuevo flujo de recuperacion amable de intentos de donacion no finalizados.

### Certificado PDF compartido

- `templates/pdf/certificado_template.php` deja de mostrar `N.I.F.` como literal fijo.
- La etiqueta del documento se adapta a NIF/NIE cuando corresponde.
- Para pasaporte u otros documentos se muestra el numero sin prefijo incorrecto.
- La plantilla queda preparada para recibir el importe certificado como acumulado anual del donante, manteniendo la redaccion de ejercicio fiscal.
- Se conserva la compatibilidad con los datos enviados desde `dona` y `donoradmin`.

### Email de donacion abandonada

- Nueva plantilla `templates/emails/donor_abandoned_donation_email.php`.
- El tono del email es informativo, agradecido y no comercialmente agresivo.
- Incluye saludo personalizado cuando hay nombre disponible.
- Informa de que la donacion no llego a completarse y ofrece contacto con la Fundacion.
- Incluye enlace a informacion sobre incentivos fiscales.
- La plantilla usa variables configurables para email de la Fundacion y URL fiscal cuando llegan desde los servicios consumidores.

### Impacto en repos consumidores

- `dona` usa la plantilla para el cron automatico de recuperacion.
- `donoradmin` puede usar la misma plantilla para reenvio manual desde la vista tecnica de intentos.
- El certificado compartido mantiene una unica base visual para certificados emitidos desde pasarela y panel.

---

## Jornada tecnica 2026-07-08 - Cierre sin cambios funcionales compartidos

Durante esta jornada no se han introducido cambios de codigo, plantillas o assets en `shared-assets`.

### Impacto en consumidores

- Las mejoras realizadas en `dona` y `donoradmin` reutilizan las plantillas compartidas ya existentes.
- El email `donor_abandoned_donation_email.php` sigue siendo la base comun para recuperacion automatica y reenvio manual.
- No ha sido necesario modificar recursos visuales, CSS compartido ni plantillas PDF.

### Estado final

`shared-assets` queda documentado como estable para esta jornada. Los cambios funcionales del dia se concentran en `dona` y `donoradmin`.

---

## Jornada tecnica 2026-07-10 - Almacenamiento compartido y fin de recibos

Durante esta jornada `shared-assets` pasa a concentrar los recursos documentales y de media que antes estaban dispersos entre `dona` y `donoradmin`.

### Certificados

- Se incorpora `services/AnnualCertificatePdfService.php` como servicio compartido para nombrado, ubicacion y busqueda de certificados anuales.
- Se crea `storage/certificates` como raiz comun para certificados generados por `dona` y `donoradmin`.
- `storage/.htaccess` protege el almacenamiento compartido frente a acceso web directo.
- Los PDFs generados siguen sin versionarse por la regla `*.pdf` de `.gitignore`.

### Media compartida

- Se crea `media-library` como carpeta central para archivos subidos desde la biblioteca de medios del panel.
- `media-library/.htaccess` bloquea acceso web directo a los ficheros subidos.
- `donoradmin` queda preparado para listar recursos desde `img`, `media-library` y `storage`.

### Retirada de recibos

- Se elimina `templates/pdf/recibo_template.php`.
- Se elimina `storage/receipts` como destino documental.
- La documentacion queda ajustada para reflejar que las plantillas PDF compartidas corresponden a certificados.

### Archivos principales modificados

- `services/AnnualCertificatePdfService.php`
- `storage/.htaccess`
- `storage/certificates/.gitkeep`
- `media-library/.htaccess`
- `media-library/.gitkeep`
- `templates/pdf/recibo_template.php`
- `docs/memoria_tecnica_shared-assets.md`

### Verificaciones realizadas

- Validacion de sintaxis PHP en `AnnualCertificatePdfService.php`.
- Revision de que los PDFs reales bajo `storage/certificates` quedan ignorados por Git.
- Revision de que no quedan referencias activas a `receipts` en los repos consumidores.
