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
+158
View File
@@ -0,0 +1,158 @@
# ============================================================================
# fleet/profile/fiscal.yaml — Arcodange fiscal profile (machine-readable, T11)
# ============================================================================
# What the fiscal atoms read (T10 TVA preparation, T03 VAT ventilation, T11
# calendar) instead of carrying business rules in prompts — per the PRD
# agent-catalog § "The document surface agents read".
#
# PRD root: https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office
# All "PRD <leaf> § <anchor>" comments below were verified against the factory
# repo at origin/main on 2026-07-18.
#
# MUTATION POLICY — changes arrive as PRs ONLY. The T12 regulatory watch
# *proposes* a diff (source links + effective dates, PRD task-inventory § T12);
# a human reviews and merges (PRD task-inventory § T11 guardrail: "the calendar
# file is reviewed like code"). No agent edits this file directly. A rule
# change moves its ADC too — supersede, never edit (PRD compliance.md § ADC,
# rule 1: permanence des méthodes made structural).
#
# CONTRACT — every rule carries:
# effective_from / effective_until (null = in force until superseded)
# decision: adc-NNN (its justification record, decisions/)
# so the chain écriture → règle → ADC → base légale resolves in four hops
# (PRD compliance.md § ADC, rule 2).
#
# Schema: fiscal.schema.json — validate with: python3 scripts/validate.py
# (stdlib-only; this file is written in the strict YAML subset the validator
# parses: block maps/lists, single-line scalars, [flow] lists of scalars,
# comments — no anchors, no multi-line scalars; see ../profile README).
# ============================================================================
version: 1
entity:
name: "Arcodange"
legal_form: "SAS" # PRD README.md § The problem — "one-person SAS (software consulting)"
siren: "999657455" # erp#54 + agent memory arcodange-tva-fiscal — NOT corroborated by a PRD leaf (see README § Facts not corroborated by the PRD)
incorporated: "2026-01" # PRD compliance.md § Questions for the expert-comptable — "mid-January 2026 incorporation"; exact day not in the PRD (month precision on purpose)
fiscal_year_end: "12-31" # PRD compliance.md § Questions for the expert-comptable — "close 2026-12-31"
vat_registered: true # holder of the régime réel simplifié (rules below)
b2b_only: true # PRD compliance.md § Obligations, NF525 row — "Arcodange is B2B-only"
# Informational ERP-read position, NOT a rule (hence no decision field).
# PRD README.md § regulatory table (2026-12 row) + task-inventory § T10 trigger:
# expected ≈ 0 € to pay while in credit — "verify, don't assume".
vat_position:
stance: "credit" # TVA collectée = 0 (100 % of revenue in box E2) vs déductible on FR supplier invoices
net_credit_eur_approx_min: 223.22 # dolibarr-tva-summary skill figure (all-time at skill authoring) — ERP read, not a PRD figure
net_credit_eur_approx_max: 267.12 # agent memory arcodange-tva-fiscal (prod `arcodange tva summary`, 2026-06-30) — ERP read, not a PRD figure
as_of: "2026-06-30"
note: "Approximation from ERP reads. Verify on the espace pro impots.gouv.fr before any filing - never assume (PRD task-inventory T10)."
rules:
# --- VAT regime -----------------------------------------------------------
- id: "vat-regime-reel-simplifie"
title: "Régime réel simplifié (CA12 + acomptes) for FY-2026"
category: "vat-regime"
statement: "Arcodange declares VAT under the régime réel simplifié: one annual CA12 (form 3517) plus two acomptes (July and December). No monthly or quarterly CA3 under this regime. Stay on it until its legal abolition - no early opt-out to the réel normal."
effective_from: "2026-01-01" # conservative exercice-start bound; incorporation is "mid-January 2026" (PRD compliance.md § Questions) — exact registration day NOT in the PRD
effective_until: "2026-12-31" # PRD task-inventory.md § T11 step 1 — "réel simplifié until 2026-12-31"
decision: "adc-004"
legal_basis:
- "CGI art. 302 septies A (régime simplifié d'imposition)"
- "LF 2025 art. 38 - abolition effective 2027-01-01 (PRD task-inventory § T10 trigger)"
source: "PRD task-inventory.md § T11 step 1 + § T10 trigger; PRD README.md § three dated regulatory obligations"
notes: "The regime was confirmed by a DGFiP mail of 2026-06-25 (agent memory arcodange-tva-fiscal) - not a PRD leaf; keep the mail as evidence."
- id: "vat-regime-ca3-quarterly"
title: "Quarterly CA3 from the régime simplifié abolition"
category: "vat-regime"
statement: "From 2027-01-01 the régime réel simplifié is abolished: Arcodange files quarterly CA3 declarations (turnover under 1,000,000 EUR; the CA3 becomes monthly above that threshold). A last CA12 covering FY-2026 is still filed in 2027."
effective_from: "2027-01-01" # PRD roadmap.md § Milestones — "2027-01-01 | Régime simplifié abolished → quarterly CA3 | regulatory — hard"
effective_until: null # in force until superseded (e.g. crossing the 1 M€ threshold → monthly)
decision: "adc-004"
legal_basis:
- "LF 2025 art. 38 (PRD task-inventory § T10 trigger)"
- "CGI art. 287 (CA3 filing)"
- "1 M€ monthly threshold noted in PRD task-inventory § T12 step 1"
source: "PRD roadmap.md § Milestones + task-inventory.md § T10 trigger"
# --- VAT treatment: clients ----------------------------------------------
- id: "client-export-autoliquidation"
title: "Client invoices to KissMetrics (extra-EU export): autoliquidation art. 259-1° CGI"
category: "vat-treatment"
statement: "B2B services to KissMetrics (US, extra-EU) are outside French VAT scope: the place of supply is where the customer is established. 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. Today this covers 100 % of client revenue."
effective_from: "2026-01-01" # practiced "since the first invoice" (PRD compliance.md § ADC seed table, adc-001); conservative exercice-start bound — the first invoice's exact date is not in the PRD
effective_until: null
decision: "adc-001"
legal_basis:
- "CGI art. 259-1° (place of supply of B2B services = the customer)"
- "CA3 box E2 mapping per PRD task-inventory § T10 step 1"
source: "PRD compliance.md § ADC seed table (adc-001) + task-inventory.md § T05 step 2 and § T10 step 1"
notes: "From 2027-09-01 these export invoices enter e-reporting scope (PRD roadmap § Milestones); they stay OUT of domestic e-invoicing scope, so the PAF remains load-bearing for them (PRD compliance.md § Obligations, PAF row)."
# --- VAT treatment: suppliers --------------------------------------------
- id: "supplier-fr-vat-deductible"
title: "FR supplier invoices: VAT déductible at the invoiced rate (20 % standard)"
category: "vat-treatment"
statement: "Domestic French supplier invoices carry deductible French VAT at the invoiced rate - 20 % standard in practice. A rate outside the whitelist {0, 2.1, 5.5, 10, 20} without an explicit reverse-charge mention is quarantined, never defaulted."
effective_from: "2026-01-01" # standard-law ventilation applied since the first exercice (conservative exercice-start bound; see adc-004)
effective_until: null
decision: "adc-004" # standard law operated under the regime decision — recorded as a downstream rule in adc-004 § Consequences
legal_basis:
- "CGI art. 271 (droit à déduction)"
- "Rate whitelist per PRD task-inventory § T02 step 5"
source: "PRD task-inventory.md § T03 step 2 - 'correct VAT treatment per the fiscal profile: FR 20 % déductible, intra-EU reverse charge, etc.'"
- id: "supplier-intra-eu-reverse-charge"
title: "Intra-EU B2B supplier invoices: reverse charge (autoliquidation)"
category: "vat-treatment"
statement: "Intra-EU B2B supplier invoices (e.g. Wise, BE) arrive without VAT: Arcodange self-assesses French VAT - declared as collectée AND déductible, net zero for a fully deductible business. Déductible-side CA3 mapping: lines 17+24."
effective_from: "2026-01-01" # same conservative exercice-start bound as supplier-fr-vat-deductible
effective_until: null
decision: "adc-004" # downstream rule of the regime decision, see adc-004 § Consequences
legal_basis:
- "CGI art. 283-2 (autoliquidation des prestations intracommunautaires)"
- "CA3 lines 17+24 mapping per the dolibarr-tva-deductible skill - ERP-side convention, not a PRD leaf"
source: "PRD task-inventory.md § T03 step 2 (intra-EU reverse charge) + § T10 step 1"
# --- Bookkeeping methods --------------------------------------------------
- id: "fx-deltas-766-666"
title: "FX deltas on customer wires → 766 / 666"
category: "bookkeeping"
statement: "Customer payments are recorded at the invoice's remaining EUR amount; any difference against the EUR actually received is booked separately as gains de change (account 766) or pertes de change (account 666). A validated invoice is never adjusted for FX - corrections stay append-only per the ledger grammar."
effective_from: "2026-01-01" # method applies from exercice start; formalized in the 2026-07-11 books regularization (PRD compliance.md § ADC seed table, adc-002)
effective_until: null
decision: "adc-002"
legal_basis:
- "PCG chart accounts 666 (pertes de change) / 766 (gains de change)"
- "PRD compliance.md § The ledger grammar (append-only corrections)"
source: "PRD compliance.md § ADC seed table (adc-002); worked examples in erp#57 (+1.08 EUR FAC004, +50.05 EUR FAC006)"
- id: "saas-subscriptions-expensed"
title: "AI/SaaS subscriptions expensed (6xx), never immobilized"
category: "bookkeeping"
statement: "AI/SaaS subscription costs are expensed to class-6 accounts in the period invoiced, never immobilized at current unit costs. If a perpetual licence or a single subscription ever materially exceeds the small-equipment tolerance, a superseding ADC is drafted before changing method."
effective_from: "2026-01-01" # implicit practice since the first exercice (PRD compliance.md § ADC seed table, adc-003: "implicit today")
effective_until: null
decision: "adc-003"
legal_basis:
- "PCG art. 211-1 (asset definition: control + future economic benefits)"
- "BOI-BIC-CHG-20-30-10 (500 EUR HT small-equipment tolerance) - general doctrine, not a PRD leaf; expert-comptable confirmation requested in adc-003"
source: "PRD compliance.md § ADC seed table (adc-003)"
- id: "personal-card-cca-lane"
title: "Personal-card business expenses through the compte courant d'associé (455)"
category: "bookkeeping"
statement: "Business expenses paid with the operator's personal card are recorded as normal supplier invoices whose payment is booked against the compte courant d'associé (account 455; Dolibarr bank account G.RADUREAU CCA, fk_account=3). That account is invisible to the bank APIs - a permanent, flagged manual lane, never silently ignored. Reimbursement is a separate human decision."
effective_from: "2026-01-01" # practiced since the first exercice; formalized with erp#57 (PRD compliance.md § ADC seed table, adc-005)
effective_until: null
decision: "adc-005"
legal_basis:
- "PCG account 455 (associés - comptes courants)"
source: "PRD compliance.md § ADC seed table (adc-005) + task-inventory.md § T07 guardrail (fk_account=3 manual lane)"