Aplica deducciones de IVA por prorrata¶
Usa esta guía cuando el contribuyente no pueda deducir todo el IVA soportado. Esto ocurre cuando la actividad combina operaciones que dan derecho a deducir con operaciones que no lo dan (operaciones exentas sin derecho a deducir). El IVA español lo llama prorrata. Registra una sola vez la opción de prorrata del contribuyente y la herramienta la aplica automáticamente al Modelo 303 y al Modelo 390.
Cadrumo no presenta nada ante la AEAT. El registro de prorrata es un estado local del contribuyente, delimitado por el perfil, no una superficie de presentación ante la AEAT.
La herramienta necesita una frase de contraseña de la clave maestra y la solicita.
Requisito: un perfil de contribuyente válido. Crea uno con aeat config profile create <name> antes de empezar. Configura tu perfil de contribuyente lo explica paso a paso.
Qué prorrata se aplica¶
Prorrata general (LIVA art. 104): un único porcentaje de deducción se aplica a todo el IVA soportado deducible del año. Úsala cuando el contribuyente no tenga motivo para separar el IVA soportado.
Prorrata especial (LIVA art. 103): cada IVA soportado se deduce según su uso. El IVA soportado íntegramente deducible se deduce por completo, el usado solo para operaciones sin derecho a deducir no se deduce, y el compartido («común») se deduce al porcentaje general. Etiqueta cada IVA soportado con su uso.
Si no eliges nada, la herramienta mantiene el tratamiento general de toda la entidad que tu propia liquidación ya produce. Usa esta guía solo cuando el contribuyente elija un porcentaje o divida el negocio en sectores diferenciados.
Elige la prorrata general¶
Elige el porcentaje general del año:
aeat --format json app ledger prorrata elect-general --ejercicio 2026 --percentage 80 \
--provenance inicio_actividad --reference propuesta-inicio-2026aeat --format json app ledger prorrata elect-general --ejercicio 2026 --percentage 80 `
--provenance inicio_actividad --reference propuesta-inicio-2026{ "active_profile": "docs-sequence-sandbox", "command": "ledger.prorrata.elect_general", "notices": [], "result": { "bucket_id": "<bucket-id>", "count": 1, "entry": { "authorisation_reference": "propuesta-inicio-2026", "definitive_percentage": null, "definitive_volume_con_derecho": null, "definitive_volume_sin_derecho": null, "ejercicio": 2026, "especial_transition": null, "interrupted": false, "provisional_percentage": "80", "provisional_provenance": "inicio_actividad", "regime": "general", "schema_version": "2", "sector_id": null, "source_observation_ref": null, "source_registry_snapshot_refs": [] } }, "schema_version": "2", "status": "success" }
Confirm the general election is recorded on the profile.
--ejercicioes el ejercicio de presentación que cubre la elección.--percentagees el porcentaje de deducción provisional, de 0 a 100 (LIVA art. 104.Uno + 105.Uno).--provenancey--referenceidentifican el documento en el que se basa el porcentaje:inicio_actividadpara una propuesta de inicio de actividad (LIVA art. 105.Tres) oaeat_autorizadapara un porcentaje autorizado por la AEAT (LIVA art. 105.Dos). La herramienta rechaza un porcentaje introducido a mano sin ambos.Para trasladar el porcentaje definitivo del año anterior (LIVA art. 105.Uno), ejecuta en su lugar
aeat app ledger prorrata seed --ejercicio <year>. Lee el porcentaje de la liquidación del Modelo 303 del año anterior ya presentada.
Elige la prorrata especial y clasifica el IVA soportado¶
Elige la especial para el año:
aeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 \
--provenance inicio_actividad --reference propuesta-inicio-2026aeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 `
--provenance inicio_actividad --reference propuesta-inicio-2026{ "active_profile": "docs-sequence-sandbox", "command": "ledger.prorrata.elect_especial", "notices": [], "result": { "bucket_id": "<bucket-id>", "count": 1, "entry": { "authorisation_reference": "propuesta-inicio-2026", "definitive_percentage": null, "definitive_volume_con_derecho": null, "definitive_volume_sin_derecho": null, "ejercicio": 2026, "especial_transition": null, "interrupted": false, "provisional_percentage": "80", "provisional_provenance": "inicio_actividad", "regime": "especial", "schema_version": "2", "sector_id": null, "source_observation_ref": null, "source_registry_snapshot_refs": [] } }, "schema_version": "2", "status": "success" }
Confirm the especial election replaces the general one for the year.
Aquí --percentage es el porcentaje de uso común, el tipo aplicado al IVA soportado compartido (LIVA art. 106.Uno regla 3.ª / art. 104.Dos). Se aplican las mismas opciones --provenance y --reference.
Después, etiqueta cada fila de IVA soportado con su uso al añadirla:
aeat --format json app ledger add --date 2026-02-11 --amount 605 --direction OUTGOING \
--description compra --classification BUSINESS --category-id material_oficina \
--taxable-base 500 --iva-rate 0.21 --iva-amount 105 --input-classification common \
--idempotency-key prorrata-common-inputaeat --format json app ledger add --date 2026-02-11 --amount 605 --direction OUTGOING `
--description compra --classification BUSINESS --category-id material_oficina `
--taxable-base 500 --iva-rate 0.21 --iva-amount 105 --input-classification common `
--idempotency-key prorrata-common-input{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [ { "action": null, "code": "ledger.add.input_classification_inert", "context": { "ejercicio": "2026", "input_classification": "common", "sector_id": "" }, "message": "Input classification has no effect for ejercicio 2026: no special-prorrata election applies, so the input is deducted at the general percentage. Classification becomes operative only while a special-prorrata election applies.", "severity": "warning" } ], "result": { "bucket_event_ids": [ "caeb65ecf05baa47a01e14e67564264feceb179baf2127ff75c9c63cade1a86b" ], "bucket_id": "<bucket-id>", "review_status": "reviewed", "transaction": { "amount": "605", "attachment_ids": [], "booked_date": "2026-02-11", "business_classification": "BUSINESS", "business_pct": null, "category_id": "material_oficina", "classification_confidence": "1", "classification_reason": "aeat app ledger add", "classified_at": "2026-04-01T09:00:00+00:00", "classified_by": "manual", "counterparty": "", "counterparty_country": null, "counterparty_identification_state": null, "created_at": "2026-04-01T09:00:00+00:00", "currency": "EUR", "date": "2026-02-11", "description": "compra", "direction": "OUTGOING", "fx_rate": null, "invoice_id": null, "irpf_category": null, "iva_amount": "105", "iva_category": null, "iva_rate": "0.21", "lifecycle_state": "ACTIVE", "m210_income_classification": null, "modified_at": "2026-04-01T09:00:00+00:00", "notes": "", "prorrata_reference": null, "purchase_invoice_evidence_id": null, "source_jurisdiction": "ES", "taxable_base": "500", "transaction_id": "dbdbdfd18bb421c017e1f8516129455f2780b9062f3c33f0c67acadfbfebca31", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "dbdbdfd18bb421c017e1f8516129455f2780b9062f3c33f0c67acadfbfebca31" }, "schema_version": "2", "status": "warning" }
Confirm the tagged common input is recorded in the ledger.
--input-classification toma un valor:
exclusively_deductible: el IVA soportado sirve solo a operaciones que dan derecho a deducir; se deduce por completo.exclusively_non_deductible: el IVA soportado sirve solo a operaciones que no dan ese derecho; no se deduce nada.common: el IVA soportado es compartido; se deduce al porcentaje de uso común.
Si etiqueta un IVA soportado pero no elige la especial para ese año, la herramienta avisa de que la etiqueta es inerte: el IVA soportado se deduce al porcentaje general. Elige la especial para que la etiqueta surta efecto.
Declara un sector diferenciado¶
Declara un sector diferenciado cuando parte de la actividad tenga su propio régimen de deducción (LIVA arts. 9.1.c / 101):
aeat --format json app ledger prorrata declare-sector --sector-id arrendamiento --letra \
c --activity-code 6820aeat --format json app ledger prorrata declare-sector --sector-id arrendamiento --letra `
c --activity-code 6820{ "active_profile": "docs-sequence-sandbox", "command": "ledger.prorrata.declare_sector", "notices": [], "result": { "bucket_id": "<bucket-id>", "count": 1, "sector": { "letra": "c", "member_activity_codes": [ "6820" ], "sector_id": "arrendamiento" } }, "schema_version": "2", "status": "success" }
Confirm the differentiated sector is registered.
--sector-ides un id estable al que se refieren las entradas del registro y las filas del ledger.--letraes la letra del art. 9.1.c de la LIVA que hace diferenciado al sector:a,b,cod.--activity-codees un código CNAE o IAE agrupado en el sector. Repítelo por cada código; indica al menos uno.
Delimita una elección a un sector con --sector, y etiqueta el sector de una fila con --sector en ledger add:
aeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 \
--provenance inicio_actividad --reference propuesta-inicio-2026 --sector arrendamientoaeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 `
--provenance inicio_actividad --reference propuesta-inicio-2026 --sector arrendamiento{ "active_profile": "docs-sequence-sandbox", "command": "ledger.prorrata.elect_especial", "notices": [], "result": { "bucket_id": "<bucket-id>", "count": 1, "entry": { "authorisation_reference": "propuesta-inicio-2026", "definitive_percentage": null, "definitive_volume_con_derecho": null, "definitive_volume_sin_derecho": null, "ejercicio": 2026, "especial_transition": null, "interrupted": false, "provisional_percentage": "80", "provisional_provenance": "inicio_actividad", "regime": "especial", "schema_version": "2", "sector_id": "arrendamiento", "source_observation_ref": null, "source_registry_snapshot_refs": [] } }, "schema_version": "2", "status": "success" }
aeat --format json app ledger add --date 2026-02-11 --amount 605 --direction OUTGOING \
--description compra --classification BUSINESS --category-id material_oficina \
--taxable-base 500 --iva-rate 0.21 --iva-amount 105 --sector arrendamiento \
--input-classification common --idempotency-key prorrata-sector-inputaeat --format json app ledger add --date 2026-02-11 --amount 605 --direction OUTGOING `
--description compra --classification BUSINESS --category-id material_oficina `
--taxable-base 500 --iva-rate 0.21 --iva-amount 105 --sector arrendamiento `
--input-classification common --idempotency-key prorrata-sector-input{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [ { "action": null, "code": "ledger.add.sector_unmatched", "context": { "sector_id": "arrendamiento" }, "message": "--sector 'arrendamiento' matches no declared differentiated sector (LIVA arts. 9.1.c / 101), so this input is deducted at the common-use percentage rather than the sector percentage. The sector must exist before it can own the input.", "severity": "warning" } ], "result": { "bucket_event_ids": [ "67462ff662ec83321d22d1ffcea235d9241320bf43f5e10ec61a0162eb1883ca" ], "bucket_id": "<bucket-id>", "review_status": "reviewed", "transaction": { "amount": "605", "attachment_ids": [], "booked_date": "2026-02-11", "business_classification": "BUSINESS", "business_pct": null, "category_id": "material_oficina", "classification_confidence": "1", "classification_reason": "aeat app ledger add", "classified_at": "2026-04-01T09:00:00+00:00", "classified_by": "manual", "counterparty": "", "counterparty_country": null, "counterparty_identification_state": null, "created_at": "2026-04-01T09:00:00+00:00", "currency": "EUR", "date": "2026-02-11", "description": "compra", "direction": "OUTGOING", "fx_rate": null, "invoice_id": null, "irpf_category": null, "iva_amount": "105", "iva_category": null, "iva_rate": "0.21", "lifecycle_state": "ACTIVE", "m210_income_classification": null, "modified_at": "2026-04-01T09:00:00+00:00", "notes": "", "prorrata_reference": null, "purchase_invoice_evidence_id": null, "source_jurisdiction": "ES", "taxable_base": "500", "transaction_id": "61875c80c3fc4eae14b9b58d1b245b46ccb6b7c8a2ae28ec1b013f626aded2c9", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "61875c80c3fc4eae14b9b58d1b245b46ccb6b7c8a2ae28ec1b013f626aded2c9" }, "schema_version": "2", "status": "warning" }
Confirm the sector-scoped input is recorded against the declared sector.
Si etiqueta una fila con un sector que no ha declarado, la herramienta avisa de que la etiqueta no tiene correspondencia: el IVA soportado se deduce al porcentaje de uso común hasta que declare el sector. Declara primero el sector, o corrige el id.
Lee los avisos de la liquidación¶
Cuando calcula el Modelo 303 de fin de año (la liquidación del 4T), la herramienta puede mostrar avisos no bloqueantes:
La especial puede ser obligatoria: cuando el contribuyente calcula en prorrata general y la especial deduciría al menos un 10 % menos, la ley (LIVA art. 103.Dos.2) hace obligatoria la especial. Clasifica todo el IVA soportado del año para que la herramienta pueda ejecutar esta comprobación; hasta entonces, le pide que lo clasifique.
Clasificación inerte: una etiqueta
--input-classificationestablecida sin elección de la especial para ese año.Sector sin correspondencia: una etiqueta
--sectorque nombra un sector aún no declarado.
Estos son avisos, no rechazos. Léalos junto con las entradas de cálculo antes de verificar la presentación.
Revisa el registro¶
Lista todas las elecciones y los sectores declarados del perfil activo:
aeat --format json app ledger prorrata listaeat --format json app ledger prorrata list{ "active_profile": "docs-sequence-sandbox", "command": "ledger.prorrata.list", "notices": [], "result": { "bucket_id": "<bucket-id>", "count": 1, "entries": [ { "authorisation_reference": "propuesta-inicio-2026", "definitive_percentage": null, "definitive_volume_con_derecho": null, "definitive_volume_sin_derecho": null, "ejercicio": 2026, "especial_transition": null, "interrupted": false, "provisional_percentage": "80", "provisional_provenance": "inicio_actividad", "regime": "general", "schema_version": "2", "sector_id": null, "source_observation_ref": null, "source_registry_snapshot_refs": [] } ], "sectors": [ { "letra": "c", "member_activity_codes": [ "6820" ], "sector_id": "arrendamiento" } ] }, "schema_version": "2", "status": "success" }
Confirm the register reads back the elections and declared sector.
Pasos siguientes¶
Clasifica los movimientos para que cada IVA soportado lleve los datos que la prorrata necesita.
Revisa las entradas de cálculo para ver los importes deducidos.
Prepara una presentación de IVA con el Modelo 303 y el resumen anual del Modelo 390.