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

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 Employee and are also maintained from Employee-side relations.
    • Path: src/Uriae/EmployeeBundle/Entity/Employee.php
  • Action hierarchy

    • Polymorphic root Action with concrete subclasses:
      • Accompagnement
      • Evaluation
      • FormationInterne
    • Path: src/Uriae/SuiviBundle/Entity/Action.php
  • Evaluation subgraph

    • Evaluation + Note collection and validation lifecycle.
    • Paths:
      • src/Uriae/SuiviBundle/Entity/Evaluation.php
      • src/Uriae/SuiviBundle/Entity/Note.php
  • Formation subgraph

    • FormationInterne + participants + costs.
    • Paths:
      • src/Uriae/SuiviBundle/Entity/FormationInterne.php
      • src/Uriae/SuiviBundle/Entity/ParticipationFormation.php
  • Potentiel and conformite subgraphs

    • Potentiel, Problematique, Habilitation.
    • Paths:
      • src/Uriae/SuiviBundle/Entity/Potentiel.php
      • src/Uriae/SuiviBundle/Entity/Problematique.php
      • src/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.php
      • src/Uriae/SuiviBundle/Entity/CategorieTypeAction.php
      • src/Uriae/SuiviBundle/Entity/AxeTypeAction.php
      • src/Uriae/SuiviBundle/Entity/TypeSavoir.php
      • src/Uriae/SuiviBundle/Entity/CategorieSavoir.php
      • src/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.
  • 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.php

    • structure = null means 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.
  • Suivi <-> Structure

    • Paths:
      • src/Uriae/SuiviBundle/Entity/Action.php
      • src/Uriae/SuiviBundle/Entity/TypeAction.php
      • src/Uriae/SuiviBundle/Entity/CategorieSavoir.php
      • src/Uriae/StructureBundle/Controller/GrilleEvaluationController.php
      • src/Uriae/StructureBundle/Controller/ReferentielInsertionController.php
    • Direction idea: explicit catalog management contract instead of direct structure controllers mutating Suivi references.
  • Suivi -> Union

    • Paths:
      • src/Uriae/SuiviBundle/Entity/FormationInterne.php
      • src/Uriae/SuiviBundle/Entity/Accompagnement.php
    • Direction idea: consume Union referentials through explicit read model/ACL.
  • Suivi -> User

    • Paths:
      • src/Uriae/SuiviBundle/Entity/Rdv.php
      • src/Uriae/SuiviBundle/Entity/Event.php
      • src/Uriae/SuiviBundle/Entity/Habilitation.php
    • Direction idea: reference user identity and role policy via dedicated boundary service.

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

  1. src/Uriae/EmployeeBundle/Entity/Employee.php
  2. src/Uriae/SuiviBundle/Entity/Action.php
  3. src/Uriae/SuiviBundle/Entity/Evaluation.php
  4. src/Uriae/SuiviBundle/Entity/Note.php
  5. src/Uriae/SuiviBundle/Entity/Accompagnement.php
  6. src/Uriae/SuiviBundle/Entity/FormationInterne.php
  7. src/Uriae/SuiviBundle/Entity/ParticipationFormation.php
  8. src/Uriae/SuiviBundle/Entity/Potentiel.php
  9. src/Uriae/SuiviBundle/Entity/Problematique.php
  10. src/Uriae/SuiviBundle/Entity/Habilitation.php
  11. src/Uriae/SuiviBundle/Entity/Rdv.php
  12. src/Uriae/SuiviBundle/Entity/Event.php
  13. src/Uriae/SuiviBundle/Entity/TypeAction.php
  14. src/Uriae/SuiviBundle/Entity/CategorieSavoir.php
  15. src/Uriae/SuiviBundle/Entity/TypeSavoir.php
  16. src/Uriae/SuiviBundle/Repository/EvaluationRepository.php
  17. src/Uriae/SuiviBundle/Repository/FormationInterneRepository.php
  18. src/Uriae/SuiviBundle/Repository/TypeActionRepository.php
  19. src/Uriae/SuiviBundle/Repository/HabilitationRepository.php
  20. src/Uriae/SuiviBundle/Controller/EvaluationController.php
  21. src/Uriae/SuiviBundle/Controller/FormationInterneController.php
  22. src/Uriae/SuiviBundle/Controller/AccompagnementController.php
  23. src/Uriae/SuiviBundle/Model/FormatterBilanIndividuel.php
  24. src/Uriae/StructureBundle/Controller/GrilleEvaluationController.php
  25. src/Uriae/StructureBundle/Controller/ReferentielInsertionController.php
  26. src/Uriae/StructureBundle/Model/DiaryHandler.php