Metadata-Version: 2.4
Name: invoice-tool
Version: 0.0.1
Summary: Fully-offline Python CLI that generates a sendable USD PDF invoice
Author-email: Vlad Korolev <vlad@dblfuzzr.com>
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Accounting
Classifier: Typing :: Typed
Requires-Python: >=3.13
Requires-Dist: fpdf2==2.8.7
Requires-Dist: pydantic>=2.0
Requires-Dist: typer>=0.12
Provides-Extra: dev
Requires-Dist: mypy>=1.13; extra == 'dev'
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.8; extra == 'dev'
Description-Content-Type: text/markdown

# invoice-tool

Fully-offline Python CLI that generates a sendable **USD PDF invoice** from local
TOML files. No Odoo, no Google Drive, no network — the same inputs always produce
a byte-identical PDF.

## Install

```bash
pip install invoice-tool
```

Requires Python >= 3.13. The DejaVu/Liberation fonts the renderer embeds ship
inside the wheel, so no system fonts are required.

## Quickstart

```bash
# Verify the install
invoice-tool version

# Generate the latest invoice for a customer from a data directory
invoice-tool generate arsenale --data-dir ./sample-data
```

`generate <customer>` reads three TOML sources (issuer, customer, invoice),
composes and validates one invoice, renders a deterministic A4 PDF with embedded
fonts, and writes it next to its source data as
`DblFuzzr Inv <Customer> N<seq>.pdf`. The output path is printed to stdout, so it
composes in a pipeline; diagnostics go to stderr.

See `invoice-tool generate --help` for all options (`--invoice`, `--out`,
`--data-dir`, `--config`).

## Documentation

[`SKILL.md`](./SKILL.md) is the full operator/agent guide: data-directory layout
and schema, font configuration (bundled / system / dejavu modes), the worked
`generate` example, scriptable exit codes, and the determinism & offline
guarantee.
