fleet/profile/ goes from stub to the machine-readable business-rules surface the fleet reads (PRD agent-catalog document surface + compliance ADC framework): - fiscal.yaml — entity, VAT position, 8 rules (regime reel simplifie until 2026-12-31 -> quarterly CA3 from 2027-01-01 per LF 2025 art. 38; KM export autoliquidation 259-1 CGI box E2; FR 20% deductible; intra-EU reverse charge; FX 766/666; SaaS expensed; CCA 455 lane). Every rule carries effective_from/effective_until AND decision: adc-NNN; every date cites its PRD anchor as an inline comment (verified against factory origin/main). - calendar.yaml — 15 entries: acomptes TVA (2026-07 month-window, 2026-12-15), last CA12 FY-2026 (2027-05-04), CA3 quarterly windows, CFE (December), AG comptes annuels (2027-06-30), e-invoicing milestones (2026-09-01 reception, 2027-09-01 emission/e-reporting), URSSAF echeancier with the in-file NOTE that a real direct debit exists since May 2026 (erp#57 revisit of the payroll-dormant assumption), KM deferred due dates + renewal stub. - JSON Schemas for both + scripts/validate.py (stdlib-only: strict YAML-subset parser, JSON-Schema-subset checker, rule->ADC resolution, calendar checks). - decisions/ — ADC register: template + adc-001..005 Accepted formalizations (autoliquidation KM, FX->766/666, SaaS expensed, reel simplifie until abolition, CCA personal-card lane) + adc-006/007 Proposed stubs (retainer currency -> erp#53; capital path -> erp#51). Agents draft, the operator Accepts — never the reverse; immutable once merged, supersede never edit. - Mutation policy in-file: PRs only (T12 proposes, human merges). - Same-change: profile README stub -> real doc; fleet/README.md layout line and AGENTS.md fleet row updated (profile no longer a stub). Validation: PASS — 8 rules, 15 entries, 7 ADCs, 0 errors, 7 warnings (the warnings list exactly what awaits operator verification). Human gate left open on purpose: operator sanity-read of the calendar + Acceptance of adc-001..005. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01VRShc4QhLLU73FLHx9vskh
114 lines
6.0 KiB
Markdown
114 lines
6.0 KiB
Markdown
# fleet/profile/ — fiscal profile, compliance calendar, ADC register
|
||
|
||
The machine-readable **business-rules surface** the fleet reads (T10 TVA
|
||
preparation, T03 VAT ventilation, T11 calendar & reminders): prompts stay thin
|
||
and rule-free ([fleet/README.md](../README.md)); the rules live here, dated and
|
||
justified. Shipped by [erp#54](https://gitea.arcodange.lab/arcodange-org/erp/issues/54)
|
||
per the PRD [document surface](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/agent-catalog.md#the-document-surface-agents-read)
|
||
and [ADC framework](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc).
|
||
|
||
## Layout
|
||
|
||
| File | Role |
|
||
| --- | --- |
|
||
| [`fiscal.yaml`](fiscal.yaml) | fiscal profile: entity, VAT position, **rules** — regime, VAT treatments, bookkeeping methods |
|
||
| [`fiscal.schema.json`](fiscal.schema.json) | JSON Schema for `fiscal.yaml` |
|
||
| [`calendar.yaml`](calendar.yaml) | compliance calendar: dated obligations the T11 reminder loop ([erp#60](https://gitea.arcodange.lab/arcodange-org/erp/issues/60)) reads |
|
||
| [`calendar.schema.json`](calendar.schema.json) | JSON Schema for `calendar.yaml` |
|
||
| [`scripts/validate.py`](scripts/validate.py) | stdlib-only validator: schema + referential integrity (rule → ADC) |
|
||
| [`decisions/`](decisions/) | the **ADC register** (*accounting decision records*): `adc-template.md` + `adc-NNN-<slug>.md` |
|
||
|
||
## The rule contract
|
||
|
||
Every `fiscal.yaml` rule carries:
|
||
|
||
- **`effective_from` / `effective_until`** — dated validity (`null` until = in
|
||
force until superseded);
|
||
- **`decision: adc-NNN`** — the record in `decisions/` that justifies it.
|
||
|
||
So the chain **écriture → règle → ADC → base légale** resolves in four hops,
|
||
identically every time (PRD compliance § ADC rule 2, challenge C6). Dates in
|
||
both YAML files cite their source anchor as an inline comment (`PRD <leaf>
|
||
§ <anchor>`, verified against factory `origin/main`).
|
||
|
||
## The ADC register (`decisions/`)
|
||
|
||
MADR-lite + accounting fields — see [`adc-template.md`](decisions/adc-template.md).
|
||
Frontmatter is machine-parsed (id, status, decided, effective dates,
|
||
supersedes/superseded_by); the body carries Context (*fait générateur*),
|
||
Decision, **Base légale & doctrine**, Alternatives rejected, Consequences,
|
||
QA & validation, References.
|
||
|
||
Status flow: **Proposed → Accepted → Superseded-by-NNN**, with four rules
|
||
(PRD compliance § ADC):
|
||
|
||
1. **Immutable once Accepted** (merged on main) — supersede, never edit
|
||
(permanence des méthodes, PCG art. 121-5).
|
||
2. **Every fiscal.yaml rule cites its ADC** — enforced by `scripts/validate.py`,
|
||
which also refuses a rule citing a non-Accepted record.
|
||
3. **The annexe writes itself at close** from the records Accepted and in
|
||
force during the exercice.
|
||
4. **Proposed ADCs are the expert-comptable agenda. Agents draft, the
|
||
operator Accepts — never the reverse.**
|
||
|
||
Seed state: **adc-001…005 are Accepted as formalizations** of decisions the
|
||
operator already made in practice (their sanity read is the erp#54 human
|
||
gate — pre-merge amendments are draft edits, not supersedes);
|
||
**adc-006/adc-007 are Proposed stubs** (retainer currency →
|
||
[erp#53](https://gitea.arcodange.lab/arcodange-org/erp/issues/53); capital path →
|
||
[erp#51](https://gitea.arcodange.lab/arcodange-org/erp/issues/51)).
|
||
|
||
## Validation
|
||
|
||
```sh
|
||
python3 fleet/profile/scripts/validate.py
|
||
```
|
||
|
||
Stdlib-only (no PyYAML, no jsonschema — runs anywhere, CI-able). It checks:
|
||
both YAML files against their schemas; every rule's `decision` resolves to
|
||
exactly one existing, **Accepted** ADC; unique ids; `effective_from <=
|
||
effective_until`; calendar entries carry exactly one of `due`|`recurrence`
|
||
(unless `pending-definition`/`conditional`); ADC frontmatter/section hygiene.
|
||
Exit 0 = pass; warnings list what awaits operator verification
|
||
(month-precision dates, estimated entries).
|
||
|
||
To stay parseable, both YAML files are written in a **strict subset**: block
|
||
maps/lists, single-line scalars, one-line `[flow]` lists of scalars,
|
||
comments — no anchors, no multi-line scalars, no nested flow.
|
||
|
||
Calendar date precision: `YYYY-MM-DD` = exact; `YYYY-MM` = month window — the
|
||
source gives no day; verify on the authority's notice, **never invent one**.
|
||
|
||
## Mutation policy
|
||
|
||
Changes arrive **as PRs only** — the T12 regulatory watch *proposes* a diff
|
||
(what changed, source links, effective dates); a **human reviews and merges**
|
||
(PRD task-inventory § T11 guardrail: "the calendar file is reviewed like
|
||
code"; § T12: "the watch proposes, the human adopts"). Calendar entries
|
||
sourced from mail content are human-confirmed (mail is untrusted input). **No
|
||
agent edits these files directly.** A rule change moves its ADC in the same
|
||
PR (supersede, never edit), and a schema change moves the validator with it —
|
||
the repo-wide same-change freshness rule.
|
||
|
||
## Facts not corroborated by the PRD
|
||
|
||
Flagged here honestly (and inline where used) — the PRD wins on conflict;
|
||
these await operator/expert verification:
|
||
|
||
- **SIREN 999657455** — from erp#54 + agent memory `arcodange-tva-fiscal`;
|
||
no PRD leaf states it.
|
||
- **Exact incorporation day** — PRD says "mid-January 2026" only; rules use a
|
||
conservative `2026-01-01` exercice-start bound.
|
||
- **July 2026 acompte exact day** — PRD gives the month only (T10 trigger).
|
||
- **CFE exact day + creation-year exoneration / initial 1447-C declaration** —
|
||
PRD says "December" only; the rest is to verify with the SIE.
|
||
- **CA3 July/October/January windows** — only the April window is PRD-anchored
|
||
(roadmap, 2027-04-20); the others come from the erp#54 issue text.
|
||
- **TVA credit amount (~223–267 EUR)** — ERP reads (skill + memory); the PRD
|
||
only says "in TVA credit — verify, don't assume".
|
||
- **URSSAF échéancier cadence/nature** — one known debit (2026-05-22,
|
||
493.00 EUR, erp#57); the PRD's "payroll dormant" assumption is under revisit
|
||
in [erp#57](https://gitea.arcodange.lab/arcodange-org/erp/issues/57).
|
||
- **BOI-BIC-CHG-20-30-10 tolerance cite** (adc-003) and **CCA formalities**
|
||
(adc-005) — general doctrine, queued for the expert-comptable.
|