Files
deep-dive-ming/docs/deep-dive-asp-domain.md

182 lines
7.8 KiB
Markdown

# ASP Bundle Deep Dive
## Ubiquitous Language
- **FicheContratAsp**: ASP-facing contract dossier with ASP IDs, statuses, and errors.
Path: `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
- **TypeContratAsp**: ASP contract typology (`NPT`, `I`, `R1..R99`) and renewal semantics.
Path: `src/Uriae/AspBundle/Entity/TypeContratAsp.php`
- **Suivi**: trace line for ASP file exchanges.
Path: `src/Uriae/AspBundle/Entity/Suivi.php`
- **ModificationAsp**: ASP modification request with dedicated lifecycle.
Path: `src/Uriae/AspBundle/Entity/ModificationAsp.php`
- **FichierEnvoiAsp / FichierRetourAsp**: outbound/inbound ASP files.
Paths: `src/Uriae/AspBundle/Entity/AbstractFichierAsp.php`, `src/Uriae/AspBundle/Entity/FichierRetourAsp.php`
- **SuiviMensuelEtSortieAsp**: monthly batch submission root.
Path: `src/Uriae/AspBundle/Entity/SuiviMensuelEtSortieAsp.php`
- **FicheSuiviMensuelEtSortieAsp**: monthly line per contract.
Path: `src/Uriae/AspBundle/Entity/FicheSuiviMensuelEtSortieAsp.php`
- **SortieEtSuiviAnnuel / FicheSortieEtSuiviAnnuel**: annual exit/follow-up model.
Paths: `src/Uriae/AspBundle/Entity/SortieEtSuiviAnnuel.php`, `src/Uriae/AspBundle/Entity/FicheSortieEtSuiviAnnuel.php`
- **Erreur**: unified internal/return error catalog by ASP domain type.
Path: `src/Uriae/AspBundle/Entity/Erreur.php`
## Domain Core
- **De facto root: `FicheContratAsp`**
- Carries ASP IDs, multi-channel statuses (inscription/sortie/renewal), ASP and internal errors.
- Hard-linked to `Contrat` (Employee context).
- Paths:
- `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
- `src/Uriae/EmployeeBundle/Entity/Contrat.php`
- **Monthly submission cluster**
- Root: `SuiviMensuelEtSortieAsp`
- Child lines: `FicheSuiviMensuelEtSortieAsp`
- Paths:
- `src/Uriae/AspBundle/Entity/SuiviMensuelEtSortieAsp.php`
- `src/Uriae/AspBundle/Entity/FicheSuiviMensuelEtSortieAsp.php`
- **Annual submission cluster**
- Root: `SortieEtSuiviAnnuel`
- Child lines: `FicheSortieEtSuiviAnnuel`
- Paths:
- `src/Uriae/AspBundle/Entity/SortieEtSuiviAnnuel.php`
- `src/Uriae/AspBundle/Entity/FicheSortieEtSuiviAnnuel.php`
- **Status behavior**
- Generic status set in `StatusTrait`.
- Modification flow has separate status constants.
- Paths:
- `src/Uriae/AspBundle/Traits/StatusTrait.php`
- `src/Uriae/AspBundle/Entity/ModificationAsp.php`
## Invariants / Concistency
- `src/Uriae/AspBundle/Traits/StatusTrait.php`
- Status is constrained to allowed values.
- `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
- Clearing both ASP IDs resets auto flags/dates and reverts transfer status branch.
- Setting both ASP IDs manually marks manual provenance and transmitted status.
- `src/Uriae/AspBundle/Entity/TypeContratAsp.php`
- Contract type codes constrained to `NPT`, `I`, `R1..R99`.
- Renewal semantics inferred from label set.
- `src/Uriae/AspBundle/Repository/FicheContratAspRepository.php`
- Inscription/renewal/sortie/modification candidate filtering encoded via cross-context query rules.
- Monthly candidate contracts depend on period overlap + ASP IDs presence.
- `src/Uriae/AspBundle/Validator/ErreursInternesValidator.php`
- EI duration <= 24 months.
- Work hours/salary/annexe prerequisites.
- Renewal sequence integrity and ASP ID prerequisites.
- Aid/resource/PE/agrement consistency mapped to error catalog entries.
- `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAsp.php`
- Return-line length depends on SIAE type.
- `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspSuivieMensuelEtSortie.php`
- Monthly return line must have expected structure and success code handling.
- `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspSortieEtSuiviAnnuel.php`
- Annual return parsing enforces line count format and matching sent file expectations.
## Cross-context Dependencies
- **ASP -> Employee**
- `FicheContratAsp` linked to `Contrat`.
- ASP processing mutates employee-related fields.
- Paths:
- `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
- `src/Uriae/EmployeeBundle/Entity/Contrat.php`
- `src/Uriae/AspBundle/Manager/AspFicheContratManager.php`
- **ASP -> Structure**
- Depends on structure metadata (`SiaeType`, `AnnexeFinanciere`, measures, ASP IDs).
- Paths:
- `src/Uriae/StructureBundle/Entity/Structure.php`
- `src/Uriae/StructureBundle/Entity/SiaeType.php`
- `src/Uriae/StructureBundle/Entity/AnnexeFinanciere.php`
- **ASP -> Union**
- Uses sortie/typology references for mappings and checks.
- Paths:
- `src/Uriae/UnionBundle/Entity/SituationSortie.php`
- `src/Uriae/UnionBundle/Entity/TypeSituationSortie.php`
- **ASP -> Suivi (indirect reporting coupling)**
- Aggregated reporting joins via broader employee/bilan query paths.
- Paths:
- `src/Uriae/EmployeeBundle/Repository/EmployeeRepository.php`
- `src/Uriae/BilanBundle/Model/Formatter.php`
## DDD Slicing
- **Aggregates (candidate)**
- `AspContractDossier` (replacement concept for `FicheContratAsp`).
- `AspModificationRequest`.
- `AspMonthlySubmission` + `MonthlySubmissionLine`.
- `AspAnnualExitSubmission` + `AnnualExitSubmissionLine`.
- **Domain services (candidate)**
- `AspEligibilityPolicy`.
- `AspInternalErrorPolicy`.
- `AspReturnFileParser` (pure parsing).
- `AspSubmissionDomainService` (state transitions and domain decisions).
- **Repository interfaces (domain-facing)**
- `AspContractDossierRepository`.
- `AspMonthlySubmissionRepository`.
- `AspAnnualExitSubmissionRepository`.
- `AspErrorCatalogRepository`.
- **Domain events (candidate)**
- `AspSubmissionRequested`.
- `AspSubmissionAccepted`.
- `AspSubmissionRejected`.
- `AspIdsAssignedToContract`.
- `AspInternalRuleViolationDetected`.
- `AspMonthlyLineAccepted`.
- `AspMonthlyLineRejected`.
- **Value objects (candidate)**
- `AspEmployeeId`, `AspContractId`.
- `TransmissionStatus`.
- `AspErrorCode`.
- `SubmissionPeriod`.
- `AnnexeNumber`.
- `MesureCode`.
- `AspLineNumber`.
## Reading Order
1. `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
2. `src/Uriae/AspBundle/Traits/StatusTrait.php`
3. `src/Uriae/AspBundle/Entity/TypeContratAsp.php`
4. `src/Uriae/AspBundle/Repository/FicheContratAspRepository.php`
5. `src/Uriae/AspBundle/Validator/ErreursInternesValidator.php`
6. `src/Uriae/AspBundle/Manager/AbstractAspManager.php`
7. `src/Uriae/AspBundle/Manager/AspFicheContratManager.php`
8. `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAsp.php`
9. `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspRenouvellement.php`
10. `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspModification.php`
11. `src/Uriae/AspBundle/Controller/AbstractInscriptionRenouvellementSortieController.php`
12. `src/Uriae/AspBundle/Controller/InscriptionController.php`
13. `src/Uriae/AspBundle/Controller/RenouvellementController.php`
14. `src/Uriae/AspBundle/Controller/ModificationController.php`
15. `src/Uriae/AspBundle/Entity/SuiviMensuelEtSortieAsp.php`
16. `src/Uriae/AspBundle/Entity/FicheSuiviMensuelEtSortieAsp.php`
17. `src/Uriae/AspBundle/Manager/SuiviMensuelManager.php`
18. `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspSuivieMensuelEtSortie.php`
19. `src/Uriae/AspBundle/Entity/SortieEtSuiviAnnuel.php`
20. `src/Uriae/AspBundle/Entity/FicheSortieEtSuiviAnnuel.php`
21. `src/Uriae/AspBundle/Model/SortieEtSuiviAnnuelManager.php`
22. `src/Uriae/AspBundle/Model/FichierRetourAsp/ProcessFichierRetourAspSortieEtSuiviAnnuel.php`
23. `src/Uriae/EmployeeBundle/Entity/Contrat.php`
24. `src/Uriae/EmployeeBundle/Controller/ContratsController.php`
25. `src/Uriae/EmployeeBundle/Form/Type/ContratType.php`
26. `src/Uriae/StructureBundle/Entity/SiaeType.php`
27. `src/Uriae/UnionBundle/Entity/TypeSituationSortie.php`