Metadata-Version: 2.4
Name: openfatture
Version: 2.0.1
Summary: Open-source electronic invoicing for Italian freelancers - CLI-first with AI workflows
Project-URL: Homepage, https://github.com/gianlucamazza/openfatture
Project-URL: Repository, https://github.com/gianlucamazza/openfatture
Project-URL: Issues, https://github.com/gianlucamazza/openfatture/issues
Author-email: Gianluca Mazza <info@gianlucamazza.it>
License: MIT
License-File: LICENSE
Keywords: ai,cli,fattura-elettronica,fatturapa,freelance,invoicing,sdi
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Accounting
Requires-Python: >=3.12
Requires-Dist: alembic>=1.13.1
Requires-Dist: asn1crypto>=1.5.1
Requires-Dist: babel>=2.14.0
Requires-Dist: click>=8.1.7
Requires-Dist: cryptography>=42.0.2
Requires-Dist: fluent-runtime>=0.4.0
Requires-Dist: httpx>=0.26.0
Requires-Dist: jinja2>=3.1.0
Requires-Dist: lxml>=5.1.0
Requires-Dist: ofxparse>=0.21
Requires-Dist: platformdirs>=4.0.0
Requires-Dist: pyasn1-modules>=0.3.0
Requires-Dist: pyasn1>=0.5.0
Requires-Dist: pydantic-settings>=2.1.0
Requires-Dist: pydantic>=2.6.0
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: questionary>=2.0.0
Requires-Dist: rapidfuzz>=3.0.0
Requires-Dist: reportlab>=4.0.9
Requires-Dist: requests>=2.31.0
Requires-Dist: rich>=13.7.0
Requires-Dist: sqlalchemy>=2.0.25
Requires-Dist: structlog>=24.1.0
Requires-Dist: tomlkit>=0.13.0
Requires-Dist: typer>=0.12.0
Requires-Dist: urllib3>=2.7.0
Requires-Dist: xmlschema>=3.0.1
Provides-Extra: ai
Requires-Dist: anthropic>=0.71.0; extra == 'ai'
Requires-Dist: langgraph>=0.6; extra == 'ai'
Requires-Dist: openai>=2.4.0; extra == 'ai'
Requires-Dist: tiktoken>=0.8.0; extra == 'ai'
Provides-Extra: all
Requires-Dist: anthropic>=0.71.0; extra == 'all'
Requires-Dist: apscheduler>=3.10.4; extra == 'all'
Requires-Dist: chromadb>=0.4.22; extra == 'all'
Requires-Dist: grpcio>=1.60.0; extra == 'all'
Requires-Dist: langgraph>=0.6; extra == 'all'
Requires-Dist: numpy>=1.26.0; extra == 'all'
Requires-Dist: openai>=2.4.0; extra == 'all'
Requires-Dist: pandas>=2.3.3; extra == 'all'
Requires-Dist: plotly>=6.3.1; extra == 'all'
Requires-Dist: prophet>=1.1.5; extra == 'all'
Requires-Dist: sentence-transformers>=2.6.0; extra == 'all'
Requires-Dist: tiktoken>=0.8.0; extra == 'all'
Requires-Dist: transformers>=5.5.0; extra == 'all'
Requires-Dist: xgboost>=2.1.0; extra == 'all'
Provides-Extra: dev
Requires-Dist: bump-my-version>=0.18.0; extra == 'dev'
Requires-Dist: hypothesis>=6.98.0; extra == 'dev'
Requires-Dist: lxml-stubs>=0.5.1; extra == 'dev'
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pandas-stubs>=2.0.0; extra == 'dev'
Requires-Dist: pre-commit>=3.6.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.3; extra == 'dev'
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest-mock>=3.12.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff<0.15,>=0.14.0; extra == 'dev'
Requires-Dist: types-grpcio>=1.0.0; extra == 'dev'
Requires-Dist: types-pyasn1>=0.5.0; extra == 'dev'
Requires-Dist: types-python-dateutil>=2.9.0; extra == 'dev'
Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
Requires-Dist: types-reportlab>=4.0.0; extra == 'dev'
Requires-Dist: types-requests>=2.31.0; extra == 'dev'
Provides-Extra: lightning
Requires-Dist: grpcio>=1.60.0; extra == 'lightning'
Provides-Extra: ml
Requires-Dist: apscheduler>=3.10.4; extra == 'ml'
Requires-Dist: numpy>=1.26.0; extra == 'ml'
Requires-Dist: pandas>=2.3.3; extra == 'ml'
Requires-Dist: plotly>=6.3.1; extra == 'ml'
Requires-Dist: prophet>=1.1.5; extra == 'ml'
Requires-Dist: xgboost>=2.1.0; extra == 'ml'
Provides-Extra: rag
Requires-Dist: anthropic>=0.71.0; extra == 'rag'
Requires-Dist: chromadb>=0.4.22; extra == 'rag'
Requires-Dist: langgraph>=0.6; extra == 'rag'
Requires-Dist: openai>=2.4.0; extra == 'rag'
Requires-Dist: sentence-transformers>=2.6.0; extra == 'rag'
Requires-Dist: tiktoken>=0.8.0; extra == 'rag'
Requires-Dist: transformers>=5.5.0; extra == 'rag'
Description-Content-Type: text/markdown

# OpenFatture

OpenFatture is an agentic, CLI-first workspace for Italian electronic
invoicing. Describe the work you need; the assistant coordinates the domain
tools and returns an auditable result.

## Why

Italian freelancers must issue invoices as FatturaPA XML and deliver them
through SDI. The usual answer is a SaaS subscription that owns your client
list, your invoices, and your archive. OpenFatture keeps all of it local:
your data stays in a database on your machine, the XML is generated and
validated offline, and every action is recorded in an event audit trail you
can inspect. AI assistance is optional — the domain tools work without it.

Built for one-person businesses and small studios comfortable in a terminal.

## Start

```bash
# Full stack (AI + RAG + ML + …). Core-only: uv sync
uv sync --all-extras
uv run openfatture init
uv run openfatture status
uv run openfatture assistant "Help me prepare an invoice for a software project"
```

Optional feature extras: `ai`, `rag`, `ml`, `lightning`, `all`.
See [docs/CONFIGURATION.md](docs/CONFIGURATION.md).

For a terminal conversation:

```bash
uv run openfatture interactive start
```

## Public CLI

The supported surface is intentionally small:

- `init` creates local state and guides setup.
- `assistant` handles business requests in natural language.
- `interactive start` opens a conversational session.
- `config` reads or updates configuration.
- `status` reports local readiness without mutation.

See [docs/CLI_REFERENCE.md](docs/CLI_REFERENCE.md).

## What it covers

- FatturaPA XML generation and validation
- PEC/SDI delivery and notification processing
- Client, invoice, quote, payment, and batch workflows
- Event audit trail, reports, and hooks
- Optional AI assistance (assistant + domain tools), RAG, and forecasting extras
- Optional Lightning Network integration (experimental)

## Status

Version **2.0.1**, Python 3.12+ and `uv`. Packaging, extras, honesty gates, and
the unified assistant runtime shipped in 2.0 — see
[docs/STATUS.md](docs/STATUS.md), [docs/releases/v2.0.1.md](docs/releases/v2.0.1.md),
and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).

Explicit non-goal: there is no browser frontend or web application surface,
and adding one would be a separate product decision.

## Documentation

- [Quick start](QUICKSTART.md)
- [Configuration](docs/CONFIGURATION.md)
- [Architecture](docs/ARCHITECTURE.md)
- [AI architecture](docs/AI_ARCHITECTURE.md)
- [AI-era redesign](docs/ARCHITECTURE_REDESIGN.md)
- [Current status](docs/STATUS.md)
- [Contributing](CONTRIBUTING.md)
- [Changelog](CHANGELOG.md)

## Development

```bash
uv sync --all-extras
uv run python -m pytest -q
uv run ruff check .
uv run ruff format --check .
uv run mypy openfatture/
```

OpenFatture is released under the MIT License.
