Prepare your first quarterly IRPF filing¶
This page covers your first quarterly Modelo 130 filing, end to end: bring a quarter of transactions into the ledger, classify them as business income and deductible expenses, prepare the draft, and check that it passed verification before you file it. It is written for a self-employed taxpayer with a NIF, CIF, NIE, or other filing identity who is running Cadrumo for the first time.
Cadrumo never submits a return to the Agencia Estatal de Administración Tributaria (AEAT). It produces the Modelo 130 fichero-BOE artefact locally; you present that file through the official AEAT channel.
The commands on this page run live at build time in a fresh, synthetic sandbox. The transactions, amounts, and taxpayer are invented. Run the same commands against your own profile to see your own figures.
Requirement: a valid taxpayer profile. Create one with
aeat config profile create <name> before you start. Set up your
profile walks through it step by step.
Bring your quarter’s transactions in¶
Import your bank statement for the quarter. This example reads a small comma-separated statement with two movements: one payment collected from a client, and one office-supplies purchase.
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csvaeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csvRows 2 Entries imported 2 Skipped 0
aeat --format json app ledger list --year 2026 --period 1Taeat --format json app ledger list --year 2026 --period 1T{ "active_profile": "docs-sequence-sandbox", "command": "ledger.list", "notices": [], "result": { "bucket_id": "<bucket-id>", "limit": null, "offset": 0, "rows": [ { "amount": "1210", "attachment_ids": [], "booked_date": "2026-02-10", "business_classification": "NOT_YET_PROCESSED", "business_pct": null, "category_id": null, "classification_confidence": null, "classification_reason": "", "classified_at": null, "classified_by": "auto", "counterparty": "", "counterparty_country": null, "counterparty_identification_state": null, "created_at": "2026-04-01T09:00:00+00:00", "currency": "EUR", "date": "2026-02-10", "description": "Cobro factura F-2026-001 servicios de consultoria", "direction": "INCOMING", "display_id": "71a5db2b", "full_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518", "fx_rate": null, "group_label": null, "invoice_id": null, "irpf_category": null, "iva_amount": null, "iva_category": null, "iva_rate": null, "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, "review_status": "pending", "source_jurisdiction": null, "taxable_base": null, "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518", "usage_ratio_id": null, "value_date": "2026-02-10", "value_in_eur": null }, { "amount": "605", "attachment_ids": [], "booked_date": "2026-02-11", "business_classification": "NOT_YET_PROCESSED", "business_pct": null, "category_id": null, "classification_confidence": null, "classification_reason": "", "classified_at": null, "classified_by": "auto", "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 de material de oficina proveedor local", "direction": "OUTGOING", "display_id": "e3eeac5e", "full_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d", "fx_rate": null, "group_label": null, "invoice_id": null, "irpf_category": null, "iva_amount": null, "iva_category": null, "iva_rate": null, "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, "review_status": "pending", "source_jurisdiction": null, "taxable_base": null, "transaction_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d", "usage_ratio_id": null, "value_date": "2026-02-11", "value_in_eur": null } ], "shown": 2, "total": 2, "truncated": false }, "schema_version": "2", "status": "success" }
Confirm both movements are now in the ledger.
The import reads the statement and stores each movement as a ledger row. The
listing confirms the two rows landed in the first quarter of 2026. Point
--provider at the format your bank exports; list the accepted providers with:
aeat app ledger import --helpaeat app ledger import --helpUsage: aeat app ledger import [OPTIONS]
Import bank statements or records into the accounting ledger
Options:
--file <path> Path to the bank statement file or directory
[required]
--provider <auto|csv|ofx|qfx|xlsx|excel|n26|pdf|pdf-n26>
Statement format provider. [required]
--dry-run Run the import in dry-run mode (without
saving)
--verify Verify entries after import
--verify-source <path> Original file used to verify imported rows.
--verbose Show detailed information during import
--period <str> Filing period as an AEAT token: 1T-4T
(quarters), 0A (annual), 01-12 (months).
Combine with --year to choose the year.
--year <int> Filing year for --period (e.g. 2024).
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to
copy it or customize the installation.
--help Show this message and exit.
Confirm the import command lists its accepted providers.
Classify each transaction¶
An imported row carries a date and an amount, but it does not yet say how the tax calculation should treat it. Classify each row before you calculate.
Mark the collected payment as business income and the purchase as a deductible business expense with a category. Take each transaction id from the listing above. The income classification takes only the business decision:
aeat --format json app ledger classify 71a5db2b --classification BUSINESSaeat --format json app ledger classify 71a5db2b --classification BUSINESS{ "active_profile": "docs-sequence-sandbox", "command": "ledger.classify", "notices": [], "result": { "bucket_event_ids": [ "59813ece53d01035dac79cf9a8fc8cf9cd8928359b15b5d910766dbbc15948f8" ], "bucket_id": "<bucket-id>", "review_status": "reviewed", "transaction": { "amount": "1210", "attachment_ids": [], "booked_date": "2026-02-10", "business_classification": "BUSINESS", "business_pct": null, "category_id": null, "classification_confidence": "1", "classification_reason": "aeat app ledger classify", "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-10", "description": "Cobro factura F-2026-001 servicios de consultoria", "direction": "INCOMING", "fx_rate": null, "invoice_id": null, "irpf_category": null, "iva_amount": null, "iva_category": null, "iva_rate": null, "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": null, "taxable_base": null, "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518", "usage_ratio_id": null, "value_date": "2026-02-10", "value_in_eur": null }, "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518" }, "schema_version": "2", "status": "success" }
Confirm the collected payment is classified as business income.
For an expense, add --category-id <category-id> plus the taxable base and
IVA fields. List the accepted categories any time:
aeat --format json app ledger categoriesaeat --format json app ledger categories{ "active_profile": "docs-sequence-sandbox", "command": "ledger.categories", "notices": [], "result": { "category_ids": [ "cuotas_colegiales", "cuotas_autonomos_ss", "mutualidad_alternativa", "arrendamiento_local", "arrendamiento_vivienda_afecto", "ibi_local_afecto", "suministros_local_afecto", "suministros_home_office_luz", "suministros_home_office_agua", "suministros_home_office_gas", "suministros_home_office_internet", "amortizacion_vivienda_afecto", "ibi_vivienda_afecto", "comunidad_vivienda_afecto", "telefonia_movil", "telefonia_fija", "material_oficina", "software_suscripcion", "hardware_amortizable", "mobiliario_amortizable", "reparaciones_conservacion", "vehiculo_combustible", "vehiculo_mantenimiento", "vehiculo_seguro", "vehiculo_peaje", "vehiculo_parking", "manutencion_dietas_nacional", "manutencion_dietas_extranjero", "asesoria_fiscal", "asesoria_juridica", "asesoria_contable", "publicidad_marketing", "formacion_profesional", "viajes_transporte", "viajes_alojamiento", "seguros_responsabilidad_civil", "seguros_salud_autonomo", "gastos_bancarios", "gastos_financieros", "suministros_cliente_directos", "subcontratacion", "tributos_fiscalmente_deducibles" ], "families": [ { "category_ids": [ "cuotas_colegiales", "cuotas_autonomos_ss", "mutualidad_alternativa" ], "family": "social_security" }, { "category_ids": [ "arrendamiento_local", "ibi_local_afecto", "suministros_local_afecto" ], "family": "premises" }, { "category_ids": [ "suministros_home_office_luz", "suministros_home_office_agua", "suministros_home_office_gas", "suministros_home_office_internet", "telefonia_fija" ], "family": "home_office_suministros" }, { "category_ids": [ "amortizacion_vivienda_afecto", "ibi_vivienda_afecto", "comunidad_vivienda_afecto", "arrendamiento_vivienda_afecto" ], "family": "home_office_ownership" }, { "category_ids": [ "telefonia_movil" ], "family": "telecoms" }, { "category_ids": [ "material_oficina", "software_suscripcion", "hardware_amortizable", "mobiliario_amortizable", "reparaciones_conservacion", "publicidad_marketing", "formacion_profesional" ], "family": "office" }, { "category_ids": [ "vehiculo_combustible", "vehiculo_mantenimiento", "vehiculo_seguro", "vehiculo_peaje", "vehiculo_parking" ], "family": "vehicle" }, { "category_ids": [ "manutencion_dietas_nacional", "manutencion_dietas_extranjero" ], "family": "meals" }, { "category_ids": [ "asesoria_fiscal", "asesoria_juridica", "asesoria_contable" ], "family": "professional_services" }, { "category_ids": [ "viajes_transporte", "viajes_alojamiento" ], "family": "travel" }, { "category_ids": [ "seguros_responsabilidad_civil", "seguros_salud_autonomo" ], "family": "insurance" }, { "category_ids": [ "gastos_bancarios", "gastos_financieros" ], "family": "financial" }, { "category_ids": [ "suministros_cliente_directos", "subcontratacion" ], "family": "direct_costs" }, { "category_ids": [ "tributos_fiscalmente_deducibles" ], "family": "taxes" } ], "income_requires_category": false, "irpf_categories": [ { "directions": [ "INCOMING", "OUTGOING" ], "id": "actividad_economica", "net_paid_invoice": true, "purpose": "activity_income_withholding", "related_category_ids": [ "asesoria_contable", "asesoria_fiscal", "asesoria_juridica" ] }, { "directions": [ "OUTGOING" ], "id": "arrendamiento_local", "net_paid_invoice": true, "purpose": "rent_expense_withholding", "related_category_ids": [ "arrendamiento_local" ] }, { "directions": [ "OUTGOING" ], "id": "arrendamiento_vivienda_afecto", "net_paid_invoice": true, "purpose": "rent_expense_withholding", "related_category_ids": [ "arrendamiento_vivienda_afecto" ] }, { "directions": [ "INCOMING" ], "id": "trabajo", "net_paid_invoice": false, "purpose": "employment_income", "related_category_ids": [] } ], "irpf_category_ids": [ "actividad_economica", "arrendamiento_local", "arrendamiento_vivienda_afecto", "trabajo" ], "net_paid_withholding_irpf_category_ids": [ "actividad_economica", "arrendamiento_local", "arrendamiento_vivienda_afecto" ] }, "schema_version": "2", "status": "success" }
Confirm the accepted expense categories read back.
For the full classification workflow (bulk classification, mixed-use shares, and the review queue), read Classify transactions.
Prepare the Modelo 130 draft¶
Once the quarter’s rows are classified, prepare the instalment. The preparation below sets up a self-employed profile and a classified ledger, then creates the draft, calculates it, and verifies it. Modelo 130 is the IRPF payment on account for self-employed activity under estimación directa.
aeat --format json app modelo work create --modelo 130 --year 2026 --period 1Taeat --format json app modelo work create --modelo 130 --year 2026 --period 1T{ "active_profile": "docs-sequence-sandbox", "command": "modelo.work.create", "notices": [], "result": { "applicability_guard_bypassed": false, "bucket_id": "<bucket-id>", "causante_ccaa": null, "created_at": "2026-04-01T09:00:00+00:00", "current_calculation_revision_id": null, "current_filing_record_id": null, "discard_reason": null, "discarded_at": null, "discarded_by": null, "filed_calculation_revision_id": null, "filing_year": 2026, "modelo": "130", "name": "130-2026-1T", "name_applied": null, "operation": "modelo.work.create", "period": { "code": "1T", "filing_year": 2026 }, "revision_id": "2019-y-siguientes", "short_current_calculation_revision_id": null, "short_filed_calculation_revision_id": null, "short_work_unit_id": "3d88172f4204", "state": "borrador", "status": "created", "status_message": "New work unit created.", "updated_at": "2026-04-01T09:00:00+00:00", "work_unit_id": "ca5815c72d1ed564e582924ad157fd1c3349eba45264da2a7b843d88172f4204" }, "schema_version": "2", "status": "success" }
aeat --format json app modelo work calculate {work_unit_id} --binding \
modelo-130-resultados-negativos-anteriores=0 --binding \
modelo-130-pagos-fraccionados-anteriores=0 --binding \
irpf.previous_year_economic_activity_net_income=0aeat --format json app modelo work calculate {work_unit_id} --binding `
modelo-130-resultados-negativos-anteriores=0 --binding `
modelo-130-pagos-fraccionados-anteriores=0 --binding `
irpf.previous_year_economic_activity_net_income=0{ "active_profile": "docs-sequence-sandbox", "command": "modelo.work.calculate", "notices": [], "result": { "authorization_state": null, "binding_overrides": { "irpf.previous_year_economic_activity_net_income": "0", "modelo-130-actividad-economica-gastos-cumulative": "500", "modelo-130-actividad-economica-ingresos-cumulative": "1000", "modelo-130-actividad-economica-ingresos-taxable-base-cumulative": "1000", "modelo-130-actividad-economica-rendimiento-neto-cumulative": "1000", "modelo-130-actividad-economica-retenciones-cumulative": "0", "modelo-130-pagos-fraccionados-anteriores": "0", "modelo-130-resultados-negativos-anteriores": "0" }, "calculation_revision_id": "07d9ed8eec846976eac02aeae13217e835e000f8a460d053909b33d9a3995fec", "casilla_values": { "01": "1000", "02": "500", "03": "500.00", "04": "100.00", "05": "0", "06": "0", "07": "100.00", "08": "0", "09": "0.00", "10": "0", "11": "0.00", "12": "100.00", "13": "100.00", "14": "0.00", "15": "0.00", "16": "0", "17": "0.00", "18": "0", "19": "0.00", "saldo-negativo-fin-periodo": "0.00" }, "created_at": "2026-04-01T09:00:00+00:00", "deadline": { "closes_on": "2026-04-20", "conditional_recargo_preview": null, "days_overdue": null, "days_remaining": 19 }, "detail_rows": [], "filed_at": null, "filed_by": null, "input_values_by_casilla_id": { "01": "1000", "02": "500", "05": "0", "06": "0" }, "modality": null, "modality_reason": null, "observations": [ { "absent_by_design": false, "casilla_id": "01", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95", "ley-35-2006:art-27", "ley-35-2006:art-28" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "1000" }, { "absent_by_design": false, "casilla_id": "02", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95", "ley-35-2006:art-28", "ley-35-2006:art-30" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "500" }, { "absent_by_design": false, "casilla_id": "03", "formula_id": "modelo-130-rendimiento-neto", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "01", "02" ], "operand_refs": [ "01", "02" ], "operand_values": [ "1000", "500" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "500.00" }, { "absent_by_design": false, "casilla_id": "04", "formula_id": "modelo-130-pago-fraccionado-directa", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "max", "operand_casilla_refs": [ "03" ], "operand_refs": [ "03", "irpf.direct_estimation_fractional_payment_rate" ], "operand_values": [ "500.00", "20" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "100.00" }, { "absent_by_design": false, "casilla_id": "05", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "06", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "07", "formula_id": "modelo-130-resultado-apartado-i", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "04", "05", "06" ], "operand_refs": [ "04", "05", "06" ], "operand_values": [ "100.00", "0", "0" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "100.00" }, { "absent_by_design": false, "casilla_id": "08", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "09", "formula_id": "modelo-130-pago-fraccionado-agrario", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "percent", "operand_casilla_refs": [ "08" ], "operand_refs": [ "08", "irpf.agriculture_fractional_payment_rate" ], "operand_values": [ "0", "2" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "10", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "11", "formula_id": "modelo-130-resultado-apartado-ii", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "09", "10" ], "operand_refs": [ "09", "10" ], "operand_values": [ "0.00", "0" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "12", "formula_id": "modelo-130-suma-parciales", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "max", "operand_casilla_refs": [ "07", "11" ], "operand_refs": [ "07", "11" ], "operand_values": [ "100.00", "0.00" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "100.00" }, { "absent_by_design": false, "casilla_id": "13", "formula_id": "modelo-130-minoracion-rendimientos-netos", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "if_then_else", "operand_casilla_refs": [], "operand_refs": [ "irpf.previous_year_economic_activity_net_income" ], "operand_values": [ "0" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "100.00" }, { "absent_by_design": false, "casilla_id": "14", "formula_id": "modelo-130-neto-tras-minoracion", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "12", "13" ], "operand_refs": [ "12", "13" ], "operand_values": [ "100.00", "100.00" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "15", "formula_id": "modelo-130-resultados-negativos-anteriores-cap", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "min", "operand_casilla_refs": [ "14" ], "operand_refs": [ "modelo-130-resultados-negativos-anteriores", "14" ], "operand_values": [ "0", "0.00" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "16", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "17", "formula_id": "modelo-130-diferencia", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "14", "15", "16" ], "operand_refs": [ "14", "15", "16" ], "operand_values": [ "0.00", "0.00", "0" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "18", "formula_id": null, "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": null, "operand_casilla_refs": [], "operand_refs": [], "operand_values": [], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0" }, { "absent_by_design": false, "casilla_id": "19", "formula_id": "modelo-130-resultado-final", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "subtract", "operand_casilla_refs": [ "17", "18" ], "operand_refs": [ "17", "18" ], "operand_values": [ "0.00", "0" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" }, { "absent_by_design": false, "casilla_id": "saldo-negativo-fin-periodo", "formula_id": "modelo-130-saldo-negativo-fin-periodo", "legal_refs": [ "rd-439-2007:art-110", "orden-eha-672-2007:art-1", "ley-35-2006:art-99", "rd-439-2007:art-95" ], "op": "max", "operand_casilla_refs": [ "17" ], "operand_refs": [ "17" ], "operand_values": [ "0.00" ], "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ], "value": "0.00" } ], "operation": "modelo.work.calculate", "registry_snapshot_ref": { "modelo": "130", "modelo_year": 2026, "period": "1T", "revision_id": "2019-y-siguientes" }, "relation_overrides": {}, "result_summary": [ { "casilla_id": "03", "label": "Net yield", "role": "key_figure", "value": "500.00" }, { "casilla_id": "04", "label": "Fractional payment amount", "role": "key_figure", "value": "100.00" }, { "casilla_id": "07", "label": "Partial result of Section I", "role": "key_figure", "value": "100.00" }, { "casilla_id": "09", "label": "Fractional payment amount", "role": "key_figure", "value": "0.00" }, { "casilla_id": "11", "label": "Partial result of Section II", "role": "key_figure", "value": "0.00" }, { "casilla_id": "12", "label": "Sum of partial results", "role": "key_figure", "value": "100.00" }, { "casilla_id": "13", "label": "Reduction for net yields", "role": "key_figure", "value": "100.00" }, { "casilla_id": "14", "label": "Net amount after reduction", "role": "key_figure", "value": "0.00" }, { "casilla_id": "17", "label": "Difference", "role": "key_figure", "value": "0.00" }, { "casilla_id": "19", "label": "Final result", "role": "key_figure", "value": "0.00" } ], "saved": true, "saved_confirmation": "Saved as draft calculation revision 07d9ed8eec846976eac02aeae13217e835e000f8a460d053909b33d9a3995fec (state: draft). It is persisted and can be resumed later.", "source_provenance": [ { "contributor_binding_source": "ledger_renta_income_aggregation", "contributor_source_kind": "ledger_renta_income_aggregation", "dependency_treatment": "", "fingerprint": null, "lineage_role": "primary", "parent_source_ref": null, "resolved_binding_source": "ledger_renta_income_aggregation", "resolver_id": "ledger_renta_income_aggregation", "source_ref": "transaction:71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518" }, { "contributor_binding_source": "ledger_renta_gastos_pago_fraccionado_aggregation", "contributor_source_kind": "ledger_renta_gastos_pago_fraccionado_aggregation", "dependency_treatment": "", "fingerprint": null, "lineage_role": "primary", "parent_source_ref": null, "resolved_binding_source": "ledger_renta_gastos_pago_fraccionado_aggregation", "resolver_id": "ledger_renta_gastos_pago_fraccionado_aggregation", "source_ref": "transaction:e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d" }, { "contributor_binding_source": "previous_filing", "contributor_source_kind": "previous_filing", "dependency_treatment": "factual_evidence", "fingerprint": null, "lineage_role": "primary", "parent_source_ref": null, "resolved_binding_source": "previous_filing", "resolver_id": "previous_filing", "source_ref": "100:2025:0A:irpf.previous_year_economic_activity_net_income" } ], "state": "borrador", "superseded_at": null, "updated_at": "2026-04-01T09:00:00+00:00", "verified_at": null, "verified_by": null, "work_unit_id": "ca5815c72d1ed564e582924ad157fd1c3349eba45264da2a7b843d88172f4204" }, "schema_version": "2", "status": "success" }
aeat --format json app modelo work verify {calculation_revision_id}aeat --format json app modelo work verify {calculation_revision_id}{ "active_profile": "docs-sequence-sandbox", "command": "modelo.work.verify", "notices": [ { "action": null, "code": "modelo.work.verify.finding.advisory", "context": { "activity_start_date": "2026-01-01", "kind": "advisory", "legal_refs": "rd-1065-2007:art-9", "origin_code": "previous_filing_binding", "severity": "warning", "source_filing_year": "2025", "source_modelo": "100", "source_period": "0A", "source_refs": "aeat-dr-130-2019-v12, aeat-modelo-130-instructions" }, "message": "Modelo 100 2025 0A is suppressed by operator declaration (previous_filing_binding), with declared activity start date 2026-01-01.", "severity": "warning" }, { "action": null, "code": "modelo.work.verify.finding.advisory", "context": { "binding_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518", "diagnostic_reason_code": "missing_transaction_evidence", "kind": "advisory", "legal_refs": "ley-37-1992:art-97, rd-1619-2012:art-2", "severity": "warning", "source_kind_code": "output_iva_evidence", "source_refs": "aeat-dr-130-2019-v12, aeat-modelo-130-instructions" }, "message": "An output transaction has no supporting evidence (binding 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518, source output_iva_evidence, reason missing_transaction_evidence).", "severity": "warning" } ], "result": { "calculation_revision_id": "07d9ed8eec846976eac02aeae13217e835e000f8a460d053909b33d9a3995fec", "completeness_status": "complete", "findings": [ { "action": null, "casilla_id": null, "expectation_id": null, "kind": "advisory", "legal_refs": [ "rd-1065-2007:art-9" ], "message": "Modelo 100 2025 0A is suppressed by operator declaration (previous_filing_binding), with declared activity start date 2026-01-01.", "severity": "warning", "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ] }, { "action": null, "casilla_id": null, "expectation_id": null, "kind": "advisory", "legal_refs": [ "ley-37-1992:art-97", "rd-1619-2012:art-2" ], "message": "An output transaction has no supporting evidence (binding 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518, source output_iva_evidence, reason missing_transaction_evidence).", "severity": "warning", "source_refs": [ "aeat-dr-130-2019-v12", "aeat-modelo-130-instructions" ] } ], "granted_verificado_completo": true, "missing_required_casilla_ids": [], "operation": "modelo.work.verify", "registry_snapshot_ref": { "modelo": "130", "modelo_year": 2026, "period": "1T", "revision_id": "2019-y-siguientes" }, "resolved_casilla_ids": [], "run_at": "2026-04-01T09:00:00+00:00", "verification_report_id": "475fedcde9467701a4a5f9a29274e4a6db03e03b6971e85112a4c911fe7f2f4f", "verified_by": "docs-sequence-sandbox" }, "schema_version": "2", "status": "warning" }
Confirm the draft passed verification before you file it.
Read the frames in order:
Create the draft for Modelo 130, first quarter 2026. The command reports a
work_unit_idthat addresses the draft.Calculate it. Cadrumo reads the classified ledger and fills the boxes: casilla
01is the quarter’s income, casilla02the deductible expenses, casilla03the net yield, and casilla04the instalment. Casilla 01 shows 1000.00, not the 1210.00 you collected: IVA is never part of your income, so the 210.00 of IVA is left out. With the example ledger the net yield is500.00and the instalment is100.00, twenty percent of the net. The three--binding ...=0values are the prior-period carries a true first quarter does not have.Verify the draft. The result reads
granted_verificado_completotrue, so the draft is complete and ready to file.
Check the figures and record the filing¶
The verification result is the signal that the draft is ready. Verification refuses until every deductible-expense row carries linked purchase-invoice evidence, so this example registers the supplier invoice and attaches it before it calculates. Attach in that order: a draft bundles its evidence when you verify it, so an invoice attached afterwards does not reach the filing.
The sequence below exports the verified draft and then records the local filed marker.
aeat --format json app modelo export --modelo 130 --year 2026 --period 1T --output \
./modelo-130.boeaeat --format json app modelo export --modelo 130 --year 2026 --period 1T --output `
./modelo-130.boe{ "active_profile": "docs-sequence-sandbox", "command": "modelo.export", "notices": [ { "action": null, "code": "modelo.export.local_export_not_official_evidence", "context": { "evidence_status": "local_export_not_official_aeat_filing_evidence", "filing_year": "2026", "modelo": "130", "period": "1T" }, "message": "The local export is not official filing evidence.", "severity": "warning" } ], "result": { "bucket_event_id": "3ff37989bdc94cfba48d032cd41b6f30e38e44375d3aded8bb46cd96f453832b", "bucket_id": "<bucket-id>", "byte_size": 946, "calculation_revision_id": "07d9ed8eec846976eac02aeae13217e835e000f8a460d053909b33d9a3995fec", "file_sha256": "eaf7e73156441acfec60519635ebea91a6a221f32b23b85a638b5219b8536c7d", "filing_year": 2026, "format": "fichero-boe", "modelo": "130", "operation": "modelo.export", "output_path": "modelo-130.boe", "payment_election": null, "period": { "code": "1T", "filing_year": 2026 }, "prior_domiciliation_election": { "baseline_evidence_reference_id": null, "baseline_filing_record_id": null, "baseline_result_disposition": null, "baseline_source_header_locator": null, "election": "keep" }, "refund_election": null, "resolved_result_disposition": "N", "work_unit_id": "ca5815c72d1ed564e582924ad157fd1c3349eba45264da2a7b843d88172f4204" }, "schema_version": "2", "status": "warning" }
aeat --format json app modelo work file --modelo 130 --year 2026 --period 1Taeat --format json app modelo work file --modelo 130 --year 2026 --period 1T{ "active_profile": "docs-sequence-sandbox", "command": "modelo.work.file", "notices": [], "result": { "aeat_accepted": false, "aeat_register": null, "amends_filing_record_id": null, "bucket_id": "<bucket-id>", "calculation_revision_id": "07d9ed8eec846976eac02aeae13217e835e000f8a460d053909b33d9a3995fec", "confirmation": "pendiente", "declaration_kind": "original", "external_evidence": null, "filed_at": "2026-04-01T09:00:00+00:00", "filed_by": "docs-sequence-sandbox", "filing_record_id": "608622207ce0b6d86cab159d3ba196e5848eb48f2517a06fa8e2bcc508da595b", "filing_year": 2026, "kind": "internal_filing", "live_submission": false, "member_nif": null, "modelo": "130", "notes": null, "operation": "modelo.work.file", "origin": "local", "period": { "code": "1T", "filing_year": 2026 }, "status": "vigente", "superseded_at": null, "superseded_by_filing_record_id": null, "work_unit_id": "ca5815c72d1ed564e582924ad157fd1c3349eba45264da2a7b843d88172f4204" }, "schema_version": "2", "status": "success" }
Confirm the export succeeds and the filing marker stays local.
A later quarter builds on this one: leave the three prior-period bindings unset so they resolve from your filed history. See Prepare a Modelo 130 IRPF instalment for the cumulative year-to-date behaviour.