Audit 06 — SOLID
Objectif : verifier le respect des 5 principes SOLID.
Cible : document-parser/ (hors .venv/, __pycache__/), frontend/src/
Checklist
6.1 S — Single Responsibility Principle
| # |
Item |
Poids |
| 6.1.1 |
Chaque service a une responsabilite unique (document_service = documents, analysis_service = analyses) |
2 |
| 6.1.2 |
Chaque store Pinia gere un seul feature |
2 |
| 6.1.3 |
Les routes API sont groupees par ressource (documents.py, analyses.py) |
1 |
| 6.1.4 |
Aucune classe ou module ne cumule des responsabilites heterogenes (ex: un service qui fait du parsing ET de la persistence) |
2 |
6.2 O — Open/Closed Principle
| # |
Item |
Poids |
| 6.2.1 |
Les ports (domain/ports.py) permettent d'ajouter de nouveaux adaptateurs sans modifier le code existant |
2 |
| 6.2.2 |
Le systeme local/remote est extensible via _build_converter() sans modifier les services |
2 |
| 6.2.3 |
L'ajout d'un nouveau format d'export ne necessite pas de modifier les endpoints existants |
1 |
6.3 L — Liskov Substitution Principle
| # |
Item |
Poids |
| 6.3.1 |
LocalConverter et ServeConverter sont interchangeables (meme protocole, meme contrat de retour) |
3 |
| 6.3.2 |
Les implementations de ports ne lancent pas d'exceptions non prevues par le contrat |
2 |
| 6.3.3 |
Pas de isinstance() ou type() check pour differencier les implementations |
2 |
6.4 I — Interface Segregation Principle
| # |
Item |
Poids |
| 6.4.1 |
DocumentConverter et DocumentChunker sont des ports separes (pas une "god interface") |
2 |
| 6.4.2 |
Aucun port ne force une implementation a definir des methodes qu'elle n'utilise pas |
2 |
6.5 D — Dependency Inversion Principle
| # |
Item |
Poids |
| 6.5.1 |
Les services dependent de protocoles abstraits (ports), pas d'implementations concretes |
3 |
| 6.5.2 |
L'injection se fait dans main.py (composition root) |
2 |
| 6.5.3 |
Pas d'instanciation directe d'adaptateurs dans les services (LocalConverter() dans un service = violation) |
3 |
Commandes de verification
# 6.3.3 — isinstance checks sur les adaptateurs
grep -rn "isinstance\|type(" document-parser/services/ --include="*.py"
# 6.5.3 — Instanciation directe d'adaptateurs dans services
grep -rn "LocalConverter\|ServeConverter\|LocalChunker" document-parser/services/ --include="*.py"
# 6.5.1 — Imports directs d'infra dans services
grep -rn "from infra\.\|import infra\." document-parser/services/ --include="*.py"
Regles de notation
- Tout item de poids 3 non conforme = ecart
[CRIT]
- Tout item de poids 2 non conforme = ecart
[MAJ]
- Tout item de poids 1 non conforme = ecart
[MIN]