Importa i gestiona els moviments

Aquesta pàgina tracta el flux de treball de moviments del ledger: importar l’extracte bancari, afegir a mà els moviments que falten, revisar-los i corregir-los, i comprovar la preparació abans d’un càlcul. Una línia d’un extracte bancari és només una data i un import: el significat fiscal s’hi afegeix més tard, a la classificació.

Els teus registres bancaris no s’afegeixen automàticament. aeat importa només quan executes una ordre d’importació. Els càlculs fiscals utilitzen els moviments que has desat sota el perfil actiu.

Abans de començar

Necessita:

  • una ordre aeat que funcioni

  • un perfil de contribuent actiu; consulta Configura el teu perfil de contribuent

  • una contrasenya de clau mestra. L’eina te la demana el primer cop que obre el teu emmagatzematge xifrat en una sessió

  • un fitxer o directori d’extracte bancari, tret que afegeixes els moviments a mà

  • per a les proporcions de despatx a casa derivades del cens de l’AEAT, dades censals revisades; consulta Enllaça la informació censal del Model 036

Confirma el perfil actiu abans d’escriure dades de moviments:

1Confirm the active profile.
aeat --format json config profile status
aeat --format json config profile status
{
  "active_profile": "docs-sequence-sandbox",
  "command": "config.profile.status",
  "notices": [],
  "result": {
    "active_profile": "docs-sequence-sandbox",
    "activity_present": true,
    "configured": true,
    "iva_regime": "GENERAL",
    "precondition_action": null,
    "profile_id": "<profile-id>",
    "profile_record_error": null,
    "profile_record_present": null,
    "registered_profile": null,
    "tax_id_present": true,
    "tax_residence_ccaa": ""
  },
  "schema_version": "2",
  "status": "success"
}

Confirm a profile is active before you write transaction data.

Format del fitxer d’extracte

Un CSV bancari utilitza un punt i coma (;) com a separador i comes com a decimals. La primera línia és la capçalera de columnes; cada línia posterior és un moviment:

Fecha operación;Fecha valor;Concepto;Importe;Saldo;Moneda
2026-02-10;2026-02-10;Venta cliente;1.210,00;1.210,00;EUR
2026-02-11;2026-02-11;Compra material;-605,00;605,00;EUR

El signe d”Importe porta la direcció: un import positiu és un ingrés, un import negatiu és una despesa.

Previsualitza una importació

Executa primer una prova en sec. Una prova en sec mostra què importaria aeat i no desa cap fila. Després repeteix l’ordre sense --dry-run per desar les files. La seqüència previsualitza l’extracte del trimestre estàndard, l’importa i confirma una fila importada:

1Preview the import - a dry run saves no rows.
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv --dry-run
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv --dry-run
Rows	2
Entries imported	2
Skipped	0
DRY RUN MODE	Yes
Notice	Dry run: no rows were saved. The counts above are a preview of what a real import would add and skip.
notice	ledger.import.dry_run_preview	Dry run: no rows were saved. The counts above are a preview of what a real import would add and skip.
2Save the rows by repeating the command without --dry-run.
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv
Rows	2
Entries imported	2
Skipped	0
3Confirm an imported row is now in the ledger.
aeat --format json app ledger view 71a5db2b
aeat --format json app ledger view 71a5db2b
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "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",
      "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 statement's rows were imported into the ledger.

--provider csv anomena el format de l’extracte. --provider auto demana a aeat que el detecti. Els proveïdors reconeguts són auto, csv, ofx, qfx, xlsx, excel, n26, pdf i pdf-n26. Si la detecció tria el format incorrecte, substitueixes auto pel proveïdor exacte: executa aeat app ledger import --help o consulta la referència de la CLI per a la llista actual de proveïdors.

Si el camí no existeix, l’ordre es nega netament i anomena el fitxer que falta (El archivo de origen no existe: ...); corregeix el camí i torna-la a executar.

Desa les files importades amb diagnòstics

Afegeix --verify quan vulguis diagnòstics d’importació juntament amb el desat:

1Import the statement with diagnostics.
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv --verify
aeat app ledger import --file fixtures/movimientos-2026-1t.csv --provider csv --verify
Rows	2
Entries imported	2
Skipped	0
Valid	Yes
Detected format	delimiter=';',quotechar='"'
Source	-
2Confirm the imported row is present.
aeat --format json app ledger view 71a5db2b
aeat --format json app ledger view 71a5db2b
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "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",
      "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 verified import saved the statement's rows.

Si la font del diagnòstic ha d’apuntar a un fitxer original diferent, passa’l amb --file <original>. Utilitza --period només quan vulguis etiquetar intencionadament la importació amb un període fiscal; omet-lo i aeat assigna el període a partir de la data de cada moviment automàticament.

Afegeix un moviment manualment

Utilitza ledger add quan un moviment falti als extractes importats. Els camps obligatoris són data, import, direcció i descripció. Escriu l’import com una xifra positiva: la direcció indica si els diners han entrat o han sortit, i l’ordre rebutja un import negatiu. OUTGOING és per a despeses; INCOMING és per a ingressos:

1Record an expense you paid out.
aeat --format json app ledger add --date 2026-03-15 --amount 49.99 --direction OUTGOING \
  --description Software subscription --idempotency-key import-add-software
aeat --format json app ledger add --date 2026-03-15 --amount 49.99 --direction OUTGOING `
  --description Software subscription --idempotency-key import-add-software
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.add",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "dfc77364ad10b11146bbcb8a7f77093f32da233a72a1a1346ea3bed72574a969"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "49.99",
      "attachment_ids": [],
      "booked_date": "2026-03-15",
      "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-03-15",
      "description": "Software subscription",
      "direction": "OUTGOING",
      "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": "ES",
      "taxable_base": null,
      "transaction_id": "bbdc3ab706b04e3f0afcc53616b99d697a76b4c8678f1e2817dcbe675913a1d5",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "bbdc3ab706b04e3f0afcc53616b99d697a76b4c8678f1e2817dcbe675913a1d5"
  },
  "schema_version": "2",
  "status": "success"
}
2Record a payment you received.
aeat --format json app ledger add --date 2026-03-20 --amount 121.00 --direction INCOMING \
  --description Client payment --idempotency-key import-add-client
aeat --format json app ledger add --date 2026-03-20 --amount 121.00 --direction INCOMING `
  --description Client payment --idempotency-key import-add-client
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.add",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "d64492dc5b6c14fb7732d7831f25ae499f8df403d5e57aafd8e563a7e4c59329"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-20",
      "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-03-20",
      "description": "Client payment",
      "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": "ES",
      "taxable_base": null,
      "transaction_id": "2314a0fb896fe26934f274d57ced8417a0881f7e3f286b34f8c300efd1a6e6d8",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "2314a0fb896fe26934f274d57ced8417a0881f7e3f286b34f8c300efd1a6e6d8"
  },
  "schema_version": "2",
  "status": "success"
}
3Record a supplier expense.
aeat --format json app ledger add --date 2026-03-21 --amount 60.50 --direction OUTGOING \
  --description Office supplies --idempotency-key import-add-supplies
aeat --format json app ledger add --date 2026-03-21 --amount 60.50 --direction OUTGOING `
  --description Office supplies --idempotency-key import-add-supplies
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.add",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "e1f4ade8214c0c3b747d99a79d73aa5735f6375e39115c473dc64093bbf30585"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "60.5",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "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-03-21",
      "description": "Office supplies",
      "direction": "OUTGOING",
      "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": "ES",
      "taxable_base": null,
      "transaction_id": "8e9e36e8f65629149767b0a95c06a08c79cd61e03c3586aa66273419ec9ca43d",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "8e9e36e8f65629149767b0a95c06a08c79cd61e03c3586aa66273419ec9ca43d"
  },
  "schema_version": "2",
  "status": "success"
}
4Confirm the first transaction was stored as an outgoing expense.
aeat --format json app ledger view {transaction_id}
aeat --format json app ledger view {transaction_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "49.99",
      "attachment_ids": [],
      "booked_date": "2026-03-15",
      "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-03-15",
      "description": "Software subscription",
      "direction": "OUTGOING",
      "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": "ES",
      "taxable_base": null,
      "transaction_id": "bbdc3ab706b04e3f0afcc53616b99d697a76b4c8678f1e2817dcbe675913a1d5",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "bbdc3ab706b04e3f0afcc53616b99d697a76b4c8678f1e2817dcbe675913a1d5"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm a manually added transaction is stored with its direction.

La tercera direcció, INTERNAL_TRANSFER, registra diners moguts entre els teus propis comptes.

Registra els detalls fiscals en un moviment manual

ledger add accepta els mateixos camps fiscals que estableixes durant la classificació, de manera que registres un moviment complet en un sol pas. --amount és el total brut (base imposable més IVA), i l’eina rebutja la fila si la base més l’IVA no coincideix amb el brut fins al cèntim:

1Record a purchase with its full IVA breakdown in one step.
aeat --format json app ledger add --date 2026-03-21 --amount 121.00 --direction OUTGOING \
  --description Office supplies --counterparty Papeleria SL --category-id \
  material_oficina --taxable-base 100.00 --iva-rate 0.21 --iva-amount 21.00 --notes \
  Receipt filed --idempotency-key import-tax-details
aeat --format json app ledger add --date 2026-03-21 --amount 121.00 --direction OUTGOING `
  --description Office supplies --counterparty Papeleria SL --category-id `
  material_oficina --taxable-base 100.00 --iva-rate 0.21 --iva-amount 21.00 --notes `
  Receipt filed --idempotency-key import-tax-details
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.add",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "2db62f858773cb6a333db409b8321094557fa580bd514110e48d1214f0f437b5"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "business_classification": "NOT_YET_PROCESSED",
      "business_pct": null,
      "category_id": "material_oficina",
      "classification_confidence": null,
      "classification_reason": "",
      "classified_at": null,
      "classified_by": "auto",
      "counterparty": "Papeleria SL",
      "counterparty_country": null,
      "counterparty_identification_state": null,
      "created_at": "2026-04-01T09:00:00+00:00",
      "currency": "EUR",
      "date": "2026-03-21",
      "description": "Office supplies",
      "direction": "OUTGOING",
      "fx_rate": null,
      "invoice_id": null,
      "irpf_category": null,
      "iva_amount": "21",
      "iva_category": null,
      "iva_rate": "0.21",
      "lifecycle_state": "ACTIVE",
      "m210_income_classification": null,
      "modified_at": "2026-04-01T09:00:00+00:00",
      "notes": "Receipt filed",
      "prorrata_reference": null,
      "purchase_invoice_evidence_id": null,
      "source_jurisdiction": "ES",
      "taxable_base": "100",
      "transaction_id": "aebcbdf126dab613bfff9204b98d9bdce07dd43b900d9b0e1c00e24c709a2618",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "aebcbdf126dab613bfff9204b98d9bdce07dd43b900d9b0e1c00e24c709a2618"
  },
  "schema_version": "2",
  "status": "success"
}
2Confirm the taxable base and IVA were stored.
aeat --format json app ledger view {transaction_id}
aeat --format json app ledger view {transaction_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "business_classification": "NOT_YET_PROCESSED",
      "business_pct": null,
      "category_id": "material_oficina",
      "classification_confidence": null,
      "classification_reason": "",
      "classified_at": null,
      "classified_by": "auto",
      "counterparty": "Papeleria SL",
      "counterparty_country": null,
      "counterparty_identification_state": null,
      "created_at": "2026-04-01T09:00:00+00:00",
      "currency": "EUR",
      "date": "2026-03-21",
      "description": "Office supplies",
      "direction": "OUTGOING",
      "fx_rate": null,
      "invoice_id": null,
      "irpf_category": null,
      "iva_amount": "21",
      "iva_category": null,
      "iva_rate": "0.21",
      "lifecycle_state": "ACTIVE",
      "m210_income_classification": null,
      "modified_at": "2026-04-01T09:00:00+00:00",
      "notes": "Receipt filed",
      "prorrata_reference": null,
      "purchase_invoice_evidence_id": null,
      "source_jurisdiction": "ES",
      "taxable_base": "100",
      "transaction_id": "aebcbdf126dab613bfff9204b98d9bdce07dd43b900d9b0e1c00e24c709a2618",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "aebcbdf126dab613bfff9204b98d9bdce07dd43b900d9b0e1c00e24c709a2618"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the tax fields were recorded on the manual transaction.

Camps opcionals útils:

  • --currency registra un import diferent de l’euro; per defecte és EUR.

  • --counterparty registra a qui has pagat o de qui has cobrat.

  • --category-id assigna la categoria d’ingrés o de despesa. Executa aeat app ledger categories per llistar els ids.

  • --taxable-base, --iva-rate i --iva-amount registren el desglossament de l’IVA.

  • --irpf-category registra la categoria d’IRPF (impost sobre la renda de les persones físiques).

  • --source-jurisdiction registra el país al qual pertany un moviment, com a codi ISO de dues lletres, cosa que importa per als àmbits de no residents.

  • --notes afegeix una nota breu de l’operador.

Per a un moviment en part de negoci i en part personal, estableix --classification MIXED i la proporció de negoci amb --business-pct, un valor de 0 a 1. Per a la categoria d’IVA, l’estat membre de la UE i la semàntica de la proporció d’ús darrere d’aquests camps, consulta Classifica els moviments.

Utilitza les ordres de factures quan també necessites fer el seguiment de si una factura existeix separadament del moviment bancari. Les factures rebudes són factures de proveïdor que deus; les factures emeses són factures de client que et deuen:

1Record a supplier's received invoice.
aeat --format json app ledger invoice add --kind received --counterparty-nif B12345674 \
  --counterparty-name Proveedor SL --country-code ES --invoice-number 2026-0142 \
  --invoice-date 2026-03-21 --taxable-base 100.00 --iva-rate 21
aeat --format json app ledger invoice add --kind received --counterparty-nif B12345674 `
  --counterparty-name Proveedor SL --country-code ES --invoice-number 2026-0142 `
  --invoice-date 2026-03-21 --taxable-base 100.00 --iva-rate 21
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.invoice.add",
  "notices": [],
  "result": {
    "base_total": "100.00",
    "base_total_eur": "100.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Proveedor SL",
    "counterparty_tax_id": "sha256:133cad41",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "121.00",
    "grand_total_eur": "121.00",
    "invoice_id": "58b9b176555a62584c1afd469cb548df417ab2531cacdbfb4673af2c98a0d6dd",
    "invoice_number": "2026-0142",
    "issued_at": "2026-03-21",
    "iva_total": "21.00",
    "iva_total_eur": "21.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"
}
2List issued invoices.
aeat app ledger invoice list --kind issued
aeat app ledger invoice list --kind issued
bucket	<profile-id>
count	0
3Confirm the received invoice is 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": "100.00",
    "base_total_eur": "100.00",
    "bucket_id": "<bucket-id>",
    "counterparty_country": "ES",
    "counterparty_name": "Proveedor SL",
    "counterparty_tax_id": "sha256:133cad41",
    "currency": "EUR",
    "fx_rate": null,
    "fx_rate_date": null,
    "fx_rate_source": null,
    "grand_total": "121.00",
    "grand_total_eur": "121.00",
    "invoice_id": "58b9b176555a62584c1afd469cb548df417ab2531cacdbfb4673af2c98a0d6dd",
    "invoice_number": "2026-0142",
    "issued_at": "2026-03-21",
    "iva_total": "21.00",
    "iva_total_eur": "21.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 recorded invoice resolved to a payable invoice.

Per al flux complet de registre de factures, consulta Adjunta factures i rebuts.

Revisa les files

Llista les files, acota la llista amb filtres, inspecciona una fila i llegeix el seu historial d’esdeveniments. La seqüència importa el trimestre i recorre les ordres de lectura:

1List every row.
aeat app ledger list
aeat app ledger list
ACCOUNTING LEDGER TRANSACTIONS
id	full_id	date	amount	description	IVA category	review_status
71a5db2b	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	2026-02-10	1210	Cobro factura F-2026-001 servicios de consultoria		pending
e3eeac5e	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	2026-02-11	605	Compra de material de oficina proveedor local		pending
2Narrow the list with filters.
aeat app ledger list --filter period=1T --filter year=2026
aeat app ledger list --filter period=1T --filter year=2026
ACCOUNTING LEDGER TRANSACTIONS
id	full_id	date	amount	description	IVA category	review_status
71a5db2b	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	2026-02-10	1210	Cobro factura F-2026-001 servicios de consultoria		pending
e3eeac5e	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	2026-02-11	605	Compra de material de oficina proveedor local		pending
3List only the rows still needing a decision.
aeat app ledger list --filter classification=NOT_YET_PROCESSED
aeat app ledger list --filter classification=NOT_YET_PROCESSED
ACCOUNTING LEDGER TRANSACTIONS
id	full_id	date	amount	description	IVA category	review_status
71a5db2b	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	2026-02-10	1210	Cobro factura F-2026-001 servicios de consultoria		pending
e3eeac5e	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	2026-02-11	605	Compra de material de oficina proveedor local		pending
4Inspect one row before changing it.
aeat app ledger view 71a5db2b
aeat app ledger view 71a5db2b
ID	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518
Date	2026-02-10
Value date	2026-02-10
Amount	1210
Currency	EUR
Direction	INCOMING
Description	Cobro factura F-2026-001 servicios de consultoria
Counterparty	-
Classification	NOT_YET_PROCESSED
Business %	-
Category	-
Usage ratio id	-
Taxable base	-
IVA rate	-
IVA amount	-
IVA category	-
Established in	-
VAT identified in	-
IRPF category	-
Notes	-
Purchase invoice evidence	-
Attachments	-
Lifecycle state	ACTIVE
Classified by	auto
Classified at	-
Classification confidence	-
Classification reason	-
Review status	pending
5Read the event history for the row.
aeat app ledger history 71a5db2b
aeat app ledger history 71a5db2b
Bucket	<profile-id>
ID	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518
Event count	1
2026-04-01T09:00:00+00:00	ledger.transaction.imported	1a59b4ec789420d5ec241c40cf90be91ca7a1d4ca191ceb478a141a48bfa14c3
6Track the same row.
aeat app ledger track 71a5db2b
aeat app ledger track 71a5db2b
ID	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518
Lifecycle state	ACTIVE
Created bucket event	-
import_provider	CSV provider
import_source	movimientos-2026-1t.csv
import_ingested_at	2026-04-01T09:00:00+00:00
import_fingerprint	924aad06902b61c5d2c34863ac5d8c8768039a38540cd0235e0308d6be767898
7Confirm the row is the imported income movement.
aeat --format json app ledger view 71a5db2b
aeat --format json app ledger view 71a5db2b
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "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",
      "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 inspected row reads the imported income movement.

Per a una cua de revisió més àmplia, utilitza ledger review per inspeccionar files seleccionades i ledger check per informar d’anomalies agregades del ledger entre períodes. Totes dues són només locals:

1Inspect selected ledger rows for a period.
aeat app ledger review --filter period=1T --filter year=2026
aeat app ledger review --filter period=1T --filter year=2026
ACCOUNTING LEDGER REVIEW SESSION
71a5db2b	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	2026-02-10	1210	Cobro factura F-2026-001 servicios de consultoria	pending
e3eeac5e	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	2026-02-11	605	Compra de material de oficina proveedor local	pending
2Report aggregate ledger anomalies across periods.
aeat --format json app ledger check
aeat --format json app ledger check
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.check",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "checked_transaction_count": 2,
    "issues": [
      {
        "detail": "business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation",
        "reason": "missing_business_classification",
        "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518"
      },
      {
        "detail": "business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation",
        "reason": "missing_business_classification",
        "transaction_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d"
      }
    ],
    "link_inconsistencies": [],
    "periods": [
      "2026"
    ],
    "ready": false
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the aggregate ledger check runs cleanly.

Exporta les files per revisar-les

Exporta el ledger actiu a un fitxer. El filtre --year i --period manté l’exportació alineada amb les dates dels moviments. Les exportacions són instantànies de revisió, no una via d’editar i tornar a importar:

1Export the first quarter to a CSV snapshot.
aeat --format json app ledger export --output ./ledger-2026-q1.csv --year 2026 --period \
  1T
aeat --format json app ledger export --output ./ledger-2026-q1.csv --year 2026 --period `
  1T
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.export",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "ec10496135191214d662a70eacf77db3f739a457585f0bb2e8ce45e6bb5805b5"
    ],
    "bucket_id": "<bucket-id>",
    "byte_size": 950,
    "export_format": "csv",
    "export_id": "5f0ddcff2e977990b1b5fd3fc6e107cf9b3cb3b5f7ac82e87d072c77fed11cf4",
    "fieldnames": [
      "bucket_id",
      "transaction_id",
      "lifecycle_state",
      "booked_date",
      "value_date",
      "effective_date",
      "amount",
      "currency",
      "direction",
      "counterparty",
      "description",
      "source_jurisdiction",
      "business_classification",
      "business_pct",
      "category_id",
      "taxable_base",
      "iva_rate",
      "iva_amount",
      "iva_category",
      "counterparty_country",
      "counterparty_identification_state",
      "irpf_category",
      "usage_ratio_id",
      "prorrata_reference",
      "purchase_invoice_evidence_id",
      "attachment_ids",
      "notes",
      "created_by",
      "created_source_command",
      "value_in_eur",
      "fx_rate"
    ],
    "filename_extension": "csv",
    "media_type": "text/csv",
    "output_path": "ledger-2026-q1.csv",
    "row_count": 2,
    "rows": [
      {
        "amount": "1210.00",
        "attachment_ids": "",
        "booked_date": "2026-02-10",
        "bucket_id": "<bucket-id>",
        "business_classification": "NOT_YET_PROCESSED",
        "business_pct": "",
        "category_id": "",
        "counterparty": "",
        "counterparty_country": "",
        "counterparty_identification_state": "",
        "created_by": "",
        "created_source_command": "",
        "currency": "EUR",
        "description": "Cobro factura F-2026-001 servicios de consultoria",
        "direction": "INCOMING",
        "effective_date": "2026-02-10",
        "fx_rate": "",
        "irpf_category": "",
        "iva_amount": "",
        "iva_category": "",
        "iva_rate": "",
        "lifecycle_state": "ACTIVE",
        "notes": "",
        "prorrata_reference": "",
        "purchase_invoice_evidence_id": "",
        "source_jurisdiction": "",
        "taxable_base": "",
        "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "usage_ratio_id": "",
        "value_date": "2026-02-10",
        "value_in_eur": ""
      },
      {
        "amount": "605.00",
        "attachment_ids": "",
        "booked_date": "2026-02-11",
        "bucket_id": "<bucket-id>",
        "business_classification": "NOT_YET_PROCESSED",
        "business_pct": "",
        "category_id": "",
        "counterparty": "",
        "counterparty_country": "",
        "counterparty_identification_state": "",
        "created_by": "",
        "created_source_command": "",
        "currency": "EUR",
        "description": "Compra de material de oficina proveedor local",
        "direction": "OUTGOING",
        "effective_date": "2026-02-11",
        "fx_rate": "",
        "irpf_category": "",
        "iva_amount": "",
        "iva_category": "",
        "iva_rate": "",
        "lifecycle_state": "ACTIVE",
        "notes": "",
        "prorrata_reference": "",
        "purchase_invoice_evidence_id": "",
        "source_jurisdiction": "",
        "taxable_base": "",
        "transaction_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "usage_ratio_id": "",
        "value_date": "2026-02-11",
        "value_in_eur": ""
      }
    ],
    "sha256": "0becceaa2ef5f6edba6a89f5fee123b09f1a044d477005dd381cecb52f66213d"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the ledger exports for the requested period.

2Write an XLSX snapshot of the whole year instead. XLSX embeds a per-run id, so it is shown as a display frame.
aeat app ledger export --output ./ledger-2026.xlsx --export-format xlsx --year 2026 \
  --period 0A
aeat app ledger export --output ./ledger-2026.xlsx --export-format xlsx --year 2026 `
  --period 0A

Afegeix --export-format xlsx per escriure una instantània XLSX en el seu lloc, i utilitza el token anual 0A quan l’abast de revisió sigui tot un any.

Per canviar files desades, utilitza ledger update, ledger classify, ledger allocate, ledger split o ledger merge.

Actualitza una fila

Utilitza ledger update per als camps de moviment editables: data, data de valor, import, direcció, moneda, contrapart, descripció, base imposable, tipus d’IVA, import d’IVA, categoria d’IRPF, notes o etiqueta de grup:

1Correct the description, capturing the new id the update rotates to.
aeat --format json app ledger update {transaction_id} --description \
  Corrected description
aeat --format json app ledger update {transaction_id} --description `
  Corrected description
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.update",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "51bb581f6eb1806a49fcd5105e639fc5aa44520bae30174e14209ac995f7d355"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "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-03-21",
      "description": "Corrected description",
      "direction": "OUTGOING",
      "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": "ES",
      "taxable_base": null,
      "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629"
  },
  "schema_version": "2",
  "status": "success"
}
2Record the IVA breakdown against the current id.
aeat --format json app ledger update {after_description} --taxable-base 100.00 \
  --iva-rate 0.21 --iva-amount 21.00
aeat --format json app ledger update {after_description} --taxable-base 100.00 `
  --iva-rate 0.21 --iva-amount 21.00
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.update",
  "notices": [],
  "result": {
    "bucket_event_ids": [
      "6082dd1e06c1a8299d25b7bfa3ac07495b32841016b4dc538a50ccfc9a81744d"
    ],
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "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-03-21",
      "description": "Corrected description",
      "direction": "OUTGOING",
      "fx_rate": null,
      "invoice_id": null,
      "irpf_category": null,
      "iva_amount": "21",
      "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": "100",
      "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629"
  },
  "schema_version": "2",
  "status": "success"
}
3Add an operator note against the current id.
aeat app ledger update {after_iva} --notes Receipt checked against supplier PDF
aeat app ledger update {after_iva} --notes Receipt checked against supplier PDF
ID	86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629
Date	2026-03-21
Amount	121
Description	Corrected description
Review status	pending
4The original id still resolves for reads; confirm the correction landed.
aeat --format json app ledger view {transaction_id}
aeat --format json app ledger view {transaction_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "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-03-21",
      "description": "Corrected description",
      "direction": "OUTGOING",
      "fx_rate": null,
      "invoice_id": null,
      "irpf_category": null,
      "iva_amount": "21",
      "iva_category": null,
      "iva_rate": "0.21",
      "lifecycle_state": "ACTIVE",
      "m210_income_classification": null,
      "modified_at": "2026-04-01T09:00:00+00:00",
      "notes": "Receipt checked against supplier PDF",
      "prorrata_reference": null,
      "purchase_invoice_evidence_id": null,
      "source_jurisdiction": "ES",
      "taxable_base": "100",
      "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "86f4d44865f693e51c368c3e8f25a5b9bf7e1acf6089298e885854d661254629"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the row's description and IVA fields were updated.

Una actualització dona un id nou al moviment; un id que hagis anotat abans continua resolent-se a view, history i track. Per al flux de correcció complet (dividir, fusionar, arxivar, posar de banda, eliminar i restablir files), consulta Corregeix els errors del teu ledger.

Adjunta evidència a un moviment

Adjunta evidència de compra segura a un moviment. L’id de l’evidència prové d”aeat app ledger evidence add. La seqüència registra una evidència i una despesa, i després n’adjunta una a l’altra:

1Attach the purchase evidence to the transaction.
aeat app ledger attach {transaction_id} --purchase-invoice-evidence-id {evidence_id}
aeat app ledger attach {transaction_id} --purchase-invoice-evidence-id {evidence_id}
ID	9ad5e90279a049021db72b53806469870d4739a6d557a47006099b5ce5c9573b
Date	2026-03-21
Amount	121
Description	Office supplies
Review status	pending
2Confirm the transaction resolves after the attachment.
aeat --format json app ledger view {transaction_id}
aeat --format json app ledger view {transaction_id}
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "review_status": "pending",
    "transaction": {
      "amount": "121",
      "attachment_ids": [],
      "booked_date": "2026-03-21",
      "business_classification": "NOT_YET_PROCESSED",
      "business_pct": null,
      "category_id": "material_oficina",
      "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-03-21",
      "description": "Office supplies",
      "direction": "OUTGOING",
      "fx_rate": null,
      "invoice_id": null,
      "irpf_category": null,
      "iva_amount": "21",
      "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": "6509f06abb0c5756",
      "source_jurisdiction": "ES",
      "taxable_base": "100",
      "transaction_id": "9ad5e90279a049021db72b53806469870d4739a6d557a47006099b5ce5c9573b",
      "usage_ratio_id": null,
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "9ad5e90279a049021db72b53806469870d4739a6d557a47006099b5ce5c9573b"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the purchase-invoice evidence attached to the transaction.

attach és l’única porta per a l’evidència de compra. L’ordre link només vincula un moviment a una factura del catàleg de reconciliació.

L’opció link --invoice-id espera un id del catàleg de factures de reconciliació (que omplen els fluxos d’importació i reconciliació), no un id d”aeat app ledger invoice add. Consulta Adjunta factures i rebuts per al flux complet d’evidència i registre de factures, inclosa l’opció --attachment-id i la seva limitació actual.

Extreu un document directament de Google Drive a l’emmagatzematge d’evidència xifrat amb evidence pull. Aquesta ordre accedeix a Google Drive, de manera que s’executa amb el teu propi compte autoritzat i no dins del sandbox de la documentació:

1Pull a document from Google Drive into encrypted evidence.
aeat app ledger evidence pull <transaction-id> --source GOOGLE_DRIVE --reference \
  <drive-file-id> --note Supplier invoice
aeat app ledger evidence pull <transaction-id> --source GOOGLE_DRIVE --reference `
  <drive-file-id> --note Supplier invoice

L’ordre descarrega el fitxer de Drive, n’emmagatzema els bytes xifrats amb el moviment i conserva l’enllaç original com a procedència. Els enllaços de Gmail, les URL arbitràries i els fitxers de Drive fora de l’àmbit concedit es rebutgen: l’evidència sempre porta el document mateix, mai un simple enllaç. Per a una font rebutjada, descarrega el document tu mateix i adjunta’l amb aeat app ledger attach --attachment-id.

Corregeix una fila incorrecta

Dividir un moviment mixt en parts, tornar a fusionar una divisió incorrecta i arxivar, posar de banda, eliminar o restablir files són totes correccions. Corregeix els errors del teu ledger conté aquest flux de treball, amb un exemple per a cada ordre i orientació per triar la correcció menys destructiva.

Classifica les files

Classifica les files abans del càlcul. Com a mínim, les files de negoci importades necessiten una decisió de negoci/personal/mixt, i les files de despesa necessiten una categoria:

1List the recognized expense categories.
aeat app ledger categories
aeat app ledger categories
RECOGNISED LEDGER SPENDING CATEGORIES
category-id (pass this exact value)	family
cuotas_colegiales	social_security
cuotas_autonomos_ss	social_security
mutualidad_alternativa	social_security
arrendamiento_local	premises
ibi_local_afecto	premises
suministros_local_afecto	premises
suministros_home_office_luz	home_office_suministros
suministros_home_office_agua	home_office_suministros
suministros_home_office_gas	home_office_suministros
suministros_home_office_internet	home_office_suministros
telefonia_fija	home_office_suministros
amortizacion_vivienda_afecto	home_office_ownership
ibi_vivienda_afecto	home_office_ownership
comunidad_vivienda_afecto	home_office_ownership
arrendamiento_vivienda_afecto	home_office_ownership
telefonia_movil	telecoms
material_oficina	office
software_suscripcion	office
hardware_amortizable	office
mobiliario_amortizable	office
reparaciones_conservacion	office
publicidad_marketing	office
formacion_profesional	office
vehiculo_combustible	vehicle
vehiculo_mantenimiento	vehicle
vehiculo_seguro	vehicle
vehiculo_peaje	vehicle
vehiculo_parking	vehicle
manutencion_dietas_nacional	meals
manutencion_dietas_extranjero	meals
asesoria_fiscal	professional_services
asesoria_juridica	professional_services
asesoria_contable	professional_services
viajes_transporte	travel
viajes_alojamiento	travel
seguros_responsabilidad_civil	insurance
seguros_salud_autonomo	insurance
gastos_bancarios	financial
gastos_financieros	financial
suministros_cliente_directos	direct_costs
subcontratacion	direct_costs
tributos_fiscalmente_deducibles	taxes
Pass the bare id, e.g. --category-id cuotas_colegiales (not a family-prefixed or compound key).
Deductible expenses only. Income (INCOMING) transactions are classified by direction and need no --category-id; `ledger check` and `ledger preflight` do not flag income as missing_category.

IRPF CATEGORIES FOR --irpf-category
irpf-category (pass this exact value)	use
actividad_economica	professional activity withholding (received or paid net)
arrendamiento_local	net-paid rent expense withholding
arrendamiento_vivienda_afecto	net-paid rent expense withholding
trabajo	employment income (not for net-paid invoices)
Net-paid rent example: --category-id arrendamiento_local --irpf-category arrendamiento_local. Net-paid professional service: --category-id asesoria_fiscal --irpf-category actividad_economica.
2Classify the imported expense as a business cost with a category.
aeat app ledger classify e3eeac5e --classification BUSINESS --category-id \
  material_oficina
aeat app ledger classify e3eeac5e --classification BUSINESS --category-id `
  material_oficina
ID	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d
Date	2026-02-11
Amount	605
Description	Compra de material de oficina proveedor local
Review status	reviewed
3Confirm the row now reads business with its category.
aeat --format json app ledger view e3eeac5e
aeat --format json app ledger view e3eeac5e
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.view",
  "notices": [],
  "result": {
    "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 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-11",
      "description": "Compra de material de oficina proveedor local",
      "direction": "OUTGOING",
      "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": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
      "usage_ratio_id": null,
      "value_date": "2026-02-11",
      "value_in_eur": null
    },
    "transaction_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the imported expense is classified as business.

Classifica els moviments conté el flux complet: classificació en massa des de CSV, assignació d’ús mixt, camps fiscals, regles desades i suggeriments assistits per LLM.

Comprova la preparació per a un període de presentació

Executa el preflight abans de calcular un model i, tot seguit, comprova l’estat general del ledger. El preflight mira cada registre dins del període i marca qualsevol cosa que encara falti abans de confiar en cap suma: una classificació, categoria, base, import d’IVA, tipus d’IVA, referència de divisió o moneda no convertible que faltin:

1Check the period is ready to calculate.
aeat app ledger preflight --year 2026 --period 1T
aeat app ledger preflight --year 2026 --period 1T
bucket	<profile-id>
period	2026 1T
checked	2
issues	0
ready	true
2Read the overall ledger state for the period.
aeat --format json app ledger status --year 2026 --period 1T
aeat --format json app ledger status --year 2026 --period 1T
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.status",
  "notices": [],
  "result": {
    "active_count": 2,
    "archived_count": 0,
    "bucket_id": "<bucket-id>",
    "business_expense_total": "605",
    "business_income_total": "1210",
    "business_net_total": "605",
    "checked_transaction_count": 2,
    "pending_review_count": 0,
    "period": {
      "code": "1T",
      "filing_year": 2026
    },
    "readiness_issue_count": 0,
    "readiness_issues": [],
    "ready": true,
    "reviewed_count": 2,
    "skipped_count": 0,
    "split_count": 0,
    "stale_filings": [],
    "stashed_count": 0,
    "total_count": 2,
    "unconverted_currency_count": 0
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the period's readiness is reported for the classified quarter.

La comprovació no canvia res; anomena les files que no estan a punt perquè corregeixes la matèria primera abans de confiar en cap total. Continua al càlcul només quan el perfil actiu i el període objectiu estiguin prou a punt per al model que prepares.

Per a la revisió del càlcul a Google Sheets, consulta Revisa els càlculs amb Google Sheets. Aquell flux de treball exporta una superfície de càlcul de model a Sheets; és separat de l’exportació CSV/XLSX del ledger.

Si una ordre s’atura amb un error

Si una ordre informa que no hi ha cap perfil actiu, que el període no és vàlid o que el ledger no està a punt, utilitzes Diagnostica i repara la configuració local.

Passos següents