partiduo-choruspro
= partiduo-choruspro — factures aux clients publics par Chorus Pro :toc: left :toc-title: Table des matières :icons: font
Partiduo est le portage en Crystal de https://noalyss.eu[NOALYSS], logiciel libre de comptabilité créé et maintenu par Dany De Bontridder. Partiduo n'est pas un projet officiel NOALYSS.
Ce dépôt est l'extension CHORUSPRO de Partiduo (ADR-004 D9, révisé le 28 septembre 2026) : les factures aux administrations publiques (État, collectivités, établissements publics) passent par https://chorus-pro.gouv.fr[Chorus Pro], pas par une plateforme agréée. Partiduo y dépose le PDF/A-3 Factur-X du module Facturation par l'API du portail PISTE, avec un compte technique, puis suit le statut de la facture. NOALYSS n'a pas d'équivalent.
La spécification est dans ../partiduo-docs/ : ADR-004 D9 (nature du client, Chorus Pro), ADR-003 (contrat d'extension), ADR-005 D4 (interface d'une extension), ADR-006 D3. Décisions : ../partiduo-app/DECISIONS.adoc (D-FIN-), blocages : ../partiduo-app/BLOCAGES.adoc (B-FIN-). Référence du contrat : link:doc/api/choruspro.adoc[].
== Fonctions
[cols="1,3",options="header"] |=== |Fonction |Dans CHORUSPRO
|Factures concernées |Factures, acomptes et avoirs au canal public_portal du cœur, proposé pour un client de nature « administration publique » (SIREN commençant par 1 ou 2, ou nature choisie sur la fiche). Brouillons listés avec leurs avertissements.
|Contrôles |SIRET du destinataire ; structure connue de Chorus Pro ; numéro d'engagement (référence de commande, BT-13) et code service (référence acheteur, BT-10) quand la structure les exige ; service actif. Les deux références sont imprimées sur la facture : elles se saisissent avant l'émission.
|Dépôt |PDF/A-3 Factur-X du module Facturation (flux IN_DP_E2_CII_FACTURX), réservé avant l'appel (un seul dépôt à la fois par facture ; sans réponse de Chorus Pro, dépôt « à vérifier » sur le portail, jamais rejoué seul) ; la facture passe « envoyée » (canal figé). Une facture « à recycler » se recycle sur le portail Chorus Pro, puis son statut se relève.
|Suivi |Statuts de Chorus Pro ramenés à six : déposée, mise à disposition, mise en paiement, suspendue, à recycler, rejetée (motif conservé) ; historique ; un dépôt ne se supprime pas (déclencheur PostgreSQL).
|Paiements |Abonnée à payment.matched et payment.unmatched (lettrage de la Comptabilité) : facture réglée → dépôt noté réglé, statut « mise en paiement », suivi arrêté ; délettrage → retour au statut d'avant le lettrage ou au dernier statut relevé (D-CPP-002).
|Repli |Sans connexion : PDF à déposer sur le portail, dépôt et statuts notés à la main.
|Identifiants |Application PISTE (client_id, client_secret) et compte technique, secrets chiffrés (AES-256-CBC puis HMAC-SHA-256), jamais réaffichés ; environnement de qualification ou de production toujours affiché. |===
== État
Écrite contre une interface abstraite (Choruspro::Transport) et un Chorus Pro simulé (spec/support/simulated_chorus_pro.cr). L'adaptateur réel Choruspro::PisteTransport (src/choruspro/piste.cr : jeton OAuth 2 PISTE, en-tête cpro-account, structures et services, dépôt du flux Factur-X, suivi du flux puis de la facture) est écrit d'après la documentation publique et testé contre un HTTP simulé, mais pas encore essayé sur la qualification faute d'accès (BLOCAGES B-FIN-002). Il se branche par PARTIDUO_CHORUSPRO_TRANSPORT=piste (DECISIONS D-CPP-001) ; sans cette variable, l'extension reste en repli (dépôt sur le portail noté à la main).
Suite d'intégration facultative : spec/integration/qualification_spec.cr, activée si ~/.config/partiduo/choruspro/ et ~/.config/partiduo/choruspro-sandbox.env existent et ne sont pas vides (variables CHORUSPRO_SANDBOX_CLIENT_ID, _CLIENT_SECRET, _LOGIN, _PASSWORD, _RECIPIENT_SIRET ; dépôt réel seulement avec CHORUSPRO_SANDBOX_DEPOSIT=on et facturx.pdf dans le dossier). Aucun secret n'est affiché ni journalisé.
== Composition
[source,crystal]
require "partiduo-ui-bulma/partiduo_ui" require "partiduo-choruspro" require "partiduo-choruspro/ui/bulma"
puis Choruspro::INSTALLED_APPS + Choruspro::Ui::INSTALLED_APPS
et, pour la ligne de commande : require "partiduo-choruspro/cli"
== Commandes
[source,sh]
SKIP_MARTEN_CLI_PRECOMPILATION=1 shards install DATABASE_URL='postgres:///partiduo_test_?host=/tmp' crystal spec crystal run manage.cr -- genmigrations choruspro # aucun écart attendu crystal tool format src ui spec config scripts manage.cr && bin/ameba
== Licence
AGPL-3.0-or-later (texte intégral dans LICENSE).
partiduo-choruspro
- 0
- 0
- 0
- 1
- 1
- about 2 hours ago
- September 28, 2026
GNU Affero General Public License v3.0
Mon, 12 Oct 2026 16:19:17 GMT