Formato .eml + incidencias (FR-004/005/010/012/016)
Nombre (Q5, determinista, jamás sobrescrito)
recordatorio-<citaId>-AAAAMMDD-HHMM.eml donde AAAAMMDD-HHMM = inicio del tramo en Europe/Madrid (fechaLocalEnMadrid sin guiones + horaLocalEnMadrid con :→``). Ejemplo: cita 30/09/2026 10:00 → recordatorio-<uuid>-20260930-1000.eml.
Excepción documentada (FR-008 + FR-010 + SC-008): si el mismo tramo se reenvía por cambio de servicio/email (misma AAAAMMDD-HHMM pero distinta configuración), el nombre Q5 colisionaría; el segundo envío usa sufijo -2, -3… (…-HHMM-2.eml) para que cada envío conserve su propio fichero sin sobrescribir el anterior. El primer envío siempre lleva el nombre Q5 exacto.
Cabeceras mínimas (texto plano, revisable con editor)
To: <email del paciente>
Subject: Recordatorio: tu cita en <clinica> el <DD/MM/AAAA> a las <HH:MM>
Date: <ejecucion en formato RFC2822 UTC>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Cuerpo (es-ES, sin jerga, sin SMS/WhatsApp)
Hola, <paciente>:
Te recordamos tu cita en <clinica>:
Cuándo: <DD/MM/AAAA, HH:MM–HH:MM>
Profesional: <nombre>
Servicio: <nombre> (<precio 40,00 €>)
Teléfono de la clínica: <telefono>
Si no vas a poder venir, puedes cancelar aquí:
<APP_URL>/cancelar/<citaId>?token=<token>
Por favor, no reenvíes este enlace: quien lo reciba podría cancelar tu cita.
Si faltan menos de 24 horas, el enlace mostrará «fuera de plazo» y tendrás que llamar a la clínica al <telefono>.
Precio: formatearEuros(precioCongeladoCentimos) de la cita (001 FR-006/S-05), nunca la tarifa vigente.
Incidencias (INCIDENCIAS-AAAA-MM-DD.txt, append-only)
<ejecucion-ISO> | <citaId> | sin-email
<ejecucion-ISO> | <citaId> | email-invalido
<ejecucion-ISO> | <citaId> | duplicado
Sin .eml, sin reintento, sin tocar la cita (FR-016).