Metadata-Version: 2.4
Name: aeat-cli
Version: 0.1.0
Summary: A utility that turns your financial records into Spanish tax-form (modelo) data, ready to submit to the AEAT
Project-URL: Homepage, https://github.com/nevenincs/aeat
Project-URL: Issues, https://github.com/nevenincs/aeat/issues
Project-URL: Repository, https://github.com/nevenincs/aeat
Author: wgergely
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: aeat,cli,hacienda,impuestos,spain,tax,toolkit,utility
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial
Requires-Python: >=3.13
Requires-Dist: argon2-cffi<26,>=23.1.0
Requires-Dist: beautifulsoup4<5,>=4.12
Requires-Dist: cryptography<48,>=47.0.0
Requires-Dist: defusedxml<1,>=0.7.1
Requires-Dist: formulas<2,>=1.2.0
Requires-Dist: httpx<1,>=0.28.1
Requires-Dist: keyring<26,>=25.6.0
Requires-Dist: ofxtools<2,>=1.1
Requires-Dist: openpyxl<4,>=3.1.5
Requires-Dist: pdfplumber<1,>=0.11.9
Requires-Dist: pikepdf<11,>=10.0.0
Requires-Dist: prompt-toolkit<4,>=3.0
Requires-Dist: pydantic-settings<3,>=2.9.1
Requires-Dist: pydantic<3,>=2.12.5
Requires-Dist: pypdfium2<6,>=5.7.1
Requires-Dist: python-dotenv<2,>=1.2.2
Requires-Dist: python-i18n<1,>=0.3.9
Requires-Dist: pyyaml<7,>=6.0.3
Requires-Dist: questionary<3,>=2.1.1
Requires-Dist: rich<16,>=14.2.0
Requires-Dist: sqlalchemy<3,>=2.0.36
Requires-Dist: typer<1,>=0.20.0
Requires-Dist: tzdata>=2026.2; sys_platform == 'win32'
Requires-Dist: xlrd<3,>=2.0.1
Provides-Extra: agent
Requires-Dist: anyio<5,>=4.5; extra == 'agent'
Requires-Dist: mcp<2,>=1.12; extra == 'agent'
Provides-Extra: all
Requires-Dist: anthropic<1,>=0.74.1; extra == 'all'
Requires-Dist: anyio<5,>=4.5; extra == 'all'
Requires-Dist: google-api-python-client<3,>=2.195.0; extra == 'all'
Requires-Dist: google-auth-oauthlib<2,>=1.3.1; extra == 'all'
Requires-Dist: google-auth<3,>=2.50.0; extra == 'all'
Requires-Dist: mcp<2,>=1.12; extra == 'all'
Requires-Dist: model2vec<1,>=0.8; extra == 'all'
Requires-Dist: numpy<3,>=1.26; extra == 'all'
Requires-Dist: playwright-stealth<3,>=2.0.3; extra == 'all'
Requires-Dist: playwright<2,>=1.58.0; extra == 'all'
Requires-Dist: snowballstemmer<4,>=2.2; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic<1,>=0.74.1; extra == 'anthropic'
Provides-Extra: browser
Requires-Dist: playwright-stealth<3,>=2.0.3; extra == 'browser'
Requires-Dist: playwright<2,>=1.58.0; extra == 'browser'
Provides-Extra: corpus-sources
Requires-Dist: aeat-data==0.1.0; extra == 'corpus-sources'
Provides-Extra: google
Requires-Dist: google-api-python-client<3,>=2.195.0; extra == 'google'
Requires-Dist: google-auth-oauthlib<2,>=1.3.1; extra == 'google'
Requires-Dist: google-auth<3,>=2.50.0; extra == 'google'
Provides-Extra: search
Requires-Dist: model2vec<1,>=0.8; extra == 'search'
Requires-Dist: numpy<3,>=1.26; extra == 'search'
Requires-Dist: snowballstemmer<4,>=2.2; extra == 'search'
Provides-Extra: workbook-windows
Requires-Dist: pywin32>=311; (sys_platform == 'win32') and extra == 'workbook-windows'
Description-Content-Type: text/markdown

# aeat

`aeat` is a helper for preparing your Spanish tax forms. It takes the records you keep, works out the figures for each modelo, checks them against the form's rules, and exports a file ready to submit to the Agencia Estatal de Administración Tributaria (AEAT).

> **Status: pre-alpha.** Expect breaking changes between versions.

## Spanish tax terms

These terms appear throughout the documentation:

- **Autónomo** is a self-employed individual who files taxes to AEAT.
- **Modelo** is an AEAT tax form. A three-digit code names it, such as 100 (personal income tax), 130 (quarterly income-tax instalment), or 303 (value-added tax).
- **Casilla** is a single numbered field on a modelo.
- **Justificante** is the receipt PDF AEAT issues after you file. It carries the verification code and the filed figures.

## Who it's for

`aeat` is for autónomos and small businesses who file their own taxes, and for the people who help them. It works one taxpayer at a time. It isn't a tax adviser, and it doesn't replace AEAT's official tools.

Use `aeat` to:

- Keep a ledger of your financial records
- Compute the figures for a modelo from those records
- Check a draft against the justificante AEAT issues after a filing
- Export a file that's ready to upload to AEAT

## Safety

`aeat` builds, checks, and exports your filings. It doesn't file them. You upload the exported file to AEAT yourself, through the official channel. No submit command exists, and no code path contacts AEAT to file on your behalf.

## Installation

You need Python and the uv package manager:

- Python 3.13 or newer
- [uv](https://docs.astral.sh/uv/)

Clone the repository, bootstrap it, then confirm the command line responds:

```bash
git clone https://github.com/wgergely/aeat
cd aeat
just bootstrap
aeat --version
```

`just bootstrap` installs the dependencies, provisions `env/.env`, and runs the
workstation check. The version command prints a single line, such as `aeat 0.1.0`.

Check the optional external services (on-host LLM vision via Ollama, the cloud
provider CLIs, the Playwright browser) any time, with the exact fix for each gap:

```bash
just doctor          # or: aeat config check
just provision       # install the Playwright browser binary
```

Each profile opts in or out of these services independently — see
`aeat config profile capabilities show`.

## The command line

`aeat` has two command families:

- **`aeat config`** sets up your configuration: operator profiles, authentication, and diagnostics.
- **`aeat app`** runs the tax workflow over your active profile: your ledger, your modelo drafts, and the tax-form registry.

Every command carries its own `--help`.

## Getting help

Report bugs and ask questions on the [issue tracker](https://github.com/wgergely/aeat/issues).

## Documentation

The full documentation lives under [`docs/`](docs/index.md):

- [Quickstart](docs/how-to/quickstart.md) - the short path from profile and ledger to a modelo file.
- [Set up your taxpayer profile](docs/how-to/profile-setup.md) - create a profile and switch between several.
- [Work with Transactions](docs/how-to/import-bank-statements.md) - import, add, edit, classify, and review ledger rows.
- [Tutorial](docs/tutorials/index.md) - build your first modelo end to end.
- [How-to recipes](docs/how-to/index.md) - set up profiles, link censo facts, work with transactions, file 303 or 390, verify, export, and diagnose problems.
- [Explanation](docs/explanation/index.md) - how the pipeline works and why `aeat` never files.
- [Glossary](docs/glossary.md) - the Spanish tax terms these docs use.

Run `just docs` to build the rendered site, which adds the command-line and source-code reference.

## For contributors

Contributor documentation lives separately from this user guide.

- Build the documentation with `just docs`, and check it with `just docs-check`. The built site holds the command-line and source-code reference.
- The local quality gates are the source of truth: `just check-style`, `just check-types`, `just test-unit`, and `just check-pre-commit`.
- The [architecture overview](docs/architecture/index.md) explains how the codebase fits together.
- The agent-driven contribution workflow is documented in [`CLAUDE.md`](CLAUDE.md).

## License

Apache 2.0. See [LICENSE](LICENSE).

## Disclaimer

This project is not a substitute for professional tax advice. It isn't affiliated with AEAT. It never submits filings; you upload any exported file through AEAT's official tools yourself. Use it at your own risk, as the authors accept no liability for filings produced or actions taken with this software. If in doubt, consult a qualified tax professional.
