9.7 KiB
Suivi Bundle Deep Dive
Ubiquitous Language
- Suivi salarié: umbrella follow-up workflow for active/exited employees.
Paths:src/Uriae/SuiviBundle/Controller/SuiviController.php,src/Uriae/SuiviBundle/Resources/translations/messages.fr.yml - Action: abstract intervention (
dateDebut,duree,typeAction,commentaire,structure).
Path:src/Uriae/SuiviBundle/Entity/Action.php - Accompagnement: socio-professional support action with objective/result/encadrants/partenaires.
Path:src/Uriae/SuiviBundle/Entity/Accompagnement.php - Evaluation: employee assessment action with notes and validation lifecycle.
Path:src/Uriae/SuiviBundle/Entity/Evaluation.php - Note: score item per savoir with bounded values.
Path:src/Uriae/SuiviBundle/Entity/Note.php - Savoir taxonomy (
TypeSavoir,CategorieSavoir,Savoir): evaluation referential tree.
Paths:src/Uriae/SuiviBundle/Entity/TypeSavoir.php,src/Uriae/SuiviBundle/Entity/CategorieSavoir.php,src/Uriae/SuiviBundle/Entity/Savoir.php - Action taxonomy (
AxeTypeAction,CategorieTypeAction,TypeAction): insertion action referential tree.
Paths:src/Uriae/SuiviBundle/Entity/AxeTypeAction.php,src/Uriae/SuiviBundle/Entity/CategorieTypeAction.php,src/Uriae/SuiviBundle/Entity/TypeAction.php - FormationInterne + ParticipationFormation: training and attendee participation.
Paths:src/Uriae/SuiviBundle/Entity/FormationInterne.php,src/Uriae/SuiviBundle/Entity/ParticipationFormation.php - Potentiel: employability/motivation/mobility profile.
Path:src/Uriae/SuiviBundle/Entity/Potentiel.php - Problematique: insertion issue lifecycle and resolution.
Path:src/Uriae/SuiviBundle/Entity/Problematique.php - Habilitation: employee certification/authorization with expiry.
Path:src/Uriae/SuiviBundle/Entity/Habilitation.php - RDV and Event: appointment and event timeline entries.
Paths:src/Uriae/SuiviBundle/Entity/Rdv.php,src/Uriae/SuiviBundle/Entity/Event.php
Domain Core
-
Practical root today:
Employee(outside Suivi)- Most Suivi entities attach to
Employeeand are also maintained from Employee-side relations. - Path:
src/Uriae/EmployeeBundle/Entity/Employee.php
- Most Suivi entities attach to
-
Action hierarchy
- Polymorphic root
Actionwith concrete subclasses:AccompagnementEvaluationFormationInterne
- Path:
src/Uriae/SuiviBundle/Entity/Action.php
- Polymorphic root
-
Evaluation subgraph
Evaluation+Notecollection and validation lifecycle.- Paths:
src/Uriae/SuiviBundle/Entity/Evaluation.phpsrc/Uriae/SuiviBundle/Entity/Note.php
-
Formation subgraph
FormationInterne+ participants + costs.- Paths:
src/Uriae/SuiviBundle/Entity/FormationInterne.phpsrc/Uriae/SuiviBundle/Entity/ParticipationFormation.php
-
Potentiel and conformite subgraphs
Potentiel,Problematique,Habilitation.- Paths:
src/Uriae/SuiviBundle/Entity/Potentiel.phpsrc/Uriae/SuiviBundle/Entity/Problematique.phpsrc/Uriae/SuiviBundle/Entity/Habilitation.php
-
Reference models
- Action and savoir taxonomies are mutable references with strong structure-level administration.
- Paths:
src/Uriae/SuiviBundle/Entity/TypeAction.phpsrc/Uriae/SuiviBundle/Entity/CategorieTypeAction.phpsrc/Uriae/SuiviBundle/Entity/AxeTypeAction.phpsrc/Uriae/SuiviBundle/Entity/TypeSavoir.phpsrc/Uriae/SuiviBundle/Entity/CategorieSavoir.phpsrc/Uriae/SuiviBundle/Entity/Savoir.php
Invariants / Concistency
-
src/Uriae/SuiviBundle/Entity/Note.php- Note value must be numeric and in allowed range.
-
src/Uriae/SuiviBundle/Entity/Evaluation.php- New evaluation starts unvalidated.
- Note initialization uses selected categories and default non-evaluated value.
-
src/Uriae/SuiviBundle/Repository/EvaluationRepository.php- Creation flow expects previous evaluations to be validated.
- First/last evaluation selection is based on validated subset.
-
src/Uriae/SuiviBundle/Controller/EvaluationController.php- Blocks new evaluation when prior validations are pending.
-
src/Uriae/SuiviBundle/Model/Bilan/CategoryNode.php- Non-evaluated notes ignored from score computation.
-
src/Uriae/SuiviBundle/Model/Bilan/FamilyNode.php- Category score threshold drives strong/weak point classification.
-
src/Uriae/SuiviBundle/Entity/FormationInterne.php -
src/Uriae/SuiviBundle/Form/Validator/Collection/ArrayLength.php- Formation must have at least one participant.
-
src/Uriae/SuiviBundle/Entity/Action.php -
src/Uriae/SuiviBundle/Entity/ParticipationFormation.php- Duration fields (
heures/minutes) recompute total duration via lifecycle logic.
- Duration fields (
-
src/Uriae/SuiviBundle/Repository/TypeActionRepository.php- Accompagnement-compatible action types are axis-filtered and category-filtered.
-
src/Uriae/SuiviBundle/Form/Type/FormationInterneType.php- Formation action type constrained to specific axis.
-
src/Uriae/SuiviBundle/Entity/TypeAction.phpstructure = nullmeans global type; non-null means structure-owned type.
-
src/Uriae/StructureBundle/Controller/GrilleEvaluationController.php- Prevents deleting a savoir when notes exist.
-
src/Uriae/SuiviBundle/Repository/HabilitationRepository.php- Expiry alerts depend on active habilitation + employee state.
-
src/Uriae/SuiviBundle/Command/DesactivateHabilitationsCommand.php- Batch deactivation for outdated active habilitations.
-
src/Uriae/SuiviBundle/Repository/RdvRepository.php- SMS target list filtered by send flag + next-day date rule.
Cross-context Dependencies
-
Suivi <-> Employee (strong coupling)
- Paths:
src/Uriae/SuiviBundle/Entity/*src/Uriae/EmployeeBundle/Entity/Employee.php
- Direction idea: Suivi depends on Employee identity/reference boundary, not shared rich object graph.
- Paths:
-
Suivi <-> Structure
- Paths:
src/Uriae/SuiviBundle/Entity/Action.phpsrc/Uriae/SuiviBundle/Entity/TypeAction.phpsrc/Uriae/SuiviBundle/Entity/CategorieSavoir.phpsrc/Uriae/StructureBundle/Controller/GrilleEvaluationController.phpsrc/Uriae/StructureBundle/Controller/ReferentielInsertionController.php
- Direction idea: explicit catalog management contract instead of direct structure controllers mutating Suivi references.
- Paths:
-
Suivi -> Union
- Paths:
src/Uriae/SuiviBundle/Entity/FormationInterne.phpsrc/Uriae/SuiviBundle/Entity/Accompagnement.php
- Direction idea: consume Union referentials through explicit read model/ACL.
- Paths:
-
Suivi -> User
- Paths:
src/Uriae/SuiviBundle/Entity/Rdv.phpsrc/Uriae/SuiviBundle/Entity/Event.phpsrc/Uriae/SuiviBundle/Entity/Habilitation.php
- Direction idea: reference user identity and role policy via dedicated boundary service.
- Paths:
DDD Slicing
-
Subcontexts
suivi-actions(Accompagnement,Evaluation,FormationInterne,ParticipationFormation)suivi-potentiel(Potentiel,Problematique, projet/experience profile)suivi-interactions(Rdv,Event)suivi-conformite(Habilitation)suivi-referentiels(taxonomy aggregates)
-
Aggregates (candidate)
EvaluationAggregate(evaluation + notes).FormationInterneAggregate(formation + participations + costs).AccompagnementAggregate.PotentielAggregate.HabilitationAggregate.RdvAggregate.EventAggregate.
-
Domain services (candidate)
EvaluationPolicyService.FormationParticipationService.HabilitationExpiryService.RdvNotificationPolicy.
-
Repository interfaces (domain-facing)
EvaluationRepository,AccompagnementRepository,FormationInterneRepository.HabilitationRepository,RdvRepository,ProblematiqueRepository.TypeActionCatalog,SavoirCatalog.
-
Domain events (candidate)
EvaluationCreated,EvaluationValidated.FormationParticipantAdded,FormationParticipantRemoved.HabilitationExpired,HabilitationDeactivated.RdvPlanned,RdvSmsRequested.
-
Value objects (candidate)
DurationMinutes.NoteValue.Avancement.ResolutionMode.ActionTypeCode.StructureScope.
Reading Order
src/Uriae/EmployeeBundle/Entity/Employee.phpsrc/Uriae/SuiviBundle/Entity/Action.phpsrc/Uriae/SuiviBundle/Entity/Evaluation.phpsrc/Uriae/SuiviBundle/Entity/Note.phpsrc/Uriae/SuiviBundle/Entity/Accompagnement.phpsrc/Uriae/SuiviBundle/Entity/FormationInterne.phpsrc/Uriae/SuiviBundle/Entity/ParticipationFormation.phpsrc/Uriae/SuiviBundle/Entity/Potentiel.phpsrc/Uriae/SuiviBundle/Entity/Problematique.phpsrc/Uriae/SuiviBundle/Entity/Habilitation.phpsrc/Uriae/SuiviBundle/Entity/Rdv.phpsrc/Uriae/SuiviBundle/Entity/Event.phpsrc/Uriae/SuiviBundle/Entity/TypeAction.phpsrc/Uriae/SuiviBundle/Entity/CategorieSavoir.phpsrc/Uriae/SuiviBundle/Entity/TypeSavoir.phpsrc/Uriae/SuiviBundle/Repository/EvaluationRepository.phpsrc/Uriae/SuiviBundle/Repository/FormationInterneRepository.phpsrc/Uriae/SuiviBundle/Repository/TypeActionRepository.phpsrc/Uriae/SuiviBundle/Repository/HabilitationRepository.phpsrc/Uriae/SuiviBundle/Controller/EvaluationController.phpsrc/Uriae/SuiviBundle/Controller/FormationInterneController.phpsrc/Uriae/SuiviBundle/Controller/AccompagnementController.phpsrc/Uriae/SuiviBundle/Model/FormatterBilanIndividuel.phpsrc/Uriae/StructureBundle/Controller/GrilleEvaluationController.phpsrc/Uriae/StructureBundle/Controller/ReferentielInsertionController.phpsrc/Uriae/StructureBundle/Model/DiaryHandler.php