Clasificar transacciones

Esta página cubre la clasificación de las transacciones del ledger: decidir si una fila es de la actividad, personal o mixta, añadir la categoría y los campos fiscales que necesita un cálculo, registrar los porcentajes de uso mixto, la clasificación en bloque y por reglas, y la cola de revisión que enumera todo lo que sigue esperando una decisión. Úsala después de que las transacciones estén en el ledger del perfil activo: las filas importadas tienen fechas e importes, pero todavía no dicen cómo debe tratarlas el cálculo del impuesto.

Clasificar una transacción solo cambia el registro de tu ordenador. No envía nada a la Agencia Tributaria (AEAT).

Antes de empezar

Necesitas:

  • Un perfil de contribuyente activo. Todas las órdenes de abajo trabajan sobre el perfil activo; si no hay ninguno establecido, la orden se niega. Consulta Configurar tu perfil de contribuyente.

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

  • Un ledger con transacciones. Consulta Importar y gestionar transacciones para importar un extracto bancario o añadir filas a mano.

La ayuda de la CLI y los textos de error se muestran en español, aunque esta guía esté en inglés. Cuando un paso te remita a --help, cuenta con nombres de opción en español.

Revisa la fila primero

Localiza el id de la transacción y luego examina la fila antes de clasificarla. La secuencia importa el trimestre estándar y examina el gasto sin clasificar:

1List the rows that still need 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
2Inspect the row before changing it.
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": "pending",
    "transaction": {
      "amount": "605",
      "attachment_ids": [],
      "booked_date": "2026-02-11",
      "business_classification": "NOT_YET_PROCESSED",
      "business_pct": null,
      "category_id": null,
      "classification_confidence": null,
      "classification_reason": "",
      "classified_at": null,
      "classified_by": "auto",
      "counterparty": "",
      "counterparty_country": null,
      "counterparty_identification_state": null,
      "created_at": "2026-04-01T09:00:00+00:00",
      "currency": "EUR",
      "date": "2026-02-11",
      "description": "Compra de material de oficina proveedor local",
      "direction": "OUTGOING",
      "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 row is still unclassified before you decide.

Usa la descripción, el importe, la contraparte, el documento de origen y el contexto de la actividad para decidir cómo clasificar la fila.

Elige la clasificación

Usa uno de los estados de clasificación del ledger que admite la ayuda de la orden:

  • BUSINESS para una transacción totalmente relacionada con la actividad

  • PERSONAL para una transacción personal que no debe alimentar los cálculos fiscales

  • MIXED para una transacción en parte de la actividad y en parte personal

Usa solo estos tres valores. Cadrumo establece los demás automáticamente.

Elige una categoría para los gastos

Enumera los ids de categoría admitidos y luego clasifica una fila de gasto con uno. Las filas de gasto normalmente necesitan un id de categoría antes de que un modelo pueda calcular a partir de ellas:

1List the accepted category ids.
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 expense as business 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 carries the business classification and 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 expense is classified as business with a category.

Para el dinero que has recibido (ingresos), Cadrumo no suele necesitar una categoría. Calcula los totales de ingresos automáticamente.

Usa OUTGOING más una categoría de gasto para las compras a proveedores y otros gastos deducibles. Usa INCOMING para las facturas emitidas, los cobros de clientes o los servicios prestados a clientes. Si además llevas registros de facturas por separado, usa aeat app ledger invoice con --kind received para las facturas de proveedor y --kind issued para las facturas a clientes.

Añade campos fiscales cuando haga falta

Si una fila necesita campos fiscales regulados, añade solo los campos que correspondan. La secuencia clasifica el gasto con su base imponible, su tipo y su cuota de IVA:

1Classify the expense with the IVA breakdown from the invoice.
aeat app ledger classify e3eeac5e --classification BUSINESS --category-id \
  material_oficina --taxable-base 500.00 --iva-rate 0.21 --iva-amount 105.00
aeat app ledger classify e3eeac5e --classification BUSINESS --category-id `
  material_oficina --taxable-base 500.00 --iva-rate 0.21 --iva-amount 105.00
ID	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d
Date	2026-02-11
Amount	605
Description	Compra de material de oficina proveedor local
Review status	reviewed
2Confirm the taxable base and IVA fields were recorded.
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": "105",
      "iva_category": null,
      "iva_rate": "0.21",
      "lifecycle_state": "ACTIVE",
      "m210_income_classification": null,
      "modified_at": "2026-04-01T09:00:00+00:00",
      "notes": "",
      "prorrata_reference": null,
      "purchase_invoice_evidence_id": null,
      "source_jurisdiction": null,
      "taxable_base": "500",
      "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 taxable base and IVA fields were recorded on the row.

Los campos habituales incluyen la base imponible, el tipo de IVA, la cuota de IVA, la categoría de IVA, la categoría de IRPF y el Estado miembro de la UE de la contraparte para los casos de IVA intracomunitario. Usa aeat app ledger classify --help para la lista exacta de opciones actual.

Para el IVA interior ordinario, usa la base imponible, el tipo y la cuota que muestra la factura. Por ejemplo, una compra de 121,00 EUR con un 21 por ciento de IVA suele llevar --taxable-base 100.00 --iva-rate 0.21 --iva-amount 21.00.

La mayoría de las compras al tipo general del 21% no necesitan --iva-category. Añádelo solo en casos especiales: tipo reducido (alimentos, libros), operaciones exentas, compras a proveedores de la UE o recargo de equivalencia. Ejecuta aeat app ledger classify --help para ver los valores admitidos.

Clasifica las transacciones de uso mixto

Una transacción de uso mixto es la que usas en parte para la actividad y en parte de forma personal, como una factura de teléfono, un gasto del coche o un gasto de oficina en casa. Registra el porcentaje de la actividad para que el cálculo cuente solo la parte deducible. El reparto puede venir de tres sitios, en orden creciente de fundamento: un porcentaje en un único registro, un porcentaje predeterminado guardado para toda una categoría, o un porcentaje calculado a partir de tus datos registrados (por ejemplo, la superficie registrada de la oficina en casa frente al tamaño de tu vivienda). Los tres conservan solo la parte de un gasto que pertenece de verdad a la actividad.

Una fila MIXED necesita una referencia de proporcionalidad antes de que un modelo pueda calcular a partir de ella. La referencia es un porcentaje de categoría guardado que se aplica mediante --usage-ratio-id. Un --business-pct a secas registra un porcentaje pero no deja la fila lista; la comprobación previa sigue informando de missing_proportionality_reference hasta que la fila lleve --usage-ratio-id.

Para las órdenes de una sola fila, --usage-ratio-id está en el verbo allocate (y en add), no en classify. Su valor es el id de la categoría de gasto, y esa misma categoría ya debe tener un porcentaje guardado. La secuencia comprueba las categorías elegibles, guarda un porcentaje y asigna la parte en una fila:

1Check which categories accept a ratio.
aeat app ledger ratios eligible
aeat app ledger ratios eligible
bucket	<profile-id>
count	15
amortizacion_vivienda_afecto	usage_ratio_home_area	default=-	override=.
arrendamiento_vivienda_afecto	usage_ratio_home_area	default=-	override=.
comunidad_vivienda_afecto	usage_ratio_home_area	default=-	override=.
ibi_vivienda_afecto	usage_ratio_home_area	default=-	override=.
suministros_home_office_agua	usage_ratio_home_area	default=-	override=.
suministros_home_office_gas	usage_ratio_home_area	default=-	override=.
suministros_home_office_internet	usage_ratio_home_area	default=-	override=.
suministros_home_office_luz	usage_ratio_home_area	default=-	override=.
telefonia_fija	usage_ratio_home_area	default=-	override=.
telefonia_movil	usage_ratio_personal	default=-	override=.
vehiculo_combustible	usage_ratio_personal	default=-	override=.
vehiculo_mantenimiento	usage_ratio_personal	default=-	override=.
vehiculo_parking	usage_ratio_personal	default=-	override=.
vehiculo_peaje	usage_ratio_personal	default=-	override=.
vehiculo_seguro	usage_ratio_personal	default=-	override=.
2Save the ratio for the category, as a percentage from 0 to 1.
aeat app ledger ratios set telefonia_movil 0.5
aeat app ledger ratios set telefonia_movil 0.5
bucket	<profile-id>
telefonia_movil	0.5
3Allocate the share on the row, naming the same category for both flags.
aeat app ledger allocate {transaction_id} --business-pct 0.5 --usage-ratio-id \
  telefonia_movil --category-id telefonia_movil
aeat app ledger allocate {transaction_id} --business-pct 0.5 --usage-ratio-id `
  telefonia_movil --category-id telefonia_movil
ID	80f1bbebb9176b41674513c8a1c593f2ba8e6304d6fa0a9bfe104dd2f081a73e
Date	2026-03-15
Amount	60.5
Description	Factura movil
Review status	reviewed
4Confirm the row is now mixed with the allocated share.
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": "reviewed",
    "transaction": {
      "amount": "60.5",
      "attachment_ids": [],
      "booked_date": "2026-03-15",
      "business_classification": "MIXED",
      "business_pct": "0.5",
      "category_id": "telefonia_movil",
      "classification_confidence": "1",
      "classification_reason": "aeat app ledger allocate",
      "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-03-15",
      "description": "Factura movil",
      "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": "80f1bbebb9176b41674513c8a1c593f2ba8e6304d6fa0a9bfe104dd2f081a73e",
      "usage_ratio_id": "telefonia_movil",
      "value_date": null,
      "value_in_eur": null
    },
    "transaction_id": "80f1bbebb9176b41674513c8a1c593f2ba8e6304d6fa0a9bfe104dd2f081a73e"
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the mixed-use row carries the allocated business share.

El --usage-ratio-id de una fila debe nombrar una categoría elegible para porcentaje (las que enumera ratios eligible, como telefonia_movil o una categoría de suministros de oficina en casa), y esa misma categoría se pasa como --category-id. El valor de --business-pct debe coincidir con el porcentaje guardado para esa categoría. La clasificación sigue el porcentaje automáticamente: una asignación de 0.5 pasa a MIXED, una asignación de 1 pasa a BUSINESS y una asignación de 0 pasa a PERSONAL.

Enumera o comprueba los porcentajes guardados en cualquier momento. La secuencia guarda un porcentaje, enumera los porcentajes guardados y los valida:

1Save a ratio for a ratio-eligible category.
aeat app ledger ratios set telefonia_movil 0.5
aeat app ledger ratios set telefonia_movil 0.5
bucket	<profile-id>
telefonia_movil	0.5
2List the saved ratios.
aeat app ledger ratios list
aeat app ledger ratios list
bucket	<profile-id>
count	1
telefonia_movil	0.5
3Confirm the saved ratios are internally consistent.
aeat --format json app ledger ratios validate
aeat --format json app ledger ratios validate
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.ratios.validate",
  "notices": [],
  "result": {
    "bucket_id": "<bucket-id>",
    "eligible_count": 15,
    "findings": [],
    "missing_overrides": [],
    "overrides_count": 1,
    "profile_present": true
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the saved ratios validate cleanly.

Elimina un porcentaje de categoría que ya no quieras con aeat app ledger ratios unset <category-id>.

Para los gastos de oficina en casa, guarda un porcentaje para la categoría de oficina en casa correspondiente y asígnalo como arriba. Los porcentajes de oficina en casa siguen el flujo de porcentaje manual o guardado; mantén primero correctos los datos censales de tu perfil; consulta Mantener los datos censales del Modelo 036 en tu perfil.

Clasifica muchas filas desde un CSV

Para la revisión en bloque, classify --file lee un CSV con las columnas transaction_id, classification y datos de clasificación opcionales como category_id, business_pct, usage_ratio_id, las columnas de base imponible e IVA, iva_category e irpf_category. Prepara un CSV reducido que contenga solo las filas que pretendes cambiar, una fila por transacción:

transaction_id,classification,category_id,business_pct,usage_ratio_id
<business-expense-id>,BUSINESS,<category-id>,,
<mixed-expense-id>,MIXED,<category-id>,0.5,<category-id>
<private-row-id>,PERSONAL,,,

La secuencia de abajo importa el trimestre, enumera las filas que aún necesitan una decisión, exporta una instantánea de revisión con la que trabajar, aplica un CSV preparado y confirma el resultado:

1Select the rows still needing a decision.
aeat app ledger list --filter period=1T --filter year=2026 --filter \
  classification=NOT_YET_PROCESSED
aeat app ledger list --filter period=1T --filter year=2026 --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
2Export the period as a review snapshot to work from.
aeat app ledger export --output ./ledger-2026-q1.csv --year 2026 --period 1T
aeat app ledger export --output ./ledger-2026-q1.csv --year 2026 --period 1T
Bucket	<profile-id>
Export ID	5f0ddcff2e977990b1b5fd3fc6e107cf9b3cb3b5f7ac82e87d072c77fed11cf4
Rows	2
SHA-256	0becceaa2ef5f6edba6a89f5fee123b09f1a044d477005dd381cecb52f66213d
Output	ledger-2026-q1.csv
3Apply the prepared classification CSV to the quarter's rows.
aeat app ledger classify --file fixtures/classifications-2026-1t.csv
aeat app ledger classify --file fixtures/classifications-2026-1t.csv
bulk classify: 2 rows, 2 applied, 0 skipped, 0 failed
4Confirm the expense row is now classified as business.
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 --file",
      "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 CSV batch classified the quarter's rows.

Usa la vía del CSV cuando la revisión filtrada muestre muchas filas que puedas clasificar con seguridad a partir de sus descripciones, contrapartes y documentos de origen. Conserva una copia del archivo. Te da un registro de cómo clasificaste ese periodo por si más adelante te piden justificar tu declaración. Esta vía no actualiza en bloque importes, descripciones, valores de IVA, notas, adjuntos ni el estado de división/fusión; usa el flujo de transacciones para esas ediciones a nivel de fila.

Aplica reglas guardadas automáticamente

Las reglas clasifican automáticamente las transacciones cuya descripción contiene una palabra o frase que tú especificas. La coincidencia no distingue mayúsculas de minúsculas. La secuencia añade una regla, enumera las reglas, muestra una vista previa del efecto y luego la aplica:

1Add a rule that classifies matching descriptions.
aeat app ledger rule add --description-pattern material --classification BUSINESS \
  --category-id material_oficina
aeat app ledger rule add --description-pattern material --classification BUSINESS `
  --category-id material_oficina
rule_id	16719284a6b5e971...
pattern	material
classification	BUSINESS
priority	100
2List the stored rules.
aeat app ledger rule list
aeat app ledger rule list
priority	classification	pattern	rule_id
100	BUSINESS	material	16719284a6b5e971...
3Preview the effect without changing any rows.
aeat app ledger rule apply --dry-run
aeat app ledger rule apply --dry-run
dry-run: 0 transaction(s) would be classified
4Apply the rule to matching rows.
aeat --format json app ledger rule apply
aeat --format json app ledger rule apply
{
  "active_profile": "docs-sequence-sandbox",
  "command": "ledger.rule.apply",
  "notices": [],
  "result": {
    "applied": [],
    "count": null,
    "dry_run": null,
    "matched": 0,
    "no_match": 0,
    "rules_evaluated": 1,
    "skipped_already_classified": 0,
    "transactions_scanned": 0,
    "would_match": null
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the stored rule is registered and applies cleanly.

Ejecuta --dry-run primero. Añade --reaffirm solo si quieres que la regla sobrescriba clasificaciones que ya hayas establecido a mano.

Usa una sugerencia de un LLM

Cadrumo puede usar un modelo de lenguaje configurado para sugerir cómo clasificar cada transacción. La sugerencia es un punto de partida. Debes confirmarla o corregirla. No rellena importes fiscales como la base imponible, el tipo de IVA o la categoría de IRPF.

Usa Clasificar transacciones con un LLM para el flujo completo de proveedor, vista previa, aplicación y anulación.

Ver todo lo que aún necesita una decisión

La cola de revisión es una única lista, para todo el perfil, de todo lo que aún reclama tu atención antes de una presentación: transacciones sin clasificar, registros de facturas sin conciliar o en disputa, y hallazgos de verificación en borradores de modelos. Cada fila nombra la orden exacta que la resuelve, así que la cola es una lista de tareas que puedes recorrer de arriba abajo. La cola es de solo lectura; los elementos se resuelven cuando corriges el registro subyacente con la orden que nombra la fila. La secuencia importa el trimestre y luego lee la cola:

1Read the profile-wide review queue.
aeat --format json app review queue
aeat --format json app review queue
{
  "active_profile": "docs-sequence-sandbox",
  "command": "review.queue",
  "notices": [],
  "result": {
    "operation": "review.queue",
    "rows": [
      {
        "affected_object_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "blocking": false,
        "bucket_id": "<bucket-id>",
        "canonical_next_command": "aeat app ledger review 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "current_owner_surface": "app ledger",
        "item_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "kind": "ledger_transaction",
        "legal_refs": [],
        "modelo": null,
        "period": "2026-02",
        "reason": "Transaction pending classification",
        "severity": "normal",
        "since": "2026-02-10T00:00:00+00:00",
        "source_kind": "ledger_transaction",
        "state": "pending",
        "summary": "Transaction pending classification"
      },
      {
        "affected_object_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "blocking": false,
        "bucket_id": "<bucket-id>",
        "canonical_next_command": "aeat app ledger review e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "current_owner_surface": "app ledger",
        "item_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "kind": "ledger_transaction",
        "legal_refs": [],
        "modelo": null,
        "period": "2026-02",
        "reason": "Transaction pending classification",
        "severity": "normal",
        "since": "2026-02-11T00:00:00+00:00",
        "source_kind": "ledger_transaction",
        "state": "pending",
        "summary": "Transaction pending classification"
      }
    ]
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the review queue lists the pending work.

Cada fila muestra el id del elemento, su tipo, el registro afectado, el periodo, una severidad (critical, high, normal o info) y una última columna con la orden que ejecutar a continuación. Acota la lista por tipo, modelo o estado:

1Narrow the queue to ledger-transaction items.
aeat app review queue --kind ledger_transaction
aeat app review queue --kind ledger_transaction
ID	Kind	Source kind	Object	Period	Severity	Next
71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	ledger_transaction	ledger_transaction	71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518	2026-02	normal	aeat app ledger review 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518
e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	ledger_transaction	ledger_transaction	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d	2026-02	normal	aeat app ledger review e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d
2Narrow the queue to modelo findings for one modelo.
aeat app review queue --kind modelo_finding --modelo 303
aeat app review queue --kind modelo_finding --modelo 303
ID	Kind	Source kind	Object	Period	Severity	Next
No items pending review.
3Show every state, not only pending items.
aeat --format json app review queue --state all
aeat --format json app review queue --state all
{
  "active_profile": "docs-sequence-sandbox",
  "command": "review.queue",
  "notices": [],
  "result": {
    "operation": "review.queue",
    "rows": [
      {
        "affected_object_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "blocking": false,
        "bucket_id": "<bucket-id>",
        "canonical_next_command": "aeat app ledger review 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "current_owner_surface": "app ledger",
        "item_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518",
        "kind": "ledger_transaction",
        "legal_refs": [],
        "modelo": null,
        "period": "2026-02",
        "reason": "Transaction pending classification",
        "severity": "normal",
        "since": "2026-02-10T00:00:00+00:00",
        "source_kind": "ledger_transaction",
        "state": "all",
        "summary": "Transaction pending classification"
      },
      {
        "affected_object_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "blocking": false,
        "bucket_id": "<bucket-id>",
        "canonical_next_command": "aeat app ledger review e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "current_owner_surface": "app ledger",
        "item_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d",
        "kind": "ledger_transaction",
        "legal_refs": [],
        "modelo": null,
        "period": "2026-02",
        "reason": "Transaction pending classification",
        "severity": "normal",
        "since": "2026-02-11T00:00:00+00:00",
        "source_kind": "ledger_transaction",
        "state": "all",
        "summary": "Transaction pending classification"
      }
    ]
  },
  "schema_version": "2",
  "status": "success"
}

Confirm the queue can be narrowed by kind.

Los tokens admitidos de --kind son ledger_transaction, purchase_invoice_evidence, payable_invoice, collectible_invoice y modelo_finding. El estado predeterminado es pending. Examina un elemento por completo, incluida la orden siguiente sugerida, con aeat app review view <item-id>. Los hallazgos de modelo están fundamentados en reglas del registro; añade --explain para mostrar las referencias legales, o usa la opción global --format json (antes de la orden) para obtener un campo legal_refs en cada fila.

Los elementos de transacción se resuelven cuando clasificas la fila (esta página). Los elementos de factura se resuelven cuando vinculas o actualizas la factura; consulta Adjuntar facturas y recibos. Los hallazgos de modelo se resuelven cuando corriges los valores informados y vuelves a verificar; consulta Verificar una presentación.

Confirma la preparación

Ejecuta la comprobación previa después de clasificar. La secuencia importa y clasifica el trimestre, y luego ejecuta la comprobación previa y lee el estado del ledger:

1Run preflight for the target period.
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 preflight reports the classified quarter's readiness.

La comprobación previa nombra las filas que aún necesitan categoría, base imponible, cuota de IVA, tipo de IVA, moneda o referencia de proporcionalidad.

Corrige una clasificación

Vuelve a ejecutar classify sobre el mismo id de transacción. Una decisión manual reemplaza la clasificación anterior. La secuencia clasifica una fila como de la actividad y luego la corrige a personal:

1Re-classify the same row as personal.
aeat app ledger classify e3eeac5e --classification PERSONAL
aeat app ledger classify e3eeac5e --classification PERSONAL
ID	e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d
Date	2026-02-11
Amount	605
Description	Compra de material de oficina proveedor local
Review status	reviewed
2Confirm the row now reads personal.
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": "PERSONAL",
      "business_pct": null,
      "category_id": null,
      "classification_confidence": "1",
      "classification_reason": "aeat app ledger classify",
      "classified_at": "2026-04-01T09:00:00+00:00",
      "classified_by": "manual",
      "counterparty": "",
      "counterparty_country": null,
      "counterparty_identification_state": null,
      "created_at": "2026-04-01T09:00:00+00:00",
      "currency": "EUR",
      "date": "2026-02-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 re-classification replaced the previous decision.

Examina la fila de nuevo con ledger view antes de calcular.

Próximos pasos