Corregeix els errors del teu ledger¶
Corregeix els moviments incorrectes del teu ledger sense perdre el rastre del que ha canviat. Cada correcció deixa una entrada d’historial visible, de manera que sempre pots veure quin aspecte tenia un moviment abans i després. Tot passa al teu ordinador: no s’envia res enlloc.
Abans de començar¶
Necessita:
Un perfil de contribuent actiu. Cada ordre següent treballa sobre el perfil actiu; si no n’hi ha cap, l’ordre es nega. 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 ledger amb moviments.
Per trobar el moviment que vols corregir, llistes els teus moviments i visualitza’n un en detall. La seqüència següent registra una despesa d’exemple, llista el ledger i inspecciona aquella fila:
aeat --format json app ledger add --date 2026-03-15 --amount 210.00 --direction OUTGOING \
--description Silla de oficina --idempotency-key correct-findaeat --format json app ledger add --date 2026-03-15 --amount 210.00 --direction OUTGOING `
--description Silla de oficina --idempotency-key correct-find{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "a9ef0aa32d83010e35c72d35d6cc793ade13766f38979a9ae358646f1064352f" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "210", "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": "Silla de oficina", "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": "f83add280832e5cbcbfc1da6432f5e6a7e02eb78ba74fc265eb483b805ee7afb", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "f83add280832e5cbcbfc1da6432f5e6a7e02eb78ba74fc265eb483b805ee7afb" }, "schema_version": "2", "status": "success" }
aeat app ledger listaeat app ledger listACCOUNTING LEDGER TRANSACTIONS id full_id date amount description IVA category review_status f83add28 f83add280832e5cbcbfc1da6432f5e6a7e02eb78ba74fc265eb483b805ee7afb 2026-03-15 210 Silla de oficina pending
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": "210", "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": "Silla de oficina", "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": "f83add280832e5cbcbfc1da6432f5e6a7e02eb78ba74fc265eb483b805ee7afb", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "f83add280832e5cbcbfc1da6432f5e6a7e02eb78ba74fc265eb483b805ee7afb" }, "schema_version": "2", "status": "success" }
Confirm the inspected transaction is the one you want to fix.
L’ordre view reporta l’id, l’import, la direcció, la descripció i l’estat del cicle de vida. La guia de moviments tracta a fons la llista i el filtratge.
Tria la teva correcció¶
Si un moviment té un import, una data o un text incorrectes, actualitza’l.
Si un moviment no hauria d’existir en absolut, elimina’l.
Si la mateixa compra s’ha importat dues vegades, elimines el duplicat, o bé arxiva’l per conservar-ne un rastre deliberat.
Si un pagament cobreix dues coses diferents, divideix-lo.
Si has dividit una cosa i la vols tornar a ajuntar, fusiona les parts.
Si dubtes d’un moviment i el vols treure del mig, posa’l de banda.
Si vols mantenir un moviment a l’historial però fora de les llistes quotidianes, arxiva’l.
Si has posat de banda o arxivat un moviment per error, restaura’l a actiu.
Actualitza camps d’un moviment¶
Canvia un o més camps directament. La seqüència registra una cadira al preu incorrecte, corregeix l’import i la descripció i confirma la correcció:
aeat --format json app ledger add --date 2026-03-15 --amount 100.00 --direction OUTGOING \
--description Office chair --idempotency-key correct-updateaeat --format json app ledger add --date 2026-03-15 --amount 100.00 --direction OUTGOING `
--description Office chair --idempotency-key correct-update{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "47c494e7c2a1631efad4835b3c50110ccfda63015482d65fef4f0b83f8dd1c61" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "100", "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": "Office chair", "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": "1a9106f8f6783eaf5ba09478eeb3bcec6188caf02d136a7cdd9770bcd6e7830d", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "1a9106f8f6783eaf5ba09478eeb3bcec6188caf02d136a7cdd9770bcd6e7830d" }, "schema_version": "2", "status": "success" }
aeat app ledger update {transaction_id} --amount 121.00 --description \
Office chair, corrected priceaeat app ledger update {transaction_id} --amount 121.00 --description `
Office chair, corrected priceID 59316515102ea30c11d09b68fccd42fd4ed6b385f8fe1324412724fb1827dfe5 Date 2026-03-15 Amount 121 Description Office chair, corrected price Review status pending
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-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": "Office chair, corrected price", "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": "59316515102ea30c11d09b68fccd42fd4ed6b385f8fe1324412724fb1827dfe5", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "59316515102ea30c11d09b68fccd42fd4ed6b385f8fe1324412724fb1827dfe5" }, "schema_version": "2", "status": "success" }
Confirm the update replaced the amount and description.
Cada indicador substitueix completament aquell camp: escriu el valor nou complet, no una addició a l’antic. Escriu l’import com una xifra positiva: el camp de direcció indica si els diners han entrat o han sortit, i un import negatiu es rebutja. Els camps actualitzables són: date, value-date, amount, direction, currency, counterparty, description, taxable-base, iva-rate, iva-amount, irpf-category, notes i group.
Una actualització dona un ID nou al moviment: la sortida de l’actualització l’imprimeix. No cal que facis el seguiment del canvi per a les ordres de lectura: un ID que hagis anotat abans de l’actualització continua responent a history, view i track, resolent-se al moviment corregit, exactament com fa el view anterior. Per a una mutació posterior (una altra update, classify o archive), utilitza l’ID actual de la sortida de l’actualització o de list, perquè aquestes ordres actuen sobre el moviment viu.
L’actualització només funciona sobre moviments actius. Els moviments arxivats i posats de banda la rebutgen, igual que un pare de divisió: les parts actives d’una divisió es poden actualitzar amb normalitat.
Elimina un moviment¶
Eliminar suprimeix un moviment dels teus registres actius. Previsualitza-ho primer amb --dry-run i, tot seguit, elimina’l de veritat. L’id eliminat ja no es resol, que és com la seqüència confirma la supressió:
aeat --format json app ledger add --date 2026-03-15 --amount 60.50 --direction OUTGOING \
--description Wrong import --idempotency-key correct-removeaeat --format json app ledger add --date 2026-03-15 --amount 60.50 --direction OUTGOING `
--description Wrong import --idempotency-key correct-remove{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "8b33ed95365478e1093bdc08e4960210b7eb3fda5fe8f7de1144c1a9c47a8688" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "60.5", "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": "Wrong import", "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": "1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb" }, "schema_version": "2", "status": "success" }
aeat app ledger remove {transaction_id} --reason wrong file imported --dry-runaeat app ledger remove {transaction_id} --reason wrong file imported --dry-runBucket <profile-id> ID 1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb Removed False DRY RUN MODE True
aeat app ledger remove {transaction_id} --reason wrong file imported --yesaeat app ledger remove {transaction_id} --reason wrong file imported --yesBucket <profile-id> ID 1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb Removed True DRY RUN MODE False
aeat --format json app ledger view {transaction_id}aeat --format json app ledger view {transaction_id}{ "active_profile": "docs-sequence-sandbox", "command": "ledger.view", "error": { "action": { "action": null, "argument_bindings": [], "conditionality": "not_applicable", "evidence": [ { "condition_id": "cli.ledger.transaction_id.resolves", "evidence_id": "cli.ledger.transaction_id.resolves.observation", "provenance": "runtime_observation", "values": { "transaction_id_resolves": false } } ], "failed_condition_id": "cli.ledger.transaction_id.resolves", "missing_argument_names": [], "no_recovery_outcome": "operator_decision" }, "category": "REFUSED", "code": "REFUSED_FINANCIAL_LEDGER_TRANSACTION_ID_PREFIX", "context": { "prefix": "'1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb'" }, "message": "no transaction matches id prefix '1caacc8087e969e8648cc8618626fb93510b89a62186b1854f9a1893813869eb'", "retryable": false, "runbook_id": null, "trace_id": null }, "notices": [], "schema_version": "2", "status": "error" }
Confirm the removed transaction no longer resolves.
Un moviment eliminat ja no és als teus registres actius: el view final es nega perquè l’id ja no anomena una fila activa.
Divideix un moviment en parts¶
Quan un pagament cobreix dues coses diferents (per exemple, un pagament amb targeta que barreja articles de negoci i personals), divideix-lo en parts. Els imports i les descripcions s’aparellen un per part: el primer import va amb la primera descripció, i així successivament:
aeat --format json app ledger add --date 2026-03-15 --amount 121.00 --direction OUTGOING \
--description Mixed receipt --idempotency-key correct-splitaeat --format json app ledger add --date 2026-03-15 --amount 121.00 --direction OUTGOING `
--description Mixed receipt --idempotency-key correct-split{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "9f5e7d2af0b80902321e3b1202a64f33db90510f94d37b6ac8a1faae0c89d25c" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "121", "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": "Mixed receipt", "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": "e55d6600ead7d9490cb4774a0de8f8e9254866b0015b5c6898c68569e8d7a6e9", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "e55d6600ead7d9490cb4774a0de8f8e9254866b0015b5c6898c68569e8d7a6e9" }, "schema_version": "2", "status": "success" }
aeat --format json app ledger split {transaction_id} --child-amount 100.00 \
--child-description office supplies --child-amount 21.00 --child-description \
personal items --reason mixed receipt --yesaeat --format json app ledger split {transaction_id} --child-amount 100.00 `
--child-description office supplies --child-amount 21.00 --child-description `
personal items --reason mixed receipt --yes{ "active_profile": "docs-sequence-sandbox", "command": "ledger.split", "notices": [], "result": { "bucket_event_id": "2960d40c4f90dbaa25b1c462ce52210f4b2cc4ab1904c6c78c08739e821fbf1b", "bucket_id": "<bucket-id>", "child_transaction_ids": [ "9cc7a2639a30fcead52f62683cdc1c627a8b47cb43ff333f01b19e7f37245b49", "0bba86e710bdb3ccf97cd1cf82d62a5011a7107989ee76648f8ef8932c28ba0e" ], "child_transactions": [ { "display_id": "9cc7a263", "full_id": "9cc7a2639a30fcead52f62683cdc1c627a8b47cb43ff333f01b19e7f37245b49" }, { "display_id": "0bba86e7", "full_id": "0bba86e710bdb3ccf97cd1cf82d62a5011a7107989ee76648f8ef8932c28ba0e" } ], "classified_child_count": null, "llm": null, "parent_amount": null, "parent_transaction_id": "e55d6600ead7d9490cb4774a0de8f8e9254866b0015b5c6898c68569e8d7a6e9", "persisted": null, "proposed_children": null, "provenance": null, "provider": null, "reason": null, "split_group_id": "49e46bf12630b536b609999a5502582c94bc0faefcbba41cf784f89552823662" }, "schema_version": "2", "status": "success" }
aeat --format json app ledger view {first_part}aeat --format json app ledger view {first_part}{ "active_profile": "docs-sequence-sandbox", "command": "ledger.view", "notices": [], "result": { "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "100", "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": "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": "9cc7a2639a30fcead52f62683cdc1c627a8b47cb43ff333f01b19e7f37245b49", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "9cc7a2639a30fcead52f62683cdc1c627a8b47cb43ff333f01b19e7f37245b49" }, "schema_version": "2", "status": "success" }
Confirm the split produced two active child parts.
El moviment original esdevé el pare de la divisió, i les parts en porten el saldo a partir d’aleshores. La sortida de la divisió imprimeix una fila child_transactions per part, cadascuna amb un display_id curt i un full_id complet. Copia aquests ids: l’ordre de fusió els necessita per desfer la divisió.
Torna a fusionar les parts d’una divisió¶
Per desfer una divisió, torna a fusionar les parts utilitzant els ids fills que la divisió va imprimir. Anomena cada part germana: l’ordre rebutja una fusió parcial. La seqüència divideix un pagament i, tot seguit, fusiona les parts en un moviment nou:
aeat --format json app ledger merge --child-id {first_child} --child-id {second_child} \
--reason undo split --yesaeat --format json app ledger merge --child-id {first_child} --child-id {second_child} `
--reason undo split --yes{ "active_profile": "docs-sequence-sandbox", "command": "ledger.merge", "notices": [], "result": { "bucket_event_id": "24fa3aac51e5315bbb008dcbc57b80fdc41b292a4d2e504303e54e6c21354591", "bucket_id": "<bucket-id>", "merged_transaction_id": "afc12ac601d050659efe0abace313167f275923e77ba6b0a4ead868f32d7cdd9", "parent_transaction_id": "3cda9f1229ee04269a70bb6705dafeff1de2f9b14f1bfcefacba4ae277b20a9d", "source_child_ids": [ "63c3f9245937ab54232f067804fc12248abcbb1a5f9d93e9433313f8bf74b23d", "e0504b924f0b4500f0be1c70fe2958279ff9d9d0e5f61c4c66615fe9ed65ae84" ], "split_group_id": "ea58900b8c1962062494a7fb1c80418936a96ae53f2e402af33f8b212fb055c0" }, "schema_version": "2", "status": "success" }
aeat --format json app ledger view {merged}aeat --format json app ledger view {merged}{ "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-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": "Split to undo", "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": "afc12ac601d050659efe0abace313167f275923e77ba6b0a4ead868f32d7cdd9", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "afc12ac601d050659efe0abace313167f275923e77ba6b0a4ead868f32d7cdd9" }, "schema_version": "2", "status": "success" }
Confirm the merge produced a single active transaction carrying the full amount.
Les parts i el pare original passen a l’historial, i la fusió crea un moviment nou al seu lloc. Si ja no tens la sortida de la divisió, les parts són files actives: executa aeat app ledger list i llegeix-ne els ids del llistat.
Posa de banda un moviment del qual dubta¶
Posar de banda deixa un moviment a part per a més endavant. Un moviment posat de banda es manté fora del treball ordinari. La seqüència posa de banda una fila i confirma el seu nou estat del cicle de vida:
aeat --format json app ledger add --date 2026-03-15 --amount 80.00 --direction OUTGOING \
--description Awaiting invoice --idempotency-key correct-stashaeat --format json app ledger add --date 2026-03-15 --amount 80.00 --direction OUTGOING `
--description Awaiting invoice --idempotency-key correct-stash{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "78ad404abaedb72ff65685f682bb8eeb58032ac35d5553aabd48810cc6cbea06" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "80", "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": "Awaiting invoice", "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": "f5c6e7a8fce9960b36a29df9e59c7954affef5dc4bf50cd6a0aaaebc3eed8c22", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "f5c6e7a8fce9960b36a29df9e59c7954affef5dc4bf50cd6a0aaaebc3eed8c22" }, "schema_version": "2", "status": "success" }
aeat app ledger stash {transaction_id} --reason waiting for invoice --yesaeat app ledger stash {transaction_id} --reason waiting for invoice --yesID f5c6e7a8fce9960b36a29df9e59c7954affef5dc4bf50cd6a0aaaebc3eed8c22 Date 2026-03-15 Amount 80 Description Awaiting invoice Review status pending
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": "80", "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": "Awaiting invoice", "direction": "OUTGOING", "fx_rate": null, "invoice_id": null, "irpf_category": null, "iva_amount": null, "iva_category": null, "iva_rate": null, "lifecycle_state": "STASHED", "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": "f5c6e7a8fce9960b36a29df9e59c7954affef5dc4bf50cd6a0aaaebc3eed8c22", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "f5c6e7a8fce9960b36a29df9e59c7954affef5dc4bf50cd6a0aaaebc3eed8c22" }, "schema_version": "2", "status": "success" }
Confirm the transaction moved to the stashed state.
Utilitza posar de banda per a una fila que encara no has resolt i arxivar per a una fila que has deixat a part deliberadament, com ara un duplicat confirmat. Totes dues són reversibles: restaurar torna la fila a actiu. L’ordre stash imprimeix els camps del moviment però no el seu nou estat del cicle de vida, de manera que view és com confirma que el canvi ha tingut efecte.
Arxiva un moviment¶
Arxivar manté un moviment a l’historial però fora del treball ordinari: és l’opció adequada per a duplicats dels quals vols conservar un rastre deliberat. La seqüència arxiva una fila duplicada i confirma el canvi d’estat:
aeat --format json app ledger add --date 2026-03-15 --amount 80.00 --direction OUTGOING \
--description Duplicate import --idempotency-key correct-archiveaeat --format json app ledger add --date 2026-03-15 --amount 80.00 --direction OUTGOING `
--description Duplicate import --idempotency-key correct-archive{ "active_profile": "docs-sequence-sandbox", "command": "ledger.add", "notices": [], "result": { "bucket_event_ids": [ "23efbc39a82a4a3977431bce885841629c5b7721e681921b8b70c0b9d90586f1" ], "bucket_id": "<bucket-id>", "review_status": "pending", "transaction": { "amount": "80", "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": "Duplicate import", "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": "a095fd3caed8beeb0a33806f3b456822e31378e214e89067227d9f2fc6d0d6b0", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "a095fd3caed8beeb0a33806f3b456822e31378e214e89067227d9f2fc6d0d6b0" }, "schema_version": "2", "status": "success" }
aeat app ledger archive {transaction_id} --reason duplicate imported row --yesaeat app ledger archive {transaction_id} --reason duplicate imported row --yesID a095fd3caed8beeb0a33806f3b456822e31378e214e89067227d9f2fc6d0d6b0 Date 2026-03-15 Amount 80 Description Duplicate import Review status pending
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": "80", "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": "Duplicate import", "direction": "OUTGOING", "fx_rate": null, "invoice_id": null, "irpf_category": null, "iva_amount": null, "iva_category": null, "iva_rate": null, "lifecycle_state": "ARCHIVED", "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": "a095fd3caed8beeb0a33806f3b456822e31378e214e89067227d9f2fc6d0d6b0", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "a095fd3caed8beeb0a33806f3b456822e31378e214e89067227d9f2fc6d0d6b0" }, "schema_version": "2", "status": "success" }
Confirm the duplicate moved to the archived state.
Com posar de banda, l’ordre imprimeix els camps del moviment però no el seu nou estat del cicle de vida, de manera que view confirma que la fila ara diu ARCHIVED.
Restaura un moviment posat de banda o arxivat¶
Si has posat de banda o arxivat un moviment per error, restaura’l a actiu. Restaurar és la inversa de posar de banda i arxivar: la fila torna a les teves llistes i totals quotidians. La seqüència posa de banda una fila i després la restaura:
aeat app ledger restore {transaction_id} --reason stashed by mistake --yesaeat app ledger restore {transaction_id} --reason stashed by mistake --yesID d74c37a7d906824ef0171222e6c84b31dbcbcf5ed11806ce7864ff3db1267332 Date 2026-03-15 Amount 80 Description Stashed by mistake Review status pending
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": "80", "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": "Stashed by mistake", "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": "d74c37a7d906824ef0171222e6c84b31dbcbcf5ed11806ce7864ff3db1267332", "usage_ratio_id": null, "value_date": null, "value_in_eur": null }, "transaction_id": "d74c37a7d906824ef0171222e6c84b31dbcbcf5ed11806ce7864ff3db1267332" }, "schema_version": "2", "status": "success" }
Confirm the restored transaction is active again.
Restaurar accepta el mateix prefix d’id que accepten les altres ordres. Per recuperar diverses files posades de banda per error, restaura cadascuna per id: no cal que restableixis tot el ledger. list no té cap filtre de només posades de banda, de manera que identifiques les files posades de banda a partir dels ids que has posat de banda, o de l’estat del cicle de vida de cada fila que mostra view.
Restaurar rebutja una fila que ja és activa, i rebutja una fila el període de la qual ja has presentat: restaurar-la canviaria les dades d’entrada darrere d’una declaració que has presentat. Restaura’n una d’aquestes només després d’haver corregit la presentació mitjançant una rectificació.
Revisa què ha canviat¶
Cada correcció queda registrada. Per veure cada acció sobre un moviment en ordre, executa ledger history. La seqüència divideix un pagament i, tot seguit, llegeix l’historial amb l’indicador de germans per seguir tota la família de la divisió:
aeat app ledger history {transaction_id}aeat app ledger history {transaction_id}Bucket <profile-id> ID 1fa07beedceb057f55a3aab56aa756e9dab983c332573ee6bdb1e77bb0e16570 Event count 2 2026-04-01T09:00:00+00:00 ledger.transaction.split 0dd721341b0758df0aa4baaab3e24ad7dd79c3a2f90f5f2fc17856dfe491a21f 2026-04-01T09:00:00+00:00 ledger.transaction.created 808c7c37fdc6678905928147c14d45cb7e28450f8c87c917c27a3b61f6406388
aeat --format json app ledger history {transaction_id} --include-split-siblingsaeat --format json app ledger history {transaction_id} --include-split-siblings{ "active_profile": "docs-sequence-sandbox", "command": "ledger.history", "notices": [], "result": { "bucket_id": "<bucket-id>", "event_count": 2, "events": [ { "actor": "<profile-id>", "bucket_id": "<bucket-id>", "event_id": "0dd721341b0758df0aa4baaab3e24ad7dd79c3a2f90f5f2fc17856dfe491a21f", "event_type": "ledger.transaction.split", "object_id": "1fa07beedceb057f55a3aab56aa756e9dab983c332573ee6bdb1e77bb0e16570", "object_type": "ledger_transaction", "occurred_at": "2026-04-01T09:00:00Z", "payload": { "child_count": "2", "parent_transaction_id": "1fa07beedceb057f55a3aab56aa756e9dab983c332573ee6bdb1e77bb0e16570", "reason": "mixed receipt", "source_command": "aeat app ledger split", "split_group_id": "4d2d96d6579ac45716e2561a4bc5e7c73876e0a76843db90f5045ebc6dc7a026" }, "payload_version": 1 }, { "actor": "<profile-id>", "bucket_id": "<bucket-id>", "event_id": "808c7c37fdc6678905928147c14d45cb7e28450f8c87c917c27a3b61f6406388", "event_type": "ledger.transaction.created", "object_id": "1fa07beedceb057f55a3aab56aa756e9dab983c332573ee6bdb1e77bb0e16570", "object_type": "ledger_transaction", "occurred_at": "2026-04-01T09:00:00Z", "payload": { "amount": "121.00", "currency": "EUR", "direction": "OUTGOING", "source_command": "aeat app ledger add" }, "payload_version": 1 } ], "transaction_id": "1fa07beedceb057f55a3aab56aa756e9dab983c332573ee6bdb1e77bb0e16570" }, "schema_version": "2", "status": "success" }
Confirm the history records the transaction's events in order.
L’historial llista cada acció en ordre amb la seva marca de temps i la referència de l’esdeveniment. Detalls com ara la raó i els nous valors són a la sortida JSON. Per veure un valor abans d’un canvi, llegeix els esdeveniments anteriors de l’historial. La referència de la CLI tracta cada camp que mostra l’historial.
Evidència i correccions¶
Un registre d’evidència adjunt (un rebut o una factura) no s’elimina quan corregeixes un moviment. Després d’una divisió o una fusió, comprova els nous moviments i torna a adjuntar l’evidència on calgui. La guia d’evidència tracta com adjuntar i comprovar l’evidència.
Comença de nou com a últim recurs¶
Si el ledger no té reparació (per exemple, després d’importar els fitxers incorrectes repetidament), buida’l i reconstrueix-lo. Previsualitza primer i després confirma. La seqüència registra una fila, previsualitza el restabliment, buida el ledger i confirma que no queda res:
aeat app ledger reset --reason re-importing all statements --dry-runaeat app ledger reset --reason re-importing all statements --dry-runBucket <profile-id> Rows 1 Reset False DRY RUN MODE True
aeat app ledger reset --reason re-importing all statements --yesaeat app ledger reset --reason re-importing all statements --yesBucket <profile-id> Rows 1 Reset True DRY RUN MODE False
aeat --format json app ledger listaeat --format json app ledger list{ "active_profile": "docs-sequence-sandbox", "command": "ledger.list", "notices": [], "result": { "bucket_id": "<bucket-id>", "limit": null, "offset": 0, "rows": [], "shown": 0, "total": 0, "truncated": false }, "schema_version": "2", "status": "success" }
Confirm the reset cleared the active ledger.
El restabliment buida tot el ledger del perfil actiu. Utilitza la guia de moviments per reconstruir-lo a partir dels teus extractes.
On obtenir ajuda¶
Si una ordre es nega o falla, consultes la guia de resolució de problemes. Els termes desconeguts s’expliquen al glossari. Abans de compartir la sortida d’una ordre amb ningú, elimina els identificadors fiscals com ara el teu NIF, CIF, DNI, NIE o NII.
Passos següents¶
Importa i gestiona els moviments: incorpora moviments nous.
Adjunta evidència als moviments: recolza les teves correccions amb rebuts.
Classifica els moviments: prepara les files corregides per als càlculs fiscals.
Referència de la CLI: detall complet dels camps de cada ordre del ledger.