Aplica deduccions de prorrata d’IVA

Fes servir aquesta guia quan el contribuent no pot deduir tot l’IVA suportat. Això passa quan l’activitat barreja operacions que atorguen el dret a deduir amb operacions que no (operacions exemptes sense dret a deduir). L’IVA espanyol ho anomena prorrata. Registra la tria de prorrata del contribuent una vegada i l’eina l’aplica automàticament al Modelo 303 i al Modelo 390.

Cadrumo no presenta res a l’AEAT. El registre de prorrata és un estat del contribuent local i limitat al perfil, no una superfície de presentació de l’AEAT.

L’eina necessita una contrasenya de clau mestra i la demana.

Requisit: un perfil de contribuent vàlid. Crea’n un amb aeat config profile create <name> abans de començar. Configura el teu perfil de contribuent t’hi guia.

Quina prorrata aplica

  • Prorrata general (LIVA art. 104): un únic percentatge de deducció s’aplica a cada input deduïble de l’any. Fes-la servir quan el contribuent no tingui cap motiu per separar els inputs.

  • Prorrata especial (LIVA art. 103): cada input dedueix segons el seu propi ús. Els inputs plenament deduïbles dedueixen la totalitat, els inputs utilitzats només per a operacions que no dedueixen no dedueixen res, i els inputs compartits («comuns») dedueixen al percentatge general. Etiqueta cada input amb el seu ús.

Si no optes per res, l’eina manté el tractament general de tota l’entitat que la seva pròpia liquidació ja produeix. Fes servir aquesta guia només quan el contribuent opta per un percentatge o divideix el negoci en sectors diferenciats.

Opta per la prorrata general

Opta pel percentatge general de l’any:

1Elect the year's general deduction percentage.
aeat --format json app ledger prorrata elect-general --ejercicio 2026 --percentage 80 \
  --provenance inicio_actividad --reference propuesta-inicio-2026
aeat --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.

  • --ejercicio és l’any de presentació que cobreix l’opció.

  • --percentage és el percentatge de deducció provisional, de 0 a 100 (LIVA art. 104.Uno + 105.Uno).

  • --provenance i --reference identifiquen el document en què es basa el percentatge: inicio_actividad per a una proposta d’inici d’activitat (LIVA art. 105.Tres) o aeat_autorizada per a un percentatge autoritzat per l’AEAT (LIVA art. 105.Dos). L’eina rebutja un percentatge introduït a mà sense tots dos.

  • Per traslladar el percentatge definitiu de l’any anterior (LIVA art. 105.Uno), executa en lloc d’això aeat app ledger prorrata seed --ejercicio <year>. Llegeix el percentatge de la liquidació del Modelo 303 de l’any anterior ja presentada.

Opta per la prorrata especial i classifica els inputs

Opta per l’especial per a l’any:

1Elect especial prorrata for the year.
aeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 \
  --provenance inicio_actividad --reference propuesta-inicio-2026
aeat --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 és el percentatge d’ús comú, el tipus aplicat als inputs compartits (LIVA art. 106.Uno regla 3.ª / art. 104.Dos). S’apliquen les mateixes opcions --provenance i --reference.

Després etiqueta cada fila d’input amb el seu ús quan l’afegeixis:

1Tag a shared input with its common use as you add it.
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-input
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-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 pren un valor:

  • exclusively_deductible - l’input serveix només operacions que atorguen el dret a deduir; dedueix la totalitat.

  • exclusively_non_deductible - l’input serveix només operacions que no ho fan; no dedueix res.

  • common - l’input és compartit; dedueix al percentatge d’ús comú.

Si etiquetes un input però no optes per l’especial per a aquell any, l’eina adverteix que l’etiqueta és inert: l’input dedueix sota el percentatge general. Opta per l’especial perquè l’etiqueta tingui efecte.

Declara un sector diferenciat

Declara un sector diferenciat quan una part de l’activitat té el seu propi règim de deducció (LIVA arts. 9.1.c / 101):

1Declare a differentiated sector with its LIVA letra and activity code.
aeat --format json app ledger prorrata declare-sector --sector-id arrendamiento --letra \
  c --activity-code 6820
aeat --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-id és un id estable que referencien les entrades del registre i les files del ledger.

  • --letra és la letra de l’art. 9.1.c de la LIVA que fa que el sector sigui diferenciat: a, b, c o d.

  • --activity-code és un codi CNAE o IAE agrupat dins del sector. Repeteix-lo per a cada codi; indica’n almenys un.

Limita una opció a un sector amb --sector, i etiqueta el sector d’una fila amb --sector a ledger add:

1Scope the especial election to the differentiated sector.
aeat --format json app ledger prorrata elect-especial --ejercicio 2026 --percentage 80 \
  --provenance inicio_actividad --reference propuesta-inicio-2026 --sector arrendamiento
aeat --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"
}
2Tag a row's sector as you add it.
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-input
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-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 etiquetes una fila amb un sector que no has declarat, l’eina adverteix que l’etiqueta no té correspondència: l’input dedueix al percentatge d’ús comú fins que declares el sector. Declara el sector primer, o corregeix l’id.

Llegeix els advertiments de la liquidació

Quan calcules el Modelo 303 de tancament d’exercici (la liquidació del 4T), l’eina pot mostrar advertiments no bloquejadors:

  • L’especial pot ser obligatòria - quan el contribuent calcula sota la prorrata general i l’especial deduiria almenys un 10% menys, la llei (LIVA art. 103.Dos.2) fa que l’especial sigui obligatòria. Classifica cada input de l’any perquè l’eina pugui fer aquesta comprovació; fins llavors et demana que classifiquis.

  • Classificació inert - una etiqueta --input-classification establerta sense cap opció d’especial per a aquell any.

  • Sector sense correspondència - una etiqueta --sector que anomena un sector encara no declarat.

Aquests són advertiments, no refusos. Llegeix-los juntament amb les entrades de càlcul abans de verificar la presentació.

Revisa el registre

Llista cada opció i cada sector declarat al perfil actiu:

1List every prorrata election and declared sector.
aeat --format json app ledger prorrata list
aeat --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.

Passos següents