feat(fleet): fiscal profile + compliance calendar + ADC register (erp#54, T11 data)

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
This commit is contained in:
2026-07-18 23:45:00 +02:00
co-authored by Claude Fable 5
parent 66b277abfa
commit a482bb18c4
16 changed files with 1531 additions and 3 deletions
@@ -0,0 +1,75 @@
---
id: adc-001
title: "KM client invoices under autoliquidation - art. 259-1° CGI (no French VAT, box E2)"
status: Accepted
decided: 2026-07-18
effective_from: 2026-01-01
effective_until: null
supersedes: null
superseded_by: null
---
# adc-001 — KM client invoices under autoliquidation — art. 259-1° CGI
> **Accepted as formalization** of practice in force "since the first invoice"
> (PRD [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc)).
> The operator's sanity read is the erp#54 human gate; amendments before the PR
> merges are edits to a draft — immutability starts at merge on main.
## Context
KissMetrics (US) is the sole client: B2B services exported outside the EU. The
first client invoice forced the VAT position — charge French VAT, or treat the
supply as outside French VAT scope.
## Decision
B2B services supplied to a non-EU taxable customer are outside French VAT
scope (place of supply = where the customer is established). Therefore:
TVA collectée = 0 on every KM invoice; each invoice carries the autoliquidation
mention referencing art. 259-1° CGI; the basis reports in box E2 of the
CA3/CA12. Applied to 100 % of client revenue today.
## Base légale & doctrine
- CGI art. 259-1° — place of supply of B2B services is where the *preneur
assujetti* is established.
- CA3 box E2 mapping per the T10 mode opératoire (PRD task-inventory § T10
step 1: "box E2 export — today 100 % of client revenue is box E2
autoliquidation Art. 259-1°, collectée = 0").
- Invoice mention checked structurally by the `dolibarr-invoice-audit` skill
("TVA 259-1° CGI").
- Expert-comptable confirmation pending — on the PRD compliance.md § Questions
list (PAF documentation expectations for the export invoices).
## Alternatives rejected
- **Charging French VAT** — wrong place-of-supply analysis for extra-EU B2B
services; would create undue TVA collectée.
- **Franchise en base** — would renounce the right to deduct while the company
runs a structural VAT credit (all revenue exported, FR expenses carrying
20 % VAT).
## Consequences
- Structural TVA credit while KM is the sole client (collectée 0 vs déductible
on FR supplier invoices) — surfaced in `fiscal.yaml` `vat_position`.
- Downstream rule: `fiscal.yaml` `client-export-autoliquidation`.
- E-invoicing: these export invoices stay OUT of domestic e-invoicing scope
but ENTER e-reporting on 2027-09-01 (PRD compliance.md § Obligations, PAF
row; roadmap § Milestones) — the PAF stays load-bearing for them.
- Annexe: the VAT method is disclosed from this record at close (ADC rule 3).
## QA & validation
- `dolibarr-tva-reconciliation` classifies every KM invoice in bucket E2
(autoliquidation, collectée = 0) — in production.
- `dolibarr-invoice-audit` verifies the invoice mention per invoice.
- Expert-comptable review: pending (PRD compliance.md § Questions).
## References
- PRD compliance.md § ADC seed table (adc-001) + § Obligations (PAF row).
- PRD task-inventory.md § T05 step 2, § T10 step 1.
- `fiscal.yaml` rule `client-export-autoliquidation`.
- erp#54 (this register's seeding issue).
@@ -0,0 +1,70 @@
---
id: adc-002
title: "FX deltas on customer wires booked to 766 / 666, invoices never adjusted"
status: Accepted
decided: 2026-07-18
effective_from: 2026-01-01
effective_until: null
supersedes: null
superseded_by: null
---
# adc-002 — FX deltas on customer wires → 766 / 666
> **Accepted as formalization** — the method was applied in the 2026-07-11
> books regularization (PRD [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc)).
> Effective from the exercice start (ADC rule 1: effective dates sit on
> exercice boundaries where possible). Operator sanity read = erp#54 human gate.
## Context
KissMetrics pays in USD via Wise; the EUR amounts settled differ from the EUR
invoice totals. Observed deltas: +1.08 EUR on FAC004 and +50.05 EUR on FAC006
(erp#57). The 2026-07-11 regularization forced the choice of where the delta
lives.
## Decision
The customer payment is recorded at the invoice's **remaining EUR amount**
(full-remaining), so the invoice closes exactly. The difference against the
EUR actually received is booked **separately**: gain → account 766 (gains de
change), loss → account 666 (pertes de change). A validated invoice is never
adjusted for FX.
## Base légale & doctrine
- PCG chart — account 666 *pertes de change* / account 766 *gains de change*
(charges et produits financiers).
- Inaltérabilité of validated entries (Code de commerce L.123-22; PRD
compliance.md § The ledger grammar): corrections are new documents, never
edits — the separate 766/666 entry is the append-shaped correction.
## Alternatives rejected
- **Adjusting the invoice amount to the settled EUR** — violates the ledger
grammar (a validated document is immutable) and inaltérabilité.
- **USD multicurrency invoicing** — open question, not rejected: it is the
subject of adc-006 (erp#53). If Accepted, adc-006 would supersede or narrow
this record's scope for future invoices.
## Consequences
- Accounts touched: 766, 766-side produits / 666-side charges financiers.
- Downstream rule: `fiscal.yaml` `fx-deltas-766-666`.
- Annexe: FX-treatment method disclosed from this record at close.
- Interaction: pending adc-006 (retainer currency) may change where FX lives
for future invoices; until then this method applies unchanged.
## QA & validation
- Applied in the 2026-07-11 regularization; rehearsed on the sandbox (replay
pack preserved under
`.claude/skills/dolibarr-sandbox-write/replay-packs/2026-07-11-books-regularization/`).
- The two écart entries themselves are [HUMAN] UI work tracked in erp#57.
- Expert-comptable review: pending (rides the compliance.md § Questions list).
## References
- PRD compliance.md § ADC seed table (adc-002) + § The ledger grammar.
- erp#57 (écarts +1.08 FAC004 / +50.05 FAC006), erp#53 / adc-006.
- `fiscal.yaml` rule `fx-deltas-766-666`.
@@ -0,0 +1,62 @@
---
id: adc-003
title: "AI/SaaS subscriptions expensed (6xx), never immobilized at current unit costs"
status: Accepted
decided: 2026-07-18
effective_from: 2026-01-01
effective_until: null
supersedes: null
superseded_by: null
---
# adc-003 — AI/SaaS subscriptions expensed (6xx), never immobilized
> **Accepted as formalization** of what the PRD seed table calls "implicit
> today" (PRD [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc)).
> Operator sanity read = erp#54 human gate.
## Context
Arcodange's supplier side is dominated by recurring AI/SaaS subscriptions
(Anthropic, Cloudflare, OVH, etc.) at small monthly unit costs. Each entry
raised the same implicit question: expense (6xx) or immobilize (20x/205)?
## Decision
AI/SaaS subscription costs are **expensed to class-6 accounts in the period
invoiced**, never immobilized at current unit costs. Review clause: if a
perpetual licence or a single subscription materially exceeds the
small-equipment tolerance, a **superseding ADC is drafted before the method
changes** (permanence des méthodes).
## Base légale & doctrine
- PCG art. 211-1 — an asset requires control and expected future economic
benefits; a monthly subscription confers neither beyond the period billed.
- BOI-BIC-CHG-20-30-10 — the 500 EUR HT small-equipment tolerance. *General
doctrine cite, not sourced from a PRD leaf — expert-comptable confirmation
requested.*
- Subscriptions are services (no transferred right of ownership) → charges.
## Alternatives rejected
- **Immobilizing (205 concessions et droits similaires) + amortization** —
disproportionate tracking for small monthly amounts and no durable right is
acquired; rejected at current unit costs.
## Consequences
- Accounts touched: class-6 service/subscription charge accounts.
- Downstream rule: `fiscal.yaml` `saas-subscriptions-expensed`.
- Annexe: immobilization policy disclosed from this record at close.
## QA & validation
- Consistent with every supplier entry recorded to date (ERP state).
- Expert-comptable review: pending — specifically the BOI tolerance cite above.
## References
- PRD compliance.md § ADC seed table (adc-003).
- `fiscal.yaml` rule `saas-subscriptions-expensed`.
- erp#54 (register seeding).
@@ -0,0 +1,73 @@
---
id: adc-004
title: "Stay régime réel simplifié until the legal abolition; quarterly CA3 from 2027-01-01"
status: Accepted
decided: 2026-07-18
effective_from: 2026-01-01
effective_until: null
supersedes: null
superseded_by: null
---
# adc-004 — Stay réel simplifié until abolition; quarterly CA3 from 2027-01-01
> **Accepted as formalization** — "Accepted in practice" per the PRD
> [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc).
> Operator sanity read = erp#54 human gate.
## Context
Arcodange holds the régime réel simplifié de TVA (CA12 + acomptes) for its
first exercice (FY-2026). LF 2025 art. 38 abolishes that regime on 2027-01-01
(PRD task-inventory § T10 trigger), which forced the question: opt out early
to the réel normal, or ride the regime to its legal end?
## Decision
Stay under the **régime réel simplifié** (annual CA12 form 3517 + July and
December acomptes) until the abolition — **no early opt-out**. From
**2027-01-01**, file **quarterly CA3** (turnover under 1 M EUR; monthly above
that threshold). A last CA12 covering FY-2026 is still filed in 2027
(~2027-05-04 per the PRD roadmap), recovering the accumulated TVA credit.
## Base légale & doctrine
- CGI art. 302 septies A — régime simplifié d'imposition.
- LF 2025 art. 38 — abolition effective 2027-01-01 (PRD task-inventory § T10).
- CGI art. 287 — CA3 filing; the 1 M EUR monthly threshold noted in PRD
task-inventory § T12 step 1.
- Regime holder status confirmed by a DGFiP mail of 2026-06-25 (agent memory
`arcodange-tva-fiscal`) — *evidence outside the PRD; keep the mail*.
## Alternatives rejected
- **Early opt-out to réel normal (monthly/quarterly CA3 from 2026)** — adds
declarations for zero benefit while the company sits in a structural TVA
credit, and the switch is imposed on 2027-01-01 anyway.
## Consequences
- Downstream rules (`fiscal.yaml`): `vat-regime-reel-simplifie`,
`vat-regime-ca3-quarterly`, **and the standard-law VAT ventilation operated
under this regime** — `supplier-fr-vat-deductible` (CGI art. 271) and
`supplier-intra-eu-reverse-charge` (CGI art. 283-2) cite this record as
their operating decision: they are law application, not method choices, and
this record is where that ventilation is documented.
- Calendar entries: `tva-acompte-2026-07`, `tva-acompte-2026-12`,
`tva-ca12-fy2026`, `regime-simplifie-abolition`, `ca3-2027-q1`,
`ca3-quarterly`.
- Annexe: VAT regime + change of regime (imposed by law) disclosed at close.
## QA & validation
- POC-4a: December 2026 acompte dry-run (2026-11-30 → 2026-12-11, PRD roadmap
Gantt e2) — first euro-parity proof.
- POC-4b: 2027-Q1 CA3 simulation + expert-comptable checkpoint BEFORE the
first real quarterly filing (PRD roadmap Gantt e3).
## References
- PRD roadmap.md § Milestones (2027-01-01, 2027-04-20, 2027-05-04).
- PRD task-inventory.md § T10 trigger + § T11 step 1 + § T12 step 1.
- PRD compliance.md § ADC seed table (adc-004).
- `fiscal.yaml` rules listed under Consequences; erp#54.
@@ -0,0 +1,67 @@
---
id: adc-005
title: "Personal-card business expenses through the compte courant d'associé (455 lane)"
status: Accepted
decided: 2026-07-18
effective_from: 2026-01-01
effective_until: null
supersedes: null
superseded_by: null
---
# adc-005 — Personal-card business expenses through the CCA (455 lane)
> **Accepted as formalization** — "practiced; formalized with erp#57" per the
> PRD [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc).
> Operator sanity read = erp#54 human gate.
## Context
Some business expenses are paid with the operator's personal card instead of
the Qonto/Wise business accounts — e.g. the Anthropic May/June receipts
(#2344-8391, #2997-4837) with no matching Qonto debit (erp#57). The books need
those expenses without any money moving through an agent.
## Decision
A business expense paid personally is recorded as a **normal supplier
invoice**, and its payment is booked against the **compte courant d'associé**
(account 455), via the Dolibarr bank account "G.RADUREAU CCA"
(`fk_account=3`). Reimbursement of the CCA balance is a **separate human
decision**, never automatic.
## Base légale & doctrine
- PCG account 455 — *associés, comptes courants*.
- CCA formalities (convention de compte courant, interest terms if any):
*not sourced from a PRD leaf — expert-comptable confirmation requested.*
## Alternatives rejected
- **Notes de frais module** — heavier machinery than a one-person SAS needs
today; can supersede this lane later if volume justifies it.
- **Leaving personal-card expenses out of the ERP** — breaks completeness and
the piste d'audit fiable (PRD compliance.md § Obligations, PAF row).
## Consequences
- Accounts touched: 455 (payment side) + the expense's class-6 account.
- The CCA bank account (`fk_account=3`) is **invisible via the bank APIs** — a
permanent, flagged manual lane in bank reconciliation (PRD task-inventory
§ T07 guardrail), never silently ignored.
- Downstream rule: `fiscal.yaml` `personal-card-cca-lane`.
- Annexe: related-party (compte courant) balance disclosed at close.
## QA & validation
- Practiced in the current books; remaining entries (Anthropic clarification:
which payment rail) are [HUMAN] work tracked in erp#57.
- Expense-report/CSV visibility for the personal lane is an explicit PRD
backlog item (task-inventory § Backlog).
## References
- PRD compliance.md § ADC seed table (adc-005).
- PRD task-inventory.md § T07 guardrail + § Backlog (expense reports).
- erp#57 (bucket C — non-invoice entries).
- `fiscal.yaml` rule `personal-card-cca-lane`.
@@ -0,0 +1,66 @@
---
id: adc-006
title: "KM retainer currency & composition (USD multicurrency vs EUR-at-settlement; line structure)"
status: Proposed
decided: null
effective_from: null
effective_until: null
supersedes: null
superseded_by: null
---
# adc-006 — KM retainer currency & composition (Proposed)
> **Proposed — operator input needed.** This stub reserves the decision slot
> per the PRD [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc)
> ("blocks erp#53 wiring; operator input needed"). Agents may enrich the
> draft with sources and alternatives; **only the operator Accepts**.
## Context
The recurring template id=1 carries 5100 while the actual May/June drafts were
2×2145.92 + 2×2575.11 EUR; the 2026-07-11 regularization surfaced a probable
**USD-denominated retainer** ($5,500/mo = $2,500 net-30 + $3,000 deferred
+3 months — erp#53; contract WIP `test/km_contract.json` in the trunk). FX
deltas have already been booked twice under adc-002. The invoicing method must
be stable before T05 automation wires it (permanence des méthodes — not
improvised per month).
## Decision
**To arbitrate — no decision recorded.** Open questions (erp#53):
1. USD multicurrency invoices vs EUR-at-settlement invoicing?
2. One invoice with two lines vs two invoices per month (net-30 part /
deferred part)?
3. Écarts de change policy interaction with adc-002 (would a USD-multicurrency
choice narrow or supersede it for future invoices)?
## Base légale & doctrine
To gather with the full draft: CGI art. 289 (invoice currency rules), PCG FX
treatment for multicurrency receivables, Dolibarr multicurrency module
implications. Nothing asserted here yet.
## Alternatives rejected
None yet — the alternatives above are open; each needs its why-it-loses
written before acceptance.
## Consequences
- **Blocks erp#53** (T05 monthly client invoice at A2): wiring waits for this
record to be Accepted.
- May supersede or narrow adc-002's scope for future invoices.
- Annexe: revenue-recognition/currency method disclosure once Accepted.
## QA & validation
Planned per erp#53: dry-run parity (first agent-fired invoice == its manual
twin), then one real month through the gate — after acceptance.
## References
- erp#53 (T05 client invoice; decision D3) · erp#54 (register seeding).
- PRD compliance.md § ADC seed table (adc-006).
- adc-002 (current FX method) · trunk WIP `test/km_contract.json`.
@@ -0,0 +1,61 @@
---
id: adc-007
title: "Capital-deposit entry path (1013; module compta vs paiement divers)"
status: Proposed
decided: null
effective_from: null
effective_until: null
supersedes: null
superseded_by: null
---
# adc-007 — Capital-deposit entry path (Proposed)
> **Proposed — awaits erp#51 findings** per the PRD
> [compliance ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc).
> Agents may enrich the draft; **only the operator Accepts**.
## Context
The apport en capital of **1,000 EUR** (2026-01-21, notaire FOUREZ → compte
1013) is still unrecorded in the ERP (erp#57, bucket C). The clean entry path
depends on whether Dolibarr's double-entry accounting module (Comptabilité
expert) is enabled and chart-mapped — exactly what the erp#51 sandbox
verifications establish.
## Decision
**To arbitrate after erp#51 findings — no decision recorded.** Candidate
paths:
1. Direct journal entry to 1013 via the accounting module (if enabled/mapped).
2. *Paiement divers* mapped to 1013 (bank-side entry) if the module path is
not available in time for FY-2026 close.
## Base légale & doctrine
- PCG account 1013 — *capital souscrit, appelé, versé*.
- Supporting documents: statuts + certificat du dépositaire (notaire FOUREZ).
- Module-side constraints: PRD compliance.md § Dolibarr verifications
(sandbox first).
## Alternatives rejected
None yet — the candidate paths above are open pending erp#51's finding on the
accounting-module state.
## Consequences
- FY-2026 balance-sheet completeness (capital line) — prerequisite for the AG
approving the FY-2026 accounts (calendar `ag-comptes-annuels-fy2026`).
- Blocks part of erp#57 (bucket C non-invoice entries).
## QA & validation
Planned: rehearse the chosen path on a fresh iso-prod sandbox checkpoint
first (erp#51 discipline), then the [HUMAN] prod entry per erp#57.
## References
- erp#51 (Dolibarr verifications) · erp#57 (bucket C) · erp#54 (seeding).
- PRD compliance.md § ADC seed table (adc-007) + § Dolibarr verifications.
+47
View File
@@ -0,0 +1,47 @@
---
id: adc-NNN
title: "<short decision title>"
status: Proposed # Proposed -> Accepted -> Superseded-by-NNN
decided: null # date the operator Accepted (a human act - agents draft, never Accept)
effective_from: null # aligned with the fiscal.yaml rules this record justifies; prefer an exercice boundary
effective_until: null # null = in force until superseded
supersedes: null # adc-NNN this record replaces, if any
superseded_by: null # set on THIS record when a successor is Accepted (the only edit allowed after acceptance)
---
# adc-NNN — <title>
> Format: MADR-lite + accounting fields, per the PRD
> [compliance ADC framework](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc).
> Status semantics: **agents draft, the operator Accepts — never the reverse.**
> Once Accepted (merged on main): **immutable — supersede, never edit**
> (permanence des méthodes, PCG art. 121-5). A method change is a new ADC with
> an explicit impact note and an effective date, ideally an exercice boundary.
## Context
The *fait générateur* — the transaction that forced a choice.
## Decision
The method chosen, stated so an agent can apply it mechanically.
## Base légale & doctrine
PCG / CGI / BOFiP / expert-comptable advice — every claim with its source.
## Alternatives rejected
Each alternative, with why it lost.
## Consequences
Accounts touched · annexe impact · downstream rules (fiscal.yaml rule ids).
## QA & validation
Sandbox rehearsal, euro-parity, expert review status.
## References
Example écritures, issues, PRD anchors.