.policy-wrap { max-width: 780px; margin: 0 auto; padding: 2rem 1.5rem 4rem; } .policy-header { border-bottom: 2px solid var(--navy); padding-bottom: 1.25rem; margin-bottom: 2rem; } .policy-header h1 { font-size: 1.75rem; color: var(--navy); margin: 0 0 0.35rem; } .policy-header .policy-meta { font-size: 0.82rem; color: var(--muted); } .policy-lang-note { background: var(--amber-bg); border: 1px solid var(--amber-brd); border-radius: var(--r); padding: 0.75rem 1rem; font-size: 0.82rem; color: var(--amber-tx); margin-bottom: 2rem; line-height: 1.5; } .policy-section { margin-bottom: 2.25rem; } .policy-section h2 { font-size: 1.15rem; color: var(--navy); border-bottom: 1px solid var(--border); padding-bottom: 0.4rem; margin-bottom: 1rem; } .policy-section h3 { font-size: 0.95rem; color: var(--text); margin: 1.25rem 0 0.5rem; font-weight: 600; } .policy-section p { font-size: 0.88rem; line-height: 1.7; color: var(--text); margin-bottom: 0.75rem; } .policy-section ul { font-size: 0.88rem; line-height: 1.7; color: var(--text); margin: 0 0 0.75rem 1.25rem; padding: 0; } .policy-section li { margin-bottom: 0.3rem; } .policy-table { width: 100%; border-collapse: collapse; font-size: 0.83rem; margin-bottom: 1rem; } .policy-table th { background: var(--navy); color: #fff; text-align: left; padding: 0.5rem 0.75rem; font-weight: 600; } .policy-table td { padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--border); vertical-align: top; line-height: 1.55; } .policy-table tr:nth-child(even) td { background: #f9f8f6; } .policy-table td:first-child { font-weight: 600; white-space: nowrap; color: var(--navy); } .badge-no { color: var(--green); font-weight: 700; } .badge-yes { color: var(--red); font-weight: 700; } .badge-7 { color: var(--blue); font-weight: 700; } .alert-box { background: var(--amber-bg); border: 1px solid var(--amber-brd); border-radius: var(--r); padding: 0.75rem 1rem; font-size: 0.84rem; line-height: 1.6; margin-bottom: 1rem; color: var(--text); } .alert-box strong { color: var(--amber-tx); } .rights-table td:first-child { white-space: normal; } .divider-lang { border: none; border-top: 3px double var(--navy); margin: 3rem 0; } .lang-banner { text-align: center; font-size: 1rem; font-weight: 700; color: var(--navy); margin-bottom: 2rem; letter-spacing: 0.03em; }
| Responsable | Johan Hellman |
| Actividad | Proyecto personal de exploración de IA aplicada a finanzas y fiscalidad |
| Sitio web principal | accordant.eu |
| Contacto de privacidad | rufus@accordant.eu |
| Delegado de Protección de Datos | No designado. Dado el carácter personal y la escala reducida del tratamiento, no es exigible conforme al artículo 37 RGPD ni al artículo 34 LOPDGDD. |
Rán es una herramienta de elaboración propia, sin ánimo de lucro y de acceso restringido mediante código de invitación personal.
Cuando subes tu declaración de la renta (borrador del Modelo 100 de la AEAT) y pulsas «Analizar», nos envías:
RENTA-XXXX).| Dato | Registro | ¿Se escribe en disco? |
|---|---|---|
| IP (archivos estáticos: HTML, CSS, JS) | Log de acceso de nginx | Sí — comportamiento estándar del servidor web |
IP (subida de PDFs — ruta /process) | — | No — access_log off configurado explícitamente |
IP (ruta /health) | — | No — access_log off también activo |
| Limitación de tasa por IP (anti-abuso) | Búfer RAM de nginx | No — uso transitorio en memoria |
| Metadatos operativos de cada análisis | ops_log.jsonl | Sí — ver sección 2.3 |
ops_log.jsonl)Al completarse cada análisis se anota una línea JSON con los siguientes campos:
| Campo | Descripción |
|---|---|
ts | Marca de tiempo UTC |
code_used | Código de invitación utilizado |
returns_uploaded | Número de PDFs subidos (1 o 2) |
file_size_bytes | Tamaño total de los archivos |
response_time_ms | Duración del análisis |
completed | Si el análisis finalizó correctamente |
input_tokens / output_tokens / cost_usd | Uso de tokens y coste estimado de la API |
Naturaleza de estos datos: El registro no almacena el contenido de tu declaración. Sin embargo, si el código de invitación fue asignado nominalmente a una persona, el campo code_used puede constituir un identificador seudónimo que vincule la entrada con esa persona. Conforme al Art. 4(1) RGPD y al Considerando 26, estos datos se tratan como datos personales seudónimos.
| Finalidad | Base jurídica |
|---|---|
| Analizar la declaración y generar el informe explicativo | Consentimiento — Art. 6.1.a RGPD |
| Tratamiento de datos de salud/discapacidad contenidos en la declaración | Consentimiento explícito — Art. 9.2.a RGPD y Art. 9.2.a LOPDGDD (casilla específica en el formulario) |
| Registro operativo de metadatos (timestamps, tamaños, rendimiento, costes) | Interés legítimo — Art. 6.1.f RGPD. El responsable necesita controlar la estabilidad técnica y los costes operativos. El impacto para el interesado es mínimo: sólo metadatos seudónimos de escaso valor identificador. |
| Limitación de tasa de acceso (protección frente a usos abusivos) | Interés legítimo — Art. 6.1.f RGPD. Las IPs se usan en RAM durante la sesión; nunca se escriben en disco para este fin. |
La provisión de datos es voluntaria pero necesaria para la prestación del servicio: sin el PDF y el código de invitación no es posible generar el análisis. No existe obligación legal ni contractual de proporcionarlos.
Los PDFs que subes jamás se escriben en disco. El tratamiento es íntegramente en memoria (RAM):
BytesIO de Python (RAM).pdfplumber — sin crear archivos temporales en ningún momento.Al cerrar la pestaña, no queda ningún contenido de tu declaración que recuperar.
| Encargado del tratamiento | Anthropic PBC, 548 Market Street, San Francisco, CA 94104, EE.UU. |
| Instrumento de garantía (Art. 46 RGPD) | Cláusulas Contractuales Tipo (CCT) — Decisión 2021/914 + Marco de Privacidad UE-EE.UU. (EU-US Data Privacy Framework) |
| Contrato de encargo (Art. 28 RGPD) | Anthropic ofrece un Data Processing Addendum que cubre las exigencias del Art. 28.3 RGPD. |
| Evaluación de impacto de la transferencia (TIA) | El responsable ha evaluado el riesgo residual. La transmisión de texto fiscal por HTTPS a un proveedor sujeto a CCT y DPF, con retención máxima de 7 días y sin uso para entrenamiento, se considera de riesgo residual bajo y proporcional al objetivo del servicio. |
| Retención por Anthropic | Los registros de la API (texto enviado y respuesta) se conservan 7 días y se eliminan permanentemente. No se usan con fines comerciales. |
| Uso para entrenamiento | Anthropic no utiliza las entradas ni salidas de su API para entrenar sus modelos. Esta es la política contractual aplicable a los usuarios de la API, no una configuración por defecto. Política de retención → |
| Retención Cero de Datos (ZDR) | El responsable ha solicitado la activación de ZDR, que eliminaría incluso la ventana de 7 días. Esta sección se actualizará cuando el ZDR esté confirmado. |
El responsable ha realizado una evaluación preliminar conforme al Art. 35 RGPD y a la lista de tratamientos que requieren EIPD de la AEPD (2019).
Factores de riesgo identificados: tratamiento de datos de categorías especiales (Art. 9), uso de IA generativa, transferencia internacional (EE.UU.).
Factores mitigantes relevantes: (a) escala mínima — acceso exclusivo por invitación personal, sin procesamiento masivo; (b) el contenido documental no se almacena; (c) no se toman decisiones automatizadas con efectos jurídicos; (d) el interesado inicia voluntariamente el análisis; (e) una EIPD formal no es exigible para personas físicas en tratamientos de pequeña escala análogos (Considerando 91 RGPD).
El responsable estima que el tratamiento en sus circunstancias actuales no alcanza el umbral que haría preceptiva una EIPD formal. Si la escala se ampliara materialmente (acceso público, procesamiento masivo), se realizará una EIPD completa antes de dicha ampliación.
| Categoría de dato | Plazo |
|---|---|
| Contenido del PDF y texto extraído | Ninguno — liberado de RAM al finalizar la solicitud |
| Informe generado | Ninguno — transmitido por streaming, no almacenado |
| Logs de acceso de nginx (IPs en archivos estáticos) | Máximo 30 días — rotación automática |
Registro operativo ops_log.jsonl | Máximo 12 meses desde cada entrada; supresión antes del vencimiento |
| Registros de Anthropic | 7 días — política publicada del proveedor |
Conforme al RGPD (artículos 15–22) y a la LOPDGDD (artículos 12–18):
| Derecho | Aplicación en este servicio |
|---|---|
| Acceso (Art. 15) | Los únicos datos vinculables a ti son: el código de invitación asignado (si fue nominativo) y las entradas correspondientes en ops_log.jsonl. |
| Rectificación (Art. 16) | Corrección de datos inexactos en el registro operativo. |
| Supresión (Art. 17) | Eliminación de tus entradas en el registro operativo y/o IPs en logs de nginx. |
| Limitación (Art. 18) | Suspensión del tratamiento mientras se resuelve una disputa. |
| Portabilidad (Art. 20) | Metadatos del registro operativo en formato estructurado legible por máquina. |
| Oposición (Art. 21) | Oposición al tratamiento basado en interés legítimo (registro operativo). |
| Retirada del consentimiento (Art. 7.3) | Puedes retirar tu consentimiento en cualquier momento. Dado que el contenido de tu declaración no se almacena, la retirada implica en la práctica: (a) no volver a utilizar el servicio para futuros análisis; y (b) solicitar en su caso la supresión de las entradas del registro operativo. La retirada no afecta a la licitud del tratamiento ya realizado. |
Para ejercer cualquiera de estos derechos, escribe a rufus@accordant.eu con el asunto «Derechos RGPD». Responderemos en el plazo máximo de un mes (prorrogable a tres meses en casos justificados), conforme al Art. 12 RGPD.
Rán utiliza un modelo de IA (Claude, de Anthropic) para analizar el contenido de tu declaración. Esta actividad implica tratamiento automatizado de datos personales.
No se toman decisiones automatizadas con efectos jurídicos ni efectos significativos similares sobre ti en el sentido del Art. 22.1 RGPD. El informe es una explicación informativa. La decisión de presentar, modificar o reclamar la declaración corresponde íntegramente a ti, en su caso con asesoramiento de un profesional habilitado.
Rán no utiliza cookies, localStorage, sessionStorage ni ninguna otra forma de almacenamiento persistente en tu dispositivo. No hay Google Analytics, píxeles de publicidad, redes de seguimiento ni scripts de terceros cargados desde CDN externas.
El código de invitación que introduces existe únicamente en la memoria del navegador mientras tienes la pestaña abierta y desaparece al cerrarla o recargarla. El único archivo JavaScript externo a la lógica de la aplicación (marked.min.js) se sirve localmente desde este servidor, sin comunicación con terceros.
Tienes derecho a presentar una reclamación ante la Agencia Española de Protección de Datos (AEPD):
Te animamos a dirigirte primero a nosotros en rufus@accordant.eu para resolver cualquier inquietud directamente.
Los cambios relevantes se comunicarán mediante aviso en el sitio web y actualizando la fecha indicada al inicio. Los cambios que afecten a la base jurídica o a las transferencias internacionales requerirán, cuando proceda, un nuevo consentimiento. Esta política está siempre disponible en ran.accordant.eu/privacy.
| Controller | Johan Hellman |
| Activity | Personal project exploring AI in finance and tax |
| Main website | accordant.eu |
| Privacy contact | rufus@accordant.eu |
| Data Protection Officer | Not appointed. Given the personal nature and small scale of processing, one is not required under Article 37 GDPR or Article 34 LOPDGDD. |
Rán is a personal, non-commercial tool with access restricted to individually invited users.
When you upload your Spanish income tax return (AEAT Modelo 100 borrador) and click "Analyse", you send us:
RENTA-XXXX).| Data | Record | Written to disk? |
|---|---|---|
| IP (static files: HTML, CSS, JS) | nginx access log | Yes — standard web server behaviour |
IP (PDF uploads — /process) | — | No — access_log off explicitly configured |
IP (/health) | — | No — access_log off also active |
| Rate-limiting by IP (anti-abuse) | nginx RAM buffer | No — transient, never persisted |
| Operational session metadata | ops_log.jsonl | Yes — see section 2.3 |
ops_log.jsonl)One JSON line is appended per completed analysis:
| Field | Description |
|---|---|
ts | UTC timestamp |
code_used | Invitation code used |
returns_uploaded | Number of PDFs uploaded (1 or 2) |
file_size_bytes | Total file size in bytes |
response_time_ms | Analysis duration in milliseconds |
completed | Whether the analysis finished successfully |
input_tokens / output_tokens / cost_usd | Token usage and estimated API cost |
Nature of this data: The log does not store your return content. However, if the invitation code was individually assigned to a named person, code_used may constitute a pseudonymous identifier linking the entry to that person. Under GDPR Article 4(1) and Recital 26, this is treated as pseudonymous personal data.
| Purpose | Legal basis |
|---|---|
| Analysing the return and generating the report | Consent — Article 6(1)(a) GDPR |
| Processing health/disability data in the return | Explicit consent — Article 9(2)(a) GDPR and Article 9(2)(a) LOPDGDD (dedicated checkbox in the form) |
| Operational metadata logging (timestamps, sizes, performance, costs) | Legitimate interest — Article 6(1)(f) GDPR. The controller needs to monitor technical stability and operational costs. Impact on the data subject is minimal: pseudonymous metadata of very low re-identification value. |
| Rate-limiting (abuse protection) | Legitimate interest — Article 6(1)(f) GDPR. IPs are used in RAM for this purpose only; never written to disk. |
Providing data is voluntary but necessary for the service: without the PDF and invitation code, no analysis can be produced. There is no legal or contractual obligation to provide them.
The PDFs you upload are never written to disk. Processing is entirely in memory (RAM):
BytesIO buffer (RAM only).pdfplumber — no temporary files are created.When you close the tab, no document content from your return remains anywhere to retrieve.
| Processor | Anthropic PBC, 548 Market Street, San Francisco, CA 94104, USA |
| Transfer safeguard (Art. 46 GDPR) | EU Standard Contractual Clauses (SCCs) — Implementing Decision 2021/914 + EU–US Data Privacy Framework |
| Data Processing Agreement (Art. 28 GDPR) | Anthropic provides a Data Processing Addendum covering the Article 28(3) GDPR requirements. |
| Transfer Impact Assessment (TIA) | The controller has assessed residual transfer risk. Transmitting fiscal PDF text over HTTPS to an established AI provider bound by SCCs and DPF, with 7-day maximum retention and no model training use, is considered of low residual risk and proportionate. |
| Retention by Anthropic | API logs retained for 7 days then permanently deleted. Security/anti-abuse functions only, not commercial use. |
| Use for training | Anthropic does not use API inputs or outputs to train its models. This is the contractual policy applicable to API customers, not a default setting. Retention policy → |
| Zero Data Retention (ZDR) | The controller has applied to Anthropic for ZDR activation, which would eliminate even the 7-day window. This section will be updated when confirmed. |
The controller has conducted a preliminary assessment under Article 35 GDPR and the AEPD's mandatory DPIA list (2019).
Risk factors identified: special category data (Art. 9), use of generative AI, international transfer (USA).
Mitigating factors: (a) minimal scale — personal invitation only, no mass processing; (b) document content is never stored; (c) no automated decisions with legal effects; (d) the data subject initiates the analysis voluntarily; (e) formal DPIA is not required for individual controllers at small scale (Recital 91 GDPR).
The controller considers that processing under current circumstances does not reach the threshold for a compulsory formal DPIA. If the service scale were to expand materially (public access, mass processing), a full DPIA will be conducted before such expansion.
| Category | Period |
|---|---|
| PDF content and extracted text | None — released from RAM when the request ends |
| Generated report | None — streamed, not stored |
| nginx access logs (IPs for static files) | Maximum 30 days — automatic rotation |
Operational log ops_log.jsonl | Maximum 12 months per entry; deletion before that limit |
| Anthropic logs | 7 days — processor's published policy |
Under GDPR (Articles 15–22) and LOPDGDD (Articles 12–18):
| Right | What it means for this service |
|---|---|
| Access (Art. 15) | The only data linkable to you is: your invitation code (if nominative) and corresponding ops_log.jsonl entries. |
| Rectification (Art. 16) | Correct inaccurate data in the operational log. |
| Erasure (Art. 17) | Request deletion of your operational log entries and/or IPs in nginx logs. |
| Restriction (Art. 18) | Request suspension of processing while a dispute is resolved. |
| Portability (Art. 20) | Your operational log metadata in structured, machine-readable format. |
| Objection (Art. 21) | Object to legitimate interest-based processing (operational log). |
| Withdrawal of consent (Art. 7(3)) | You may withdraw consent at any time. Because your return content is not stored, withdrawal means in practice: (a) not using the service for future analyses; and (b) if desired, requesting deletion of your operational log entries. Withdrawal does not affect the lawfulness of processing already carried out. |
To exercise any of these rights, email rufus@accordant.eu with the subject "GDPR Rights". We will respond within one month (extendable to three in complex cases) under Article 12 GDPR.
Rán uses an AI model (Claude by Anthropic) to analyse the content of your tax return. This involves automated processing of personal data.
No automated decisions with legal effects or similarly significant effects are made about you within the meaning of Article 22(1) GDPR. The generated report is an informational explanation of your return's figures. The decision whether to file, amend, or challenge your return is entirely yours, where appropriate with advice from a qualified professional.
Rán does not use cookies, localStorage, sessionStorage, or any other form of persistent browser-side storage. There is no Google Analytics, advertising pixels, tracking networks, or third-party scripts loaded from external CDNs.
The invitation code you type exists only in browser memory while the tab is open, and is gone when you close or reload it. The only JavaScript file external to the application logic (marked.min.js) is served locally from this server — no communication with any third party occurs.
You have the right to lodge a complaint with the Agencia Española de Protección de Datos (AEPD), Spain's data protection authority:
We would also welcome direct contact at rufus@accordant.eu before escalating.
Material changes will be communicated via a notice on the website and by updating the date above. Changes that affect the legal basis of processing or international transfers will require fresh consent where applicable. This policy is always available at ran.accordant.eu/privacy.