[DTP-Worker 20260811_095844] Auto exec · session 20260811_095844
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Reproductibilité des artefacts out/ (build == commité) (push) Has been cancelled
CI / Fraîcheur matrice de régression (run == commité) (push) Has been cancelled
CI / Intégrité du câblage CI (gate agrège tout · gates statiques verrouillés) (push) Has been cancelled
CI / Intégrité des chiffres du README (valeur == artefact cité · (push) Has been cancelled
CI / Intégrité mobile-build.yml (gating portable · activation différée · (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / CRM · Financement Bancaire (gate hypothécaire RD) (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / QA · Audit 4Big (95+/100 sur 100% deliverables) (push) Has been cancelled
CI / Démo · Scénarios (run-sheet P07 banquier / P05 client) (push) Has been cancelled
CI / QA · Matrice de régression exhaustive (Sprint 8) (push) Has been cancelled
CI / DevOps · Run-book de déploiement VPS unifié (Sprint 8) (push) Has been cancelled
CI / QA · Matrice d'acceptation / traçabilité MVP (Sprint 8) (push) Has been cancelled
CI / Mobile · config app Expo/EAS (navigation par rôle) (push) Has been cancelled
CI / PIE · manifest de dépendances (Annexe 12 · V10.1) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled

This commit is contained in:
Claude Code DTP Worker
2026-08-11 10:11:32 +00:00
parent 548a05ec61
commit 39def91880
9 changed files with 49 additions and 12 deletions
@@ -39,6 +39,21 @@ class TestNumberParsing(unittest.TestCase):
self.assertEqual(parser.parse_price("DOP 8 850 000"), 8850000.0)
self.assertEqual(parser.parse_price("1,250,000.50"), 1250000.50)
def test_prix_espace_insecable_milliers(self):
# Les outils d'édition FR/ES (Word, InDesign) insèrent l'ESPACE INSÉCABLE
# U+00A0 comme séparateur de milliers dans les prix réels des data_room.
# `lib/parser.py` la capte via une char-class Unicode-whitespace (`\s`).
# Verrou : ce test mord si l'on réduit cette capture à de l'ASCII pur
# (retrait de TOUTE prise en charge whitespace-Unicode → seul le 1er
# chiffre survit, ex. 8.0 au lieu de 8 850 000) — même racine « détecter
# la forme, pas une graphie » que l'arc de fixes audit_4big.
# NBSP en escape explicite \u00a0 pour garder l'intention lisible (0 octet invisible).
nb = "\u00a0"
self.assertEqual(parser.parse_price(f"DOP 8{nb}850{nb}000"), 8850000.0)
self.assertEqual(parser.parse_price(f"USD 1{nb}250{nb}000,50"), 1250000.50)
self.assertEqual(parser.parse_number(f"1{nb}250"), 1250.0)
self.assertEqual(parser.parse_int(f"12{nb}unités"), 12)
def test_absents_donnent_none(self):
for token in ["", "", "-", "non défini", "n/d", "{{typo_1_prix_usd}}", "...", "TBD"]:
self.assertIsNone(parser.parse_price(token), f"{token!r} devrait être None")