Revisa los cálculos con Google Sheets¶
Esta página cubre la revisión en hoja de cálculo del cálculo de un modelo: exportarlo a Google Sheets, comprobar cómo se llega a cada total con fórmulas en vivo y traer de vuelta sus ediciones revisadas como entradas de presentación tipadas. La descarga devuelve esas ediciones sin persistirlas. Este flujo sirve para revisar los valores calculados una vez que tu perfil y tus movimientos están listos. No es una herramienta de importación de extractos bancarios ni de edición masiva.
Google Sheets es la superficie de revisión. El código también contiene un serializador .xlsx sin conexión, pero la superficie de comandos de operador actual no lo expone. Usa Google Sheets cuando quieras revisar y ajustar.
Los comandos de configuración local de esta página (estado, vinculación de carpeta, cierre de sesión) y las comprobaciones de preparación del ledger se ejecutan en vivo en el momento de la compilación. Los comandos que acceden a Google Drive y Sheets se ejecutan contra tu propia cuenta autorizada en lugar del entorno de pruebas de la documentación, por lo que se muestran como marcos ilustrativos.
Antes de empezar¶
Necesita:
un perfil activo; consulta Configura tu perfil de contribuyente
datos de movimientos clasificados; consulta Importa y gestiona los movimientos
un modelo y un periodo lo bastante listos para calcular
un fichero de credenciales de la API de Google (un JSON de cliente OAuth de escritorio de la Consola de Google Cloud)
el ID de una carpeta de Google Drive donde Cadrumo deba crear las hojas de cálculo (copia el ID de la URL de la carpeta en Google Drive)
Cadrumo crea su carpeta cadrumo-vault/ dentro de esa carpeta de Drive. No usa una carpeta aeat-vault/ más antigua; exporta un libro nuevo antes de traer ediciones a Cadrumo.
Configura el acceso a Google¶
Registra el cliente OAuth de escritorio para el perfil activo y ejecuta el flujo de consentimiento. Ambos acceden a Google, así que aquí son ilustrativos:
aeat config google register --client-json ./client_secret.jsonaeat config google register --client-json ./client_secret.jsonaeat config google loginaeat config google loginComprueba el estado de Google y establece la carpeta de Drive donde Cadrumo creará las hojas de cálculo. Estos son comandos de configuración local, así que aquí se ejecutan. En un perfil sin configurar, el estado muestra «no conectado», y la carpeta que establece se lee de vuelta literalmente:
aeat --format json config google statusaeat --format json config google status{ "active_profile": "docs-sequence-sandbox", "command": "config.google.status", "notices": [], "result": { "account_email": null, "client_id": null, "client_registered": false, "granted_scopes": [], "issued_at": null, "last_refresh_at": null, "operation": "config.google.status", "profile": "<profile-id>", "reauth_required": null, "session_present": false }, "schema_version": "2", "status": "success" }
aeat config google folder set docs-folder-123aeat config google folder set docs-folder-123operation config.google.folder.set profile <profile-id> root_folder_id docs-folder-123
aeat --format json config google folder viewaeat --format json config google folder view{ "active_profile": "docs-sequence-sandbox", "command": "config.google.folder.view", "notices": [], "result": { "configured": true, "operation": "config.google.folder.view", "profile": "<profile-id>", "root_folder_id": "docs-folder-123" }, "schema_version": "2", "status": "success" }
Confirm the Drive folder binding reads back the value you set.
Prueba la conexión una vez registrado el cliente OAuth. La prueba accede a Google, así que aquí es ilustrativa:
aeat config google probeaeat config google probeLa integración con Google está delimitada por el perfil. Si cambia de perfil, comprueba de nuevo el estado de Google y la vinculación de la carpeta.
Exporta un libro de cálculo¶
Exporta la superficie de cálculo del registro para un modelo, un año y un periodo. La exportación crea un libro de Google Sheets dentro del área cadrumo-vault/ configurada en Drive:
aeat app modelo spreadsheet push --modelo 303 --year 2026 --period 1Taeat app modelo spreadsheet push --modelo 303 --year 2026 --period 1TEs una superficie de revisión de cálculos, no una exportación de extractos bancarios. Usa aeat app ledger export cuando necesites una instantánea en CSV, JSONL o XLSX de las filas del ledger.
Usa --prefill-relations solo cuando quieras que la hoja de cálculo incluya valores arrastrados de presentaciones relacionadas, como resúmenes anuales o arrastres del trimestre anterior.
Trae de vuelta sus ediciones¶
Después de revisar o editar el libro, trae de vuelta las ediciones tipadas desde la hoja. Añade --assemble-observations cuando quieras que la salida del comando incluya los datos editados a nivel de fila ensamblados como observaciones estructuradas. El comando no persiste esas observaciones:
aeat app modelo spreadsheet pull --modelo 303 --year 2026 --period 1T --spreadsheet-id \
<spreadsheet-id>aeat app modelo spreadsheet pull --modelo 303 --year 2026 --period 1T --spreadsheet-id `
<spreadsheet-id>El comando de descarga comprueba que la hoja de cálculo pertenece al perfil actual y coincide con el periodo de presentación esperado. Si se niega, vuelve a exportar y reintente desde la nueva hoja de cálculo.
Calcula los valores de las casillas desde la hoja¶
Ejecuta compute cuando quieras que Cadrumo calcule los valores de las casillas a partir de las ediciones de la hoja. Toma las celdas editadas por el operador, ejecuta el motor de cálculo sobre ellas y muestra el resultado. No persiste nada:
aeat app modelo spreadsheet calculate --modelo 303 --year 2026 --period 1T \
--spreadsheet-id <spreadsheet-id>aeat app modelo spreadsheet calculate --modelo 303 --year 2026 --period 1T `
--spreadsheet-id <spreadsheet-id>El comando compute comprueba que la hoja de cálculo coincide con el periodo de presentación esperado. Si se niega, vuelve a exportar y reintente desde la nueva hoja de cálculo.
Comprueba el cálculo de la hoja de cálculo¶
Ejecuta el comando de verificación de las calc-sheets para el mismo modelo, año y periodo. Si tiene un JSON de escenario con entradas del operador y salidas esperadas de la Agencia Estatal de Administración Tributaria (AEAT), pásalo explícitamente con --scenario:
aeat app modelo spreadsheet verify --modelo 303 --year 2026 --period 1Taeat app modelo spreadsheet verify --modelo 303 --year 2026 --period 1Taeat app modelo spreadsheet verify --modelo 303 --year 2026 --period 1T --scenario \
./scenario.jsonaeat app modelo spreadsheet verify --modelo 303 --year 2026 --period 1T --scenario `
./scenario.jsonLa verificación compara las superficies de cálculo implementadas por la aplicación. No presenta ninguna declaración ante la AEAT.
Respalda tus registros cifrados en Drive¶
Conserva una copia fuera de la máquina de tus registros cifrados replicándolos en la carpeta de Drive configurada. Previsualiza primero con --dry-run; informa de qué se subiría por cada área de almacenamiento sin cambiar nada. Acota un envío grande con --namespace o --limit:
aeat config profile archive push --dry-runaeat config profile archive push --dry-runaeat config profile archive pushaeat config profile archive pushSolo se sube el texto cifrado. Tus registros salen de la máquina exactamente como están cifrados en disco, y la clave maestra nunca sale de su ordenador, así que la copia de Drive es ilegible sin ella. La réplica es unidireccional: Cadrumo escribe la copia y nunca lee Drive de vuelta como fuente de verdad para tus registros.
Cierra la sesión de Google¶
Borra la sesión de Google del perfil activo. El cierre de sesión es un comando local, así que aquí se ejecuta. Elimina el token de sesión guardado y sus metadatos. El cliente OAuth registrado se conserva a propósito, de modo que un aeat config google login posterior pueda iniciar sesión de nuevo sin volver a importar el JSON de la Consola de Cloud:
aeat --format json config google logoutaeat --format json config google logout{ "active_profile": "docs-sequence-sandbox", "command": "config.google.logout", "notices": [], "result": { "client_preserved": true, "metadata_removed": false, "operation": "config.google.logout", "profile": "<profile-id>", "token_removed": false }, "schema_version": "2", "status": "success" }
Confirm the Google session clears for the active profile.
Dónde encaja esto¶
Usa esto después de la revisión y la clasificación de los movimientos. Confirma que el periodo está listo antes de fiarse del libro de cálculo:
aeat app ledger preflight --year 2026 --period 1Taeat app ledger preflight --year 2026 --period 1Tbucket <profile-id> period 2026 1T checked 2 issues 2 ready false issue 71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518 missing_business_classification business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation issue e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d missing_business_classification business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation
aeat --format json app ledger status --year 2026 --period 1Taeat --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": "0", "business_income_total": "0", "business_net_total": "0", "checked_transaction_count": 2, "pending_review_count": 2, "period": { "code": "1T", "filing_year": 2026 }, "readiness_issue_count": 2, "readiness_issues": [ { "business_classification": "NOT_YET_PROCESSED", "category_id": null, "detail": "business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation", "iva_amount": null, "iva_rate": null, "reason": "missing_business_classification", "taxable_base": null, "transaction_id": "71a5db2bb891df295bee72544c40497d24d5c8cfc7edab745ce7339dcf8d6518", "transaction_present": true }, { "business_classification": "NOT_YET_PROCESSED", "category_id": null, "detail": "business classification 'NOT_YET_PROCESSED' is not ready for modelo calculation", "iva_amount": null, "iva_rate": null, "reason": "missing_business_classification", "taxable_base": null, "transaction_id": "e3eeac5e306efe4e82a72896e92e7c236245ec85348834b2c10b120c67fe087d", "transaction_present": true } ], "ready": false, "reviewed_count": 0, "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 before relying on the workbook.
Si al ledger aún le faltan categorías, campos de IVA, moneda o referencias de proporcionalidad, termina esos en Clasifica los movimientos antes de fiarse del libro de cálculo.
Para las entradas manuales a nivel de casilla, los bindings, las compensaciones y las revisiones, usa Revisa y aporta las entradas de cálculo.
Pasos siguientes¶
Importación, exportación y evidencia: comprenda por qué una hoja de Google Sheets es una superficie de revisión y no evidencia de presentación ni autoridad de cálculo.