An IA assisted dive into domain from legacy code
This commit is contained in:
@@ -2,6 +2,203 @@
|
||||
|
||||
## Ubiquitous Language
|
||||
|
||||
- **Employee / Salarie / Employe**: central person lifecycle record.
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
- **TypeEmployee**: profile category driving workflows/filters.
|
||||
Paths: `src/Uriae/EmployeeBundle/Entity/Employee.php`, `src/Uriae/EmployeeBundle/Repository/EmployeeRepository.php`
|
||||
- **Employee state** (`Postulant`, `En contrat`, `Sorti`): lifecycle projection from contracts/sortie.
|
||||
Paths: `src/Uriae/EmployeeBundle/Entity/Employee.php`, `src/Uriae/EmployeeBundle/Model/EmployeeStateUpdater.php`
|
||||
- **Contrat**: contract period + métier + site + ASP bridge.
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/Contrat.php`
|
||||
- **ParcoursInsertion**: insertion timeline + sortie segments.
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/ParcoursInsertion.php`
|
||||
- **SituationSortie**: exit segment with dates/type.
|
||||
Path: `src/Uriae/UnionBundle/Entity/SituationSortie.php`
|
||||
- **FirstHome**: intake/prescriber/resource/mutuelle context.
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/FirstHome.php`
|
||||
- **AdministrativeInformation**: civil/admin identity block (NIR/NTT, nationality, birth info).
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/AdministrativeInformation.php`
|
||||
- **PersonnalDetail**: address/contact block.
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/PersonnalDetail.php`
|
||||
- **HiringStatus**: eligibility and social condition matrix (RSA, AAH, RQTH, etc.).
|
||||
Path: `src/Uriae/EmployeeBundle/Entity/HiringStatus.php`
|
||||
|
||||
|
||||
## Domain Core
|
||||
|
||||
- **De facto root: `Employee`**
|
||||
- Owns/coordinates personal, admin, intake, insertion, contracts, jobs, medical visits, receipts, competencies.
|
||||
- Path: `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
|
||||
- **Contract lifecycle cluster**
|
||||
- `Contrat` + ASP contract dossier + sortie semantics.
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/Contrat.php`
|
||||
- `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
|
||||
- `src/Uriae/UnionBundle/Entity/SituationSortie.php`
|
||||
|
||||
- **Insertion timeline cluster**
|
||||
- `ParcoursInsertion` with associated sortie segments.
|
||||
- Path: `src/Uriae/EmployeeBundle/Entity/ParcoursInsertion.php`
|
||||
|
||||
- **Profile/intake clusters**
|
||||
- `PersonnalDetail`, `AdministrativeInformation`, `HiringStatus`, `FirstHome`.
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/PersonnalDetail.php`
|
||||
- `src/Uriae/EmployeeBundle/Entity/AdministrativeInformation.php`
|
||||
- `src/Uriae/EmployeeBundle/Entity/HiringStatus.php`
|
||||
- `src/Uriae/EmployeeBundle/Entity/FirstHome.php`
|
||||
|
||||
## Invariants / Concistency
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
- State constrained to known values.
|
||||
- `civility` drives derived sex.
|
||||
- Sortie considered complete only when both date + type are present.
|
||||
- Contract timeline helpers (first/last/previous/initial logic).
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Model/EmployeeStateUpdater.php`
|
||||
- Recomputes state from contracts/sortie chronology.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/Contrat.php`
|
||||
- Contract date ordering constraints.
|
||||
- ROME validity constraints.
|
||||
- ASP-specific duration-in-months rounding behavior.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Form/Validator/DateEffectiveContratValidator.php`
|
||||
- Prevents new/update contract when previous relevant contract has no effective end date.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Form/Validator/CodeRomeValidator.php`
|
||||
- Rejects expired ROME codes at contract start.
|
||||
- Adds date-threshold behavior around 2022 policy.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/ParcoursInsertion.php`
|
||||
- Agreement number format constraints.
|
||||
- First/last sortie determination rules by entry dates.
|
||||
|
||||
- `src/Uriae/UnionBundle/Entity/SituationSortie.php`
|
||||
- Sortie type/date consistency (both required together).
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Model/SituationSortieUpdater.php`
|
||||
- Rebuilds contract-sortie mapping.
|
||||
- Removes empty sorties.
|
||||
- Creates sortie for orphan contracts.
|
||||
- Triggers state refresh.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/AdministrativeInformation.php`
|
||||
- Birth date required and validated.
|
||||
- NIR/NTT consistency via validators.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Form/Validator/SocialSecurityNumberValidator.php`
|
||||
- NIR shape + civility constraints.
|
||||
- NTT fallback requirement when NIR absent in specific cases.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Form/Validator/TemporaryTechnicalNumberValidator.php`
|
||||
- NIR/NTT mutual exclusivity.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/HiringStatus.php`
|
||||
- Coherence between social flags (RSA/ayant-droit, sans-ressources, AAH-handicap linkage).
|
||||
- Young-in-difficulty age window logic based on DOB + first contract.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/PersonnalDetail.php`
|
||||
- At least one phone required.
|
||||
- Phone/address/town/zip consistency checks.
|
||||
|
||||
- `src/Uriae/EmployeeBundle/Entity/FirstHome.php`
|
||||
- PE inscription-dependent fields required conditionally.
|
||||
- PE identifier formatting.
|
||||
- Conventionneur-only partner constraint.
|
||||
|
||||
## Cross-context Dependencies
|
||||
|
||||
- **Employee -> Suivi**
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
- `src/Uriae/SuiviBundle/Entity/Accompagnement.php`
|
||||
- `src/Uriae/SuiviBundle/Entity/Evaluation.php`
|
||||
- `src/Uriae/SuiviBundle/Entity/Problematique.php`
|
||||
- `src/Uriae/SuiviBundle/Entity/Potentiel.php`
|
||||
- DDD direction idea: Suivi consumes Employee identity/reference, not full object graph.
|
||||
|
||||
- **Employee -> ASP**
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/Contrat.php`
|
||||
- `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
|
||||
- `src/Uriae/AspBundle/Manager/AspFicheContratManager.php`
|
||||
- DDD direction idea: ASP as downstream integration context reacting to contract events.
|
||||
|
||||
- **Employee -> Union**
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/ParcoursInsertion.php`
|
||||
- `src/Uriae/UnionBundle/Entity/SituationSortie.php`
|
||||
- DDD direction idea: shared kernel or ACL around sortie taxonomy.
|
||||
|
||||
- **Employee <-> Structure**
|
||||
- Paths:
|
||||
- `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
- `src/Uriae/StructureBundle/Entity/Structure.php`
|
||||
- DDD direction idea: explicit IDs/reference objects instead of deep bidirectional graph.
|
||||
|
||||
|
||||
## DDD Slicing
|
||||
- **Aggregates (candidate)**
|
||||
- `EmployeeProfile` (identity + personal/admin + hiring status).
|
||||
- `EmploymentLifecycle` (contracts + state projection + timeline fields).
|
||||
- `InsertionJourney` (parcours + sortie segments).
|
||||
- `IntakeContext` (first home/resources/mutuelle data).
|
||||
- `EmployeeCompetency` (employee-competence assignment).
|
||||
|
||||
- **Domain services (candidate)**
|
||||
- `EmployeeStatePolicy` (from `EmployeeStateUpdater`).
|
||||
- `SituationSortieRebuilder` (from `SituationSortieUpdater`).
|
||||
- `ContractTimelineCalculator` (first/last contract rules).
|
||||
- `HiringStatusPolicy` (coherence rules currently scattered in entity callbacks/validators).
|
||||
|
||||
- **Repository interfaces (domain-facing)**
|
||||
- `EmployeeRepository` (aggregate retrieval only).
|
||||
- `ContractRepository` (active/last/chronology views).
|
||||
- `InsertionJourneyRepository`.
|
||||
- Separate read-model queries for reporting/export/bilan.
|
||||
|
||||
- **Domain events (candidate)**
|
||||
- `ContractAdded`, `ContractUpdated`, `ContractRemoved`.
|
||||
- `EmployeeStateChanged`.
|
||||
- `SituationSortieRecomputed`.
|
||||
- `AspSubmissionAcknowledged` (integration side).
|
||||
|
||||
- **Value objects (candidate)**
|
||||
- `EmployeeState`, `EmployeeTypeSlug`.
|
||||
- `ContractPeriod`.
|
||||
- `SocialSecurityNumber`, `TemporaryTechnicalNumber`.
|
||||
- `AgreementNumber`, `PoleEmploiId`.
|
||||
- `PhoneNumber`, `PostalAddress`, `ZipCode`.
|
||||
|
||||
`src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
|
||||
## Reading Order (Employee domain deep dive)
|
||||
|
||||
1. `src/Uriae/EmployeeBundle/Entity/Employee.php`
|
||||
2. `src/Uriae/EmployeeBundle/Entity/Contrat.php`
|
||||
3. `src/Uriae/EmployeeBundle/Entity/ParcoursInsertion.php`
|
||||
4. `src/Uriae/UnionBundle/Entity/SituationSortie.php`
|
||||
5. `src/Uriae/EmployeeBundle/Model/SituationSortieUpdater.php`
|
||||
6. `src/Uriae/EmployeeBundle/Model/EmployeeStateUpdater.php`
|
||||
7. `src/Uriae/EmployeeBundle/EventSubscriber/ContratChangeSubscriber.php`
|
||||
8. `src/Uriae/EmployeeBundle/Entity/AdministrativeInformation.php`
|
||||
9. `src/Uriae/EmployeeBundle/Entity/HiringStatus.php`
|
||||
10. `src/Uriae/EmployeeBundle/Entity/PersonnalDetail.php`
|
||||
11. `src/Uriae/EmployeeBundle/Entity/FirstHome.php`
|
||||
12. `src/Uriae/EmployeeBundle/Entity/Pmsmp.php`
|
||||
13. `src/Uriae/EmployeeBundle/Form/Validator/DateEffectiveContratValidator.php`
|
||||
14. `src/Uriae/EmployeeBundle/Form/Validator/CodeRomeValidator.php`
|
||||
15. `src/Uriae/EmployeeBundle/Form/Validator/SocialSecurityNumberValidator.php`
|
||||
16. `src/Uriae/EmployeeBundle/Form/Validator/TemporaryTechnicalNumberValidator.php`
|
||||
17. `src/Uriae/EmployeeBundle/Repository/EmployeeRepository.php`
|
||||
18. `src/Uriae/EmployeeBundle/Repository/ContratRepository.php`
|
||||
19. `src/Uriae/EmployeeBundle/Controller/ContratsController.php`
|
||||
20. `src/Uriae/EmployeeBundle/Controller/InsertionController.php`
|
||||
21. `src/Uriae/AspBundle/Entity/FicheContratAsp.php`
|
||||
22. `src/Uriae/AspBundle/Manager/AspFicheContratManager.php`
|
||||
23. `src/Uriae/SuiviBundle/Entity/Accompagnement.php`
|
||||
24. `src/Uriae/SuiviBundle/Entity/Evaluation.php`
|
||||
25. `src/Uriae/StructureBundle/Entity/Structure.php`
|
||||
|
||||
Reference in New Issue
Block a user