Gestiona las facturas de tu negocio

Registra las facturas que tu negocio emite y recibe: el dinero que un cliente le debe y el dinero que debes a un proveedor. Esta guía cubre ambos tipos y muestra qué registros alimentan sus cálculos fiscales.

Una factura de negocio no es lo mismo que un recibo de compra que adjuntas como evidencia. Los recibos respaldan un gasto deducible en un movimiento del ledger (consulta Adjunta facturas y recibos). Las facturas de negocio que se registran aquí son los documentos comerciales en sí: una factura emitida (facturaste a un cliente) o una factura recibida (un proveedor le facturó).

Antes de empezar

Necesita:

  • Un perfil de contribuyente activo. Todos los comandos siguientes operan sobre el perfil activo; si no hay ninguno definido, el comando se niega a continuar. Consulta Configura tu perfil de contribuyente.

  • Una frase de contraseña de la clave maestra. La herramienta la solicita la primera vez que abre su almacenamiento cifrado en una sesión.

La interfaz de línea de comandos (CLI) aeat muestra su ayuda y sus mensajes en español; el texto en inglés de esta página describe qué hace cada paso.

Dos formas de guardar una factura

Cadrumo guarda las facturas en dos lugares distintos, para dos cometidos diferentes.

Sus facturas están en un solo lugar (aeat app ledger invoice ...): un registro de quién le debe y a quién debe. Úselo para registrar, listar y editar facturas.

Cada factura que registra es enlazable y calculable. Vincúlela a un movimiento bancario con aeat app ledger link, y un cálculo la lee directamente: por ejemplo, el Modelo 349, declaración recapitulativa de operaciones intracomunitarias.

Registre cada factura con invoice add. No hay una segunda copia que crear.

Todos los comandos aceptan --kind issued o --kind received. Issued significa que un cliente le debe (una factura por cobrar); received significa que debes a un proveedor (una factura por pagar).

Registra una factura emitida

Registra una factura que envió a un cliente. El comando devuelve el nuevo invoice_id, el source_kind resuelto (collectible_invoice) y los valores que introdujo:

1Record an invoice you sent to a customer.
aeat --format json app ledger invoice add --kind issued --counterparty-nif B12345674 \
  --country-code ES --counterparty-name Cliente SL --invoice-number FAC-2026-001 \
  --invoice-date 2026-02-15 --taxable-base 1000 --iva-rate 21
aeat --format json app ledger invoice add --kind issued --counterparty-nif B12345674 `
  --country-code ES --counterparty-name Cliente SL --invoice-number FAC-2026-001 `
  --invoice-date 2026-02-15 --taxable-base 1000 --iva-rate 21
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.add",
  "notices": [],
  "result": {
    "base_total": "1000.00",
    "base_total_eur": "1000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Cliente SL",
    "counterparty_tax_id": "sha256:133cad41",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "1210.00",
    "grand_total_eur": "1210.00",
    "invoice_id": "8156e70ce16a05f4588f7516d49da7ffd4115964a75b079061e624a41ad30211",
    "invoice_number": "FAC-2026-001",
    "issued_at": "2026-02-15",
    "iva_total": "210.00",
    "iva_total_eur": "210.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": null,
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}
2Confirm it resolved to a collectible invoice.
aeat --format json app ledger invoice view {invoice_id}
aeat --format json app ledger invoice view {invoice_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.view",
  "notices": [],
  "result": {
    "base_total": "1000.00",
    "base_total_eur": "1000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Cliente SL",
    "counterparty_tax_id": "sha256:133cad41",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "1210.00",
    "grand_total_eur": "1210.00",
    "invoice_id": "8156e70ce16a05f4588f7516d49da7ffd4115964a75b079061e624a41ad30211",
    "invoice_number": "FAC-2026-001",
    "issued_at": "2026-02-15",
    "iva_total": "210.00",
    "iva_total_eur": "210.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": null,
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the issued invoice was stored as a collectible invoice.

Anota el invoice_id corto; con él (o con un prefijo inequívoco) se refiere a la factura.

Registra una factura recibida

Registra una factura que le envió un proveedor. El source_kind se resuelve a payable_invoice:

1Record an invoice a supplier sent you.
aeat --format json app ledger invoice add --kind received --counterparty-nif A87654323 \
  --country-code ES --counterparty-name Proveedor SA --invoice-number PROV-99 \
  --invoice-date 2026-02-20 --taxable-base 500 --iva-rate 21
aeat --format json app ledger invoice add --kind received --counterparty-nif A87654323 `
  --country-code ES --counterparty-name Proveedor SA --invoice-number PROV-99 `
  --invoice-date 2026-02-20 --taxable-base 500 --iva-rate 21
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.add",
  "notices": [],
  "result": {
    "base_total": "500.00",
    "base_total_eur": "500.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Proveedor SA",
    "counterparty_tax_id": "sha256:c1fcd88f",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "605.00",
    "grand_total_eur": "605.00",
    "invoice_id": "2d276305600c31de666ddd61dc33377cde314c59c10f99608db208ec0f46da1b",
    "invoice_number": "PROV-99",
    "issued_at": "2026-02-20",
    "iva_total": "105.00",
    "iva_total_eur": "105.00",
    "kind": "received",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": null,
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}
2Confirm it resolved to a payable invoice.
aeat --format json app ledger invoice view {invoice_id}
aeat --format json app ledger invoice view {invoice_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.view",
  "notices": [],
  "result": {
    "base_total": "500.00",
    "base_total_eur": "500.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Proveedor SA",
    "counterparty_tax_id": "sha256:c1fcd88f",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "605.00",
    "grand_total_eur": "605.00",
    "invoice_id": "2d276305600c31de666ddd61dc33377cde314c59c10f99608db208ec0f46da1b",
    "invoice_number": "PROV-99",
    "issued_at": "2026-02-20",
    "iva_total": "105.00",
    "iva_total_eur": "105.00",
    "kind": "received",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": null,
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the received invoice was stored as a payable invoice.

Lista, consulta, actualiza y elimina

Lista ambos tipos o filtra por uno, añade una nota a una factura guardada y elimínala después. La consulta de una factura toma su id (o un prefijo inequívoco) y el tipo:

1List every invoice, both kinds.
aeat app ledger invoice list
aeat app ledger invoice list
bucket	<profile-id>
count	1
876198eb9b01ec6643765dd6bb7141567df25dc89e280632bffce3f8f9d3e9f9	issued	sha256:133cad41	FAC-2026-050	2026-02-15	1210.00
2Filter the list to issued invoices only.
aeat app ledger invoice list --kind issued
aeat app ledger invoice list --kind issued
bucket	<profile-id>
count	1
876198eb9b01ec6643765dd6bb7141567df25dc89e280632bffce3f8f9d3e9f9	issued	sha256:133cad41	FAC-2026-050	2026-02-15	1210.00
3Add a note to the invoice.
aeat app ledger invoice update {invoice_id} --notes paid late
aeat app ledger invoice update {invoice_id} --notes paid late
invoice_id	876198eb9b01ec6643765dd6bb7141567df25dc89e280632bffce3f8f9d3e9f9
kind	issued
counterparty_name	Cliente SL
counterparty_tax_id	sha256:133cad41
invoice_number	FAC-2026-050
issued_at	2026-02-15
base_total	1000.00
iva_total	210.00
grand_total	1210.00
currency	EUR
operation_type	
invoice_class	ORDINARIA
series	
rectifies_invoice_number	
recargo_amount	
iva_category	
linked_transaction_ids	
bucket_event_ids	d4fee17b4a2c566db0b31f44bc80726aca5a9648795c0ae17b933b9cf01b99b0
4Remove the invoice, confirming with --yes.
aeat --format json app ledger invoice remove {invoice_id} --yes
aeat --format json app ledger invoice remove {invoice_id} --yes
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.remove",
  "notices": [],
  "result": {
    "base_total": "1000.00",
    "base_total_eur": "1000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Cliente SL",
    "counterparty_tax_id": "sha256:133cad41",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "1210.00",
    "grand_total_eur": "1210.00",
    "invoice_id": "876198eb9b01ec6643765dd6bb7141567df25dc89e280632bffce3f8f9d3e9f9",
    "invoice_number": "FAC-2026-050",
    "issued_at": "2026-02-15",
    "iva_total": "210.00",
    "iva_total_eur": "210.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "paid late",
    "operation_type": null,
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the note was added and the invoice then removed.

Registra una factura intracomunitaria

Una entrega a, o una adquisición de, una empresa registrada a efectos de IVA en otro país de la UE es una operación intracomunitaria. Regístrala en la factura emitida o recibida con el país y el número de IVA europeo de la contraparte, más el tipo de operación del Modelo 349:

1Record a supply to a VAT-registered EU customer with its M349 operation type.
aeat --format json app ledger invoice add --kind issued --counterparty-nif DE345678901 \
  --counterparty-name Kunde GmbH --invoice-number EU-001 --invoice-date 2026-02-10 \
  --taxable-base 2000 --iva-rate 0 --country-code DE --operation-type E
aeat --format json app ledger invoice add --kind issued --counterparty-nif DE345678901 `
  --counterparty-name Kunde GmbH --invoice-number EU-001 --invoice-date 2026-02-10 `
  --taxable-base 2000 --iva-rate 0 --country-code DE --operation-type E
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.add",
  "notices": [],
  "result": {
    "base_total": "2000.00",
    "base_total_eur": "2000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "DE",
    "counterparty_name": "Kunde GmbH",
    "counterparty_tax_id": "sha256:a9224776",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "2000.00",
    "grand_total_eur": "2000.00",
    "invoice_id": "6d5fa3b4e91913a5e2f8245f40061fe824ecb7894c88b418d6e8c0fb1be79ca7",
    "invoice_number": "EU-001",
    "issued_at": "2026-02-10",
    "iva_total": "0.00",
    "iva_total_eur": "0.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": "E",
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}
2Confirm the operation type and country were stored.
aeat --format json app ledger invoice view {invoice_id}
aeat --format json app ledger invoice view {invoice_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.view",
  "notices": [],
  "result": {
    "base_total": "2000.00",
    "base_total_eur": "2000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "DE",
    "counterparty_name": "Kunde GmbH",
    "counterparty_tax_id": "sha256:a9224776",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "2000.00",
    "grand_total_eur": "2000.00",
    "invoice_id": "6d5fa3b4e91913a5e2f8245f40061fe824ecb7894c88b418d6e8c0fb1be79ca7",
    "invoice_number": "EU-001",
    "issued_at": "2026-02-10",
    "iva_total": "0.00",
    "iva_total_eur": "0.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": "E",
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the operation type and country were stored on the issued invoice.

--operation-type toma una clave de operación del M349: E entregas de bienes, M entregas tras una importación exenta, H lo mismo mediante representante fiscal, A adquisiciones de bienes, T entregas triangulares, S servicios prestados, I servicios adquiridos, y las claves de ventas en consigna R (transferencias), D (devoluciones) y C (sustituciones).

Alimenta un cálculo desde el catálogo

Para que una factura llegue al cálculo de un modelo, créala en el catálogo. La copia del catálogo es la que lee un cálculo y la que puedes vincular a un movimiento bancario. La secuencia cataloga una entrega intracomunitaria, lista e inspecciona el catálogo, y luego crea y calcula la declaración recapitulativa del Modelo 349 para el periodo en el que cae la factura:

1Catalogue an intra-community supply so a calculation can read it.
aeat --format json app ledger invoice add --kind issued --counterparty-nif DE345678901 \
  --counterparty-name Kunde GmbH --invoice-number EU-CAT-001 --invoice-date 2026-02-10 \
  --taxable-base 2000 --iva-rate 0 --country-code DE --operation-type E
aeat --format json app ledger invoice add --kind issued --counterparty-nif DE345678901 `
  --counterparty-name Kunde GmbH --invoice-number EU-CAT-001 --invoice-date 2026-02-10 `
  --taxable-base 2000 --iva-rate 0 --country-code DE --operation-type E
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.add",
  "notices": [],
  "result": {
    "base_total": "2000.00",
    "base_total_eur": "2000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "DE",
    "counterparty_name": "Kunde GmbH",
    "counterparty_tax_id": "sha256:a9224776",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "2000.00",
    "grand_total_eur": "2000.00",
    "invoice_id": "5f6226984e838fa553b9647364c5e3199cb833d79c8932072b9a67bc39eabc17",
    "invoice_number": "EU-CAT-001",
    "issued_at": "2026-02-10",
    "iva_total": "0.00",
    "iva_total_eur": "0.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": "E",
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}
2List the catalogue copies.
aeat app ledger invoice list
aeat app ledger invoice list
bucket	<profile-id>
count	1
5f6226984e838fa553b9647364c5e3199cb833d79c8932072b9a67bc39eabc17	issued	sha256:a9224776	EU-CAT-001	2026-02-10	2000.00
3Inspect one catalogue invoice to confirm its id.
aeat --format json app ledger invoice view {invoice_id}
aeat --format json app ledger invoice view {invoice_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.view",
  "notices": [],
  "result": {
    "base_total": "2000.00",
    "base_total_eur": "2000.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "DE",
    "counterparty_name": "Kunde GmbH",
    "counterparty_tax_id": "sha256:a9224776",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "2000.00",
    "grand_total_eur": "2000.00",
    "invoice_id": "5f6226984e838fa553b9647364c5e3199cb833d79c8932072b9a67bc39eabc17",
    "invoice_number": "EU-CAT-001",
    "issued_at": "2026-02-10",
    "iva_total": "0.00",
    "iva_total_eur": "0.00",
    "kind": "issued",
    "linked_transaction_ids": [],
    "notes": "",
    "operation_type": "E",
    "payment_status": "PENDING",
    "recargo_amount": null,
    "retention_amount": null,
    "retention_rate": null
  },
  "schema_version": "2",
  "status": "success"
}
4Create the Modelo 349 work unit for the period the invoice falls in.
aeat --format json app modelo work create --modelo 349 --year 2026 --period 02
aeat --format json app modelo work create --modelo 349 --year 2026 --period 02
{
  "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": "349",
    "name": "349-2026-02",
    "name_applied": null,
    "operation": "modelo.work.create",
    "period": {
      "code": "02",
      "filing_year": 2026
    },
    "revision_id": "2020-y-siguientes",
    "short_current_calculation_revision_id": null,
    "short_filed_calculation_revision_id": null,
    "short_work_unit_id": "253f06e07c9f",
    "state": "borrador",
    "status": "created",
    "status_message": "New work unit created.",
    "updated_at": "2026-04-01T09:00:00+00:00",
    "work_unit_id": "1609deb31dbe07e1b21281e26d114d5a4ef4230a5e9d2f387e8c253f06e07c9f"
  },
  "schema_version": "2",
  "status": "success"
}
5Calculate the recapitulative declaration.
aeat --format json app modelo work calculate {work_unit_id}
aeat --format json app modelo work calculate {work_unit_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "modelo.work.calculate",
  "notices": [
    {
      "action": null,
      "code": "modelo.work.calculate.plazo_vencido_unassessed_preview",
      "context": {
        "article_27_assessment_status": "unassessed",
        "closes_on": "2026-03-20",
        "conditional_recargo_preview_band": "completed_months_0",
        "conditional_recargo_preview_interest_applies": "False",
        "conditional_recargo_preview_pct": "1.00",
        "conditional_recargo_preview_reference_on": "2026-04-01",
        "days_overdue": "12",
        "legal_refs": "ley-58-2003:art-27.2"
      },
      "message": "WARNING: voluntary filing period expired (Art. 27 LGT). The displayed rate is an unassessed preview; this application does not determine surcharge or interest liability.",
      "severity": "warning"
    }
  ],
  "result": {
    "authorization_state": null,
    "binding_overrides": {
      "iva-349-declarante-importe-operaciones": "2000",
      "iva-349-declarante-importe-operaciones-adquisicion": "0",
      "iva-349-declarante-importe-rectificaciones": "0",
      "iva-349-declarante-importe-rectificaciones-adquisicion": "0",
      "iva-349-declarante-numero-operadores": "1",
      "iva-349-declarante-numero-operadores-adquisicion": "0",
      "iva-349-declarante-numero-rectificaciones": "0",
      "iva-349-declarante-numero-rectificaciones-adquisicion": "0",
      "modelo-349-ledger-intracommunity-guard": "0"
    },
    "calculation_revision_id": "457438fde19c986c6e759c496965856b1141a8aaf23c3f9eb6ca82967b7daf43",
    "casilla_values": {
      "decl.cambio-periodicidad": "0",
      "decl.complementaria-sustitutiva": "0",
      "decl.importe-operaciones": "2000.00",
      "decl.importe-rectificaciones": "0",
      "decl.nif-representante-legal": "0",
      "decl.numero-identificativo": "0",
      "decl.numero-identificativo-anterior": "0",
      "decl.numero-operadores": "1",
      "decl.numero-rectificaciones": "0",
      "sustituto.apellidos-razon-social": "0",
      "sustituto.nif": "0"
    },
    "created_at": "2026-04-01T09:00:00+00:00",
    "deadline": {
      "closes_on": "2026-03-20",
      "conditional_recargo_preview": {
        "assessment_status": "unassessed",
        "band_id": "completed_months_0",
        "interest_applies": false,
        "legal_ref": "ley-58-2003:art-27.2",
        "rate_reference_on": "2026-04-01",
        "surcharge_pct": "1.00"
      },
      "days_overdue": 12,
      "days_remaining": null
    },
    "detail_rows": [
      {
        "fields": {
          "clave_operacion": "E",
          "codigo_pais": "DE",
          "importe": "2000.00",
          "nif_comunitario": "sha256:a9224776",
          "razon_social": "Kunde GmbH"
        },
        "index": 1,
        "row_type": "operador"
      }
    ],
    "filed_at": null,
    "filed_by": null,
    "input_values_by_casilla_id": {
      "decl.importe-operaciones": "2000",
      "decl.importe-rectificaciones": "0",
      "decl.numero-operadores": "1",
      "decl.numero-rectificaciones": "0"
    },
    "modality": null,
    "modality_reason": null,
    "observations": [
      {
        "absent_by_design": false,
        "casilla_id": "decl.cambio-periodicidad",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93",
          "rd-1624-1992:art-81"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.complementaria-sustitutiva",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93",
          "rd-1624-1992:art-81"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.importe-operaciones",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current",
          "aeat-modelo-349-procedure"
        ],
        "value": "2000.00"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.importe-rectificaciones",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current",
          "aeat-modelo-349-procedure"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.nif-representante-legal",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93",
          "rd-1624-1992:art-81"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.numero-identificativo",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93",
          "rd-1624-1992:art-81"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.numero-identificativo-anterior",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93",
          "rd-1624-1992:art-81"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.numero-operadores",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current",
          "aeat-modelo-349-procedure"
        ],
        "value": "1"
      },
      {
        "absent_by_design": false,
        "casilla_id": "decl.numero-rectificaciones",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current",
          "aeat-modelo-349-procedure"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "sustituto.apellidos-razon-social",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      },
      {
        "absent_by_design": false,
        "casilla_id": "sustituto.nif",
        "formula_id": null,
        "legal_refs": [
          "orden-eha-769-2010:art-1",
          "orden-hac-174-2020:art-1",
          "ley-58-2003:art-93"
        ],
        "op": null,
        "operand_casilla_refs": [],
        "operand_refs": [],
        "operand_values": [],
        "source_refs": [
          "aeat-dr-349-2020-current"
        ],
        "value": "0"
      }
    ],
    "operation": "modelo.work.calculate",
    "registry_snapshot_ref": {
      "modelo": "349",
      "modelo_year": 2026,
      "period": "02",
      "revision_id": "2020-y-siguientes"
    },
    "relation_overrides": {},
    "result_summary": [
      {
        "casilla_id": "decl.numero-operadores",
        "label": "Total number of intra-Community operators",
        "role": "key_figure",
        "value": "1"
      },
      {
        "casilla_id": "decl.importe-operaciones",
        "label": "Amount of intra-Community transactions",
        "role": "key_figure",
        "value": "2000.00"
      }
    ],
    "saved": true,
    "saved_confirmation": "Saved as draft calculation revision 457438fde19c986c6e759c496965856b1141a8aaf23c3f9eb6ca82967b7daf43 (state: draft). It is persisted and can be resumed later.",
    "source_provenance": [
      {
        "contributor_binding_source": "collectible_invoice",
        "contributor_source_kind": "collectible_invoice",
        "dependency_treatment": "",
        "fingerprint": "sha256:72748ea0133a321a0f267c1a26c97cb74e46e173732201ddd72a3c2edfd3c890",
        "lineage_role": "primary",
        "parent_source_ref": null,
        "resolved_binding_source": "collectible_invoice",
        "resolver_id": "invoice_catalogue",
        "source_ref": "collectible_invoice:5f6226984e838fa553b9647364c5e3199cb833d79c8932072b9a67bc39eabc17"
      }
    ],
    "state": "borrador",
    "superseded_at": null,
    "updated_at": "2026-04-01T09:00:00+00:00",
    "verified_at": null,
    "verified_by": null,
    "work_unit_id": "1609deb31dbe07e1b21281e26d114d5a4ef4230a5e9d2f387e8c253f06e07c9f"
  },
  "schema_version": "2",
  "status": "warning"
}

Confirm the catalogued invoice reaches the Modelo 349 calculation.

Para una operación intracomunitaria, pasa --operation-type para que el catálogo estampe la clasificación que lee el cálculo del Modelo 349. Usa E, H, M, S, T, R, D o C para las facturas emitidas del catálogo. Usa A, I o T para las facturas recibidas del catálogo. En el Modelo 349, R es la clave de transferencia de ventas en consigna; las filas de rectificación usan campos separados de periodo rectificado y base.

Una factura se computa solo en el periodo en el que cae su fecha de factura. El Modelo 349 lee las facturas estrictamente por fecha, sin arrastre de periodos anteriores.

Qué modelos leen sus facturas

Las facturas del catálogo alimentan el Modelo 349 (la declaración recapitulativa de operaciones intracomunitarias) mediante el tipo de operación que les estampas al crearlas. Este es el modelo que sus facturas emitidas y recibidas impulsan directamente.

Sus autoliquidaciones de IVA no leen estos registros de factura. El Modelo 303 (IVA trimestral) y el Modelo 390 (resumen anual de IVA) se calculan a partir de tus movimientos del ledger clasificados, no a partir del catálogo de facturas. Registra el ingreso y el gasto en el ledger y clasifícalo (consulta Clasifica los movimientos); las autoliquidaciones de IVA leen el ledger. Registrar una factura aquí no la añade a un Modelo 303.

Las ventas transfronterizas B2C acogidas al régimen de ventanilla única (Modelo 369) siguen un flujo aparte, todavía no accesible desde invoice add; regístrelas mediante el flujo específico de OSS.

A dónde ir después