Metadata-Version: 2.5
Name: fec-lint
Version: 0.1.1
Summary: Free structural linter for French FEC files (Fichier des Écritures Comptables), CLI + MCP server
Project-URL: Homepage, https://github.com/vincenz-cdf/fec-lint
Project-URL: Full pre-audit, https://apify.com/highfiddle/fec-checker
Project-URL: Issues, https://github.com/vincenz-cdf/fec-lint/issues
Author: Vincent
License-Expression: MIT
License-File: LICENSE
Keywords: accounting,comptabilite,dgfip,fec,france,mcp
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Office/Business :: Financial :: Accounting
Requires-Python: >=3.10
Requires-Dist: mcp<3,>=2
Provides-Extra: test
Requires-Dist: pytest>=8; extra == 'test'
Description-Content-Type: text/markdown

# fec-lint

**[English](#english) · [Français](#français)**

<!-- mcp-name: io.github.vincenz-cdf/fec-lint -->

> **Technical check, not tax advice.** fec-lint checks the structure of a file against the published FEC format. It does not certify a file or replace an accountant's review.
>
> **Contrôle technique, pas un conseil fiscal.** fec-lint vérifie la structure d'un fichier au regard du format FEC publié. Il ne certifie pas un fichier et ne remplace pas la revue d'un expert-comptable.

---

## English

**Free structural linter for French FEC files (*Fichier des Écritures Comptables*, art. A47 A-1 LPF), as a command line tool and an MCP server.**

### Install

```bash
pipx install fec-lint
```

### Command line

```bash
fec-lint 123456782FEC20251231.txt
```

```text
123456782FEC20251231.txt: FAILED (encoding utf-8, separator pipe, lines 214)
  error date_invalid x3: Non-existent date in EcritureDate. - line(s) 21, 22, 23
  error date_format x3: Wrong date format in EcritureDate (expected AAAAMMJJ). - line(s) 64, 65, 66
Structure has errors. Full pre-audit (balance, numbering, risk signals): https://apify.com/highfiddle/fec-checker
```

- `--json` prints the full result: `{ok, file, errors[], warnings[], stats}`.
- `--name 123456782FEC20251231.txt` sets the name checked against `SIRENFECAAAAMMJJ.txt`.
- `--quiet` hides the last line.
- Exit code: `0` when the structure is OK, `1` on errors, `2` when a file cannot be read. Several files can be given at once.
- A `.zip` holding exactly one `.txt` FEC is unpacked first.

### MCP server

Add it to your MCP client (Claude Desktop, Claude Code, Cursor…):

```json
{
    "mcpServers": {
        "fec-lint": {
            "command": "uvx",
            "args": ["--from", "fec-lint", "fec-lint-mcp"]
        }
    }
}
```

Without `uv`, install with `pipx install fec-lint` and use `"command": "fec-lint-mcp"`. The server exposes one tool, `lint_fec(path)`, which takes a local file path and returns the same JSON as `--json`.

**Full pre-audit as a hosted MCP server.** The paid FEC Checker (balance, numbering, risk signals, AI fix list) runs on Apify and is reachable over MCP. Users sign in with Apify OAuth; agents can pay with x402 by adding `&payment=x402`:

```bash
claude mcp add --transport http fec-checker "https://mcp.apify.com/?tools=highfiddle/fec-checker"
```

### Free vs full pre-audit

| Check | fec-lint (free) | [FEC Checker on Apify](https://apify.com/highfiddle/fec-checker) |
|---|---|---|
| File name `SIRENFECAAAAMMJJ.txt`, SIREN key | ✅ | ✅ |
| Encoding, separator, 18 headers | ✅ | ✅ |
| Field formats: dates, amounts, mandatory fields, pairs | ✅ | ✅ |
| Balance per entry and for the whole file | — | ✅ |
| EcritureNum gaps and duplicates, ValidDate chronology | — | ✅ |
| Risk signals: weekends, holidays, round amounts, Benford, cash 53x, suspense 471, after year end | — | ✅ |
| Verdict, 0-100 score, AI-written fix list (FR/EN) | — | ✅ |
| Runs | locally, nothing leaves your machine | on Apify, pay per file |

---

## Français

**Linter structurel gratuit pour les FEC (*Fichier des Écritures Comptables*, art. A47 A-1 LPF), en ligne de commande et en serveur MCP.**

### Installation

```bash
pipx install fec-lint
```

### Ligne de commande

```bash
fec-lint 123456782FEC20251231.txt
```

- `--json` affiche le résultat complet : `{ok, file, errors[], warnings[], stats}`.
- `--name 123456782FEC20251231.txt` indique le nom à contrôler selon `SIRENFECAAAAMMJJ.txt`.
- `--quiet` masque la dernière ligne.
- Code de sortie : `0` si la structure est correcte, `1` en cas d'erreur, `2` si un fichier est illisible. Plusieurs fichiers peuvent être passés à la fois.
- Un `.zip` contenant un seul FEC `.txt` est décompressé d'abord.

Les messages sont en anglais ; les codes de règle (`date_invalid`, `header_missing`…) sont stables.

### Serveur MCP

Ajoutez-le à votre client MCP (Claude Desktop, Claude Code, Cursor…) avec la configuration ci-dessus. L'outil `lint_fec(path)` prend le chemin d'un fichier local et renvoie le même JSON que `--json`.

**Pré-audit complet en serveur MCP hébergé.** Le FEC Checker payant (équilibre, numérotation, signaux de risque, plan de correction IA) tourne sur Apify et s'utilise en MCP via `https://mcp.apify.com/?tools=highfiddle/fec-checker` (connexion Apify OAuth ; les agents peuvent payer en x402 avec `&payment=x402`).

### Gratuit ou pré-audit complet

| Contrôle | fec-lint (gratuit) | [FEC Checker sur Apify](https://apify.com/highfiddle/fec-checker) |
|---|---|---|
| Nom `SIRENFECAAAAMMJJ.txt`, clé du SIREN | ✅ | ✅ |
| Encodage, séparateur, 18 colonnes | ✅ | ✅ |
| Formats : dates, montants, champs obligatoires, couples de champs | ✅ | ✅ |
| Équilibre par écriture et du fichier | — | ✅ |
| Ruptures et doublons d'EcritureNum, chronologie de ValidDate | — | ✅ |
| Signaux de risque : week-ends, jours fériés, montants ronds, Benford, caisse 53x, attente 471, après clôture | — | ✅ |
| Verdict, score 0-100, plan de correction rédigé par IA (FR/EN) | — | ✅ |
| Exécution | en local, rien ne quitte votre machine | sur Apify, paiement par fichier |

---

## Development

```bash
python -m venv .venv
.venv/bin/pip install -e ".[test]"   # Windows: .venv\Scripts\pip
pytest
```

The fixtures in `tests/fixtures/` are synthetic FEC files (fictitious SIREN 123456782). MIT license.
