Build the Modelo 200 Corporate Tax Return
Skill: Convert annual accounts into the Modelo 200 casillas dataset (JSON)
Region: Spain (España) Category: Corporate tax — Impuesto sobre Sociedades (Modelo 200, declaración del IS) Does: Takes a company's annual accounts (resultado contable) and tax adjustments and produces a strictly-valid JSON object of the key Modelo 200 casillas (box numbers) — the resultado contable → base imponible bridge (ajustes extracontables, compensación de BINs), tipo de gravamen, cuota íntegra, deducciones y bonificaciones, retenciones y pagos fraccionados, and the líquido a ingresar / a devolver — ready to key into the AEAT Sociedades form. Standard: AEAT Modelo 200 — Impuesto sobre Sociedades (Orden HFP vigente; declaración del IS / pago de la cuota)
This skill produces the box-by-box dataset for the Modelo 200, not the signed AEAT presentation. The AI builds the resultado-contable-to-base-imponible bridge and computes the cuota; the taxpayer must validate every ajuste against the cuentas anuales and tax law, confirm the BINs available, and submit through the AEAT Sociedades web service. Casilla numbering and the tipo de gravamen change between exercises — verify against the current year's Modelo 200 before filing.
When this applies
- Any entity subject to Impuesto sobre Sociedades (sociedades mercantiles, certain entities) files the Modelo 200 annual return after closing its cuentas anuales.
- Deadline: within 25 calendar days following the 6 months after the end of the tax period — for a calendar-year company (período impositivo ending 31 December) that is 1–25 July of the following year.
- The return bridges the resultado contable (accounting profit, casilla 500) to the base imponible (casilla 552) via ajustes extracontables (permanentes y temporarios) and the compensación de bases imponibles negativas (BINs), applies the tipo de gravamen, and nets retenciones y pagos fraccionados to a líquido a ingresar o a devolver.
- Excluded: the pagos fraccionados themselves (those are Modelo 202), entities in régimen de consolidación fiscal at group level (Modelo 220), and non-resident income tax (Modelo 210/206).
Conversion procedure
- Read the source. Accept the cuentas anuales (balance + pérdidas y ganancias), a trial balance, or pasted figures: the resultado contable antes de impuestos / después de impuestos, the gasto por impuesto, the list of ajustes extracontables, BINs pending, deducciones, retenciones, and pagos fraccionados.
- Extract fields. Capture the resultado de la cuenta de pérdidas y ganancias (casilla 500), every ajuste (aumento / disminución, permanente / temporario) with its amount, the BINs available and the year they arose, the tipo de gravamen, deducciones y bonificaciones, retenciones e ingresos a cuenta, and pagos fraccionados (Modelo 202). If an ajuste or BIN is ambiguous, ask — do not invent.
- Normalize. Amounts in EUR, dot decimal, 2 decimals, no thousands separator. NIF uppercased; ejercicio as
yyyy. - Bridge resultado → base imponible. Start from casilla 500; add aumentos and subtract disminuciones (casillas of ajustes) to reach the base imponible antes de compensación (casilla 550), then subtract BINs (casilla 547) to reach the base imponible (casilla 552). Recompute — never copy a printed base.
- Compute the cuota. Apply the tipo de gravamen (casilla 558) to get cuota íntegra (casilla 562); subtract deducciones por doble imposición and bonificaciones (cuota íntegra ajustada, casilla 592); subtract deducciones para incentivar (casilla 582…) to cuota líquida (casilla 592); subtract retenciones (casilla 595) and pagos fraccionados (casilla 599) to the líquido a ingresar/devolver (casilla 621).
- Emit the JSON keyed by casilla (see output structure and worked example) and validate against the checklist, reconciling casilla 500 with the cuenta de pérdidas y ganancias of the cuentas anuales.
Source → Modelo 200 casilla map
| From the source | → Casilla (box) |
|---|---|
| Identification: NIF, name, ejercicio | header (nif, razonSocial, ejercicio) |
| Resultado de la cuenta de pérdidas y ganancias | 500 |
| Impuesto sobre Sociedades (gasto contable) — aumento | 301 (aumentos) |
| Ajuste por IS — disminución | 302 (disminuciones) |
| Ajustes por diferencias permanentes — aumentos | 303, 305 … |
| Ajustes por diferencias permanentes — disminuciones | 304, 306 … |
| Ajustes por diferencias temporarias (origen) — aumento | 307 |
| Ajustes por diferencias temporarias (reversión) — disminución | 308 |
| Total aumentos al resultado contable | 417 (suma de aumentos) |
| Total disminuciones al resultado contable | 418 (suma de disminuciones) |
| Base imponible antes de aplicación de la reserva de capitalización | 550 |
| Reserva de capitalización (reducción) | 1032 |
| Base imponible antes de compensación de BINs | 551 |
| Compensación de bases imponibles negativas de períodos anteriores | 547 |
| Base imponible | 552 |
| Tipo de gravamen (%) | 558 |
| Cuota íntegra | 562 |
| Deducciones por doble imposición | 570/571 … |
| Bonificaciones | 567 … |
| Cuota íntegra ajustada positiva | 582 |
| Deducciones para incentivar determinadas actividades | 588 |
| Cuota líquida positiva | 592 |
| Retenciones e ingresos a cuenta | 595 |
| Pagos fraccionados (Modelo 202) | 599 |
| Cuota diferencial | 611 |
| Incremento por pérdida de beneficios fiscales / intereses de demora | 612/613 |
| Líquido a ingresar o a devolver | 621 |
Boxes with no data are omitted. The casilla numbers follow the current official Modelo 200; several have shifted across recent exercises — confirm the active layout.
Output structure
Modelo200 (JSON object)
├── identificacion (nif, razonSocial, ejercicio, periodoImpositivo)
├── resultadoContable
│ └── casilla500 (resultado de pérdidas y ganancias)
├── ajustesExtracontables
│ ├── aumentos (301/303/305/307…) → total 417
│ ├── disminuciones (302/304/306/308…) → total 418
│ └── reservaCapitalizacion (1032)
├── baseImponible
│ ├── baseAntesCompensacion (551)
│ ├── compensacionBINs (547)
│ └── casilla552 (base imponible)
├── liquidacion
│ ├── tipoGravamen (558)
│ ├── cuotaIntegra (562)
│ ├── deduccionesBonificaciones (567/570/588…)
│ ├── cuotaLiquida (592)
│ ├── retenciones (595)
│ ├── pagosFraccionados (599)
│ ├── cuotaDiferencial (611)
│ └── liquidoIngresarDevolver (621)
└── reconciliacionCuentasAnuales (resultadoPyG, vínculo con depósito de cuentas)
Mandatory: identificacion, casilla500, casilla552, tipoGravamen, cuotaIntegra, cuotaLiquida, and liquidoIngresarDevolver.
Code tables
Tipo de gravamen (casilla 558)
| Tipo | Aplica a |
|---|---|
25 |
Tipo general |
23 |
Entidades de reducida dimensión con cifra de negocios < €1.000.000 (reducido) |
15 |
Entidades de nueva creación (primer período con base positiva y el siguiente) |
20 |
Cooperativas fiscalmente protegidas (resultado cooperativo) |
30 |
Entidades de crédito y de hidrocarburos |
10 |
Entidades sin fines lucrativos (Ley 49/2002) |
1 |
SOCIMI / determinadas instituciones de inversión colectiva |
Tipo de ajuste extracontable
| Tipo | Efecto sobre el resultado |
|---|---|
| Permanente — aumento | Suma a la base, sin reversión futura (p.ej. multas, gastos no deducibles) |
| Permanente — disminución | Resta de la base, sin reversión (p.ej. dividendos exentos art. 21) |
| Temporario — aumento (origen) | Suma ahora, revierte (resta) en ejercicios futuros (p.ej. amortización contable > fiscal) |
| Temporario — disminución (reversión) | Resta ahora por reversión de un ajuste temporario previo |
Resultado de la liquidación
| Valor | Casilla 621 | Significado |
|---|---|---|
a ingresar |
> 0 | Cuota a pagar a la AEAT |
a devolver |
< 0 | Devolución solicitada (exceso de retenciones / pagos fraccionados) |
cuota cero |
= 0 | Sin cuota diferencial |
Calculation rules
- Total aumentos (417) = Σ de todos los ajustes que aumentan el resultado (301, 303, 305, 307…).
- Total disminuciones (418) = Σ de todos los ajustes que disminuyen el resultado (302, 304, 306, 308…).
- Base imponible antes de compensación (551) =
500+417−418− reserva de capitalización (1032). - Base imponible (552) =
551− BINs compensadas (547). La compensación está limitada (regla general: 70 % de la base previa, con mínimo de €1.000.000 compensable en todo caso). - Cuota íntegra (562) =
552× tipo de gravamen (558) ÷ 100, 2 decimales. Si la base es negativa, cuota íntegra = 0 y la base negativa genera una BIN a compensar en el futuro. - Cuota líquida positiva (592) =
562− deducciones por doble imposición − bonificaciones − deducciones para incentivar actividades, sin que resulte negativa. - Cuota diferencial (611) =
592− retenciones e ingresos a cuenta (595) − pagos fraccionados (599). - Líquido a ingresar/devolver (621) =
611+ incrementos (pérdida de beneficios fiscales, intereses de demora) − deducciones por reinversión, etc. - Reconciliation: casilla
500debe coincidir con el resultado de la cuenta de pérdidas y ganancias de las cuentas anuales depositadas. Flag any divergence. Recompute every total; never copy a printed cuota. - Amounts in EUR, dot decimal, 2dp, no thousands separator.
Worked example (end-to-end)
Input — FY2025 corporate tax (pasted)
Sociedad: Tecnología Norte SL NIF: B12345678
Período impositivo: 01/01/2025 – 31/12/2025 (ejercicio 2025, presentado 2026)
Entidad de reducida dimensión.
De las cuentas anuales:
Resultado contable después de impuestos: 150.000,00 €
Gasto por Impuesto sobre Sociedades contabilizado: 50.000,00 €
Ajustes fiscales:
- Multa administrativa no deducible: +3.000,00 € (permanente, aumento)
- Dividendos exentos art. 21 LIS: −20.000,00 € (permanente, disminución)
Compensación de BIN de 2022: 10.000,00 €
Tipo de gravamen: 25 % (general)
Retenciones soportadas: 4.000,00 €
Pagos fraccionados (Modelo 202): 18.000,00 €
After extraction + normalization (intermediate)
casilla 500 (resultado contable) = 150000.00 + 50000.00 = 200000.00 (antes de impuestos)
Aumentos: IS contabilizado 50000.00 (301) + multa 3000.00 (303) = 53000.00 → casilla 417 = 53000.00
Wait — el IS contable ya está fuera del resultado antes de impuestos; aquí partimos del resultado ANTES de impuestos.
Ajuste IS (301) = 50000.00 (aumento, gasto IS no deducible) ; multa (303) = 3000.00
→ total aumentos (417) = 53000.00
Disminuciones: dividendos exentos (304) = 20000.00 → casilla 418 = 20000.00
Tomando casilla 500 como resultado contable ANTES de impuestos = 150000.00:
base antes compensación (551) = 150000.00 + 53000.00 − 20000.00 = 183000.00
Nota: si 500 fuese el resultado DESPUÉS de impuestos (200000−50000=150000), el ajuste 301 reincorpora el IS.
compensación BIN (547) = 10000.00
base imponible (552) = 183000.00 − 10000.00 = 173000.00
cuota íntegra (562) = 173000.00 × 25 % = 43250.00
cuota líquida (592) = 43250.00 (sin otras deducciones)
cuota diferencial (611) = 43250.00 − 4000.00 (595) − 18000.00 (599) = 21250.00
líquido a ingresar (621) = 21250.00 → a ingresar
Output — Modelo 200 casillas (JSON)
{
"modelo": "200",
"identificacion": {
"nif": "B12345678",
"razonSocial": "Tecnología Norte SL",
"ejercicio": "2025",
"periodoImpositivo": { "inicio": "2025-01-01", "fin": "2025-12-31" }
},
"resultadoContable": {
"casilla500": 150000.00
},
"ajustesExtracontables": {
"aumentos": {
"casilla301": 50000.00,
"casilla303": 3000.00,
"casilla417": 53000.00
},
"disminuciones": {
"casilla304": 20000.00,
"casilla418": 20000.00
},
"reservaCapitalizacion": { "casilla1032": 0.00 }
},
"baseImponible": {
"casilla551": 183000.00,
"casilla547": 10000.00,
"casilla552": 173000.00
},
"liquidacion": {
"casilla558": 25,
"casilla562": 43250.00,
"casilla592": 43250.00,
"casilla595": 4000.00,
"casilla599": 18000.00,
"casilla611": 21250.00,
"casilla621": 21250.00,
"tipoResultado": "a ingresar"
},
"reconciliacionCuentasAnuales": {
"resultadoPyG": 150000.00,
"nota": "Casilla 500 debe coincidir con el resultado de la cuenta de pérdidas y ganancias de las cuentas anuales depositadas en el Registro Mercantil."
}
}
Normalisations shown: amounts 150.000,00 € → 150000.00 (dot decimal, 2dp); rate 25 % → tipo 25; the IS contabilizado reincorporated as a permanent aumento (casilla 301, 50000.00) and the multa as 303; dividendos exentos as disminución 304; base antes compensación recomputed 500 + 417 − 418 = 183000.00, base imponible 551 − 547 = 173000.00; cuota íntegra 173000.00 × 25 % = 43250.00; cuota diferencial 43250.00 − 4000.00 − 18000.00 = 21250.00 → a ingresar. Casilla 500 reconciles with the cuenta de pérdidas y ganancias of the cuentas anuales.
Validation checklist
- All figures and ajustes extracted; AI asked about anything missing or ambiguous (no invented ajustes, BINs, or NIF)
- Casilla
500reconciles with the resultado de la cuenta de pérdidas y ganancias of the cuentas anuales - Each ajuste classified correctly (permanente / temporario, aumento / disminución) and routed to its casilla
- Total aumentos (
417) and disminuciones (418) recomputed from the individual ajustes - Base antes de compensación (
551) =500+417−418− reserva de capitalización; recomputed - BIN compensation (
547) within the legal límite (70 % of prior base, €1.000.000 floor); base imponible (552) recomputed - Tipo de gravamen (
558) correct for the entity type; cuota íntegra (562) =552× tipo - Deducciones y bonificaciones applied without making cuota líquida (
592) negative - Cuota diferencial (
611) nets retenciones (595) and pagos fraccionados (599); líquido (621) recomputed -
tipoResultadoconsistent with sign of621(a ingresar / a devolver / cuota cero) - Amounts in EUR, dot decimal, 2dp, no thousands separator; JSON strictly valid
- Filed within 25 days after the 6 months following período-impositivo end (1–25 July for calendar-year companies)
Last updated: 2026-06-13 — verify the current Modelo 200 casilla layout, tipo de gravamen, BIN compensation limits, and filing deadline against the AEAT Impuesto sobre Sociedades specification before use.