Files
SIRH/AGENTS.md
tristan f493ea237b
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
Ajout des notification + page employé (#6)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

Reviewed-on: #6
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-03-10 12:35:17 +00:00

5.1 KiB

AGENTS.md

État des lieux opérationnel du projet SIRH (backend + frontend), mis à jour après les évolutions sur heures/absences/validations.

1) Stack et structure

  • Backend: Symfony + API Platform + Doctrine ORM
  • Frontend: Nuxt 4 + Vue 3 + TypeScript + Tailwind
  • Exécution locale: Docker via makefile

Arborescence clé:

  • src/: domaine, API resources, state providers/processors, services
  • tests/: TU backend (PHPUnit)
  • frontend/: app Nuxt (pages, composants, composables, services)
  • migrations/: migrations Doctrine
  • doc/: documentation fonctionnelle et règles métier de référence

1.1) Référentiel Fonctionnel (obligatoire)

  • Référence principale des règles métier: doc/functional-rules.md
  • Toute intervention doit commencer par une vérification de cohérence avec cette documentation.
  • Règle permanente: à chaque développement qui modifie le fonctionnel, la documentation dans doc/ doit être mise à jour automatiquement dans la même intervention (pas de report).

2) Commandes utiles

  • Démarrer stack: make start
  • Tests backend: make test
  • Build frontend: cd frontend && npm run build
  • Dev frontend: make dev-nuxt

3) Domaine métier (résumé)

Contrats

  • Entité: Contract
  • Champs principaux: name, trackingMode, weeklyHours, isActive, type
  • trackingMode:
    • TIME: suivi en heures
    • PRESENCE: suivi en demi-journées/journées
  • Enums backend:
    • App\Enum\TrackingMode
    • App\Enum\ContractType (FORFAIT, THIRTY_FIVE_HOURS, THIRTY_NINE_HOURS, INTERIM, CUSTOM)
  • Historique de contrat par employé:
    • table employee_contract_periods
    • résolu par App\Service\Contracts\EmployeeContractResolver

Heures / absences

  • Les absences sont stockées en lignes journalières (découpage automatique dans AbsenceWriteProcessor).
  • Les absences countAsWorkedHours=true créditent:
    • minutes (contrats TIME)
    • unités de présence (contrats PRESENCE)
  • Les absences AM/PM effacent les plages horaires concernées.

4) Validations (important)

Validation RH (admin)

  • Champ: work_hours.is_valid
  • Endpoint API Platform standard: PATCH /api/work_hours/{id}
  • Gérée côté front par updateWorkHourValidation.

Validation site (chef de site)

  • Champ: work_hours.is_site_valid
  • Endpoint dédié: PATCH /api/work_hours/{id}/site-validation
  • Processor: src/State/WorkHourSiteValidationProcessor.php
  • Autorisé uniquement aux utilisateurs "Sites" (ni ROLE_ADMIN, ni ROLE_SELF) dans leur scope site.

Règles de verrouillage

  • is_valid=true: ligne verrouillée pour tout le monde (admin inclus pour saisie heures/absence; peut toujours décocher validation RH).
  • is_site_valid=true:
    • non-admin: ligne verrouillée (heures + absences)
    • admin: ligne éditable
  • Toute modification de ligne (heures/présence/absence) remet:
    • is_site_valid=false
    • is_valid=false

5) Page Heures (front)

  • Page: frontend/pages/hours.vue
  • Composable principal: frontend/composables/useHoursPage.ts
  • Composants:
    • frontend/components/hours/HoursToolbar.vue
    • frontend/components/hours/HoursDayView.vue
    • frontend/components/hours/HoursWeekView.vue

Comportement par profil (vue jour)

  • Admin:
    • colonne RH avec checkbox
    • badge Site validé affiché près du site
  • Chef de site:
    • colonne Validation site avec checkbox
    • colonne RH en lecture (Validé/-)
  • Employé:
    • colonne Validation site en lecture
    • colonne RH en lecture

6) Résumé hebdo / calculs

  • Provider: src/State/WorkHourWeeklySummaryProvider.php
  • DTOs:
    • src/Dto/WorkHours/WeeklySummaryRow.php
    • src/Dto/WorkHours/WeeklyDaySummary.php
  • Inclut: contrat résolu par jour, absences, crédits, jour/nuit/total, majorations, récup.

Règles majorations:

  • Contrats <= 35h: +25% de 35h à 43h, +50% au-delà
  • Contrats >= 39h: +25% de 39h à 43h, +50% au-delà
  • INTERIM: pas de 25% / 50% / récup

7) Migrations sensibles

  • migrations/Version20260226183000.php
    • ajoute work_hours.is_site_valid BOOLEAN NOT NULL DEFAULT FALSE
    • non destructive (pas de perte de données)

8) Points de vigilance prod

  • Toujours exécuter migration avant déploiement code backend/front lié.
  • Après déploiement backend, si route manquante côté runtime:
    • php bin/console cache:clear && php bin/console cache:warmup
  • Vérifier présence route:
    • /api/work_hours/{id}/site-validation (PATCH)

9) Conventions techniques

  • Favoriser DTO explicites plutôt que tableaux associatifs.
  • Garder règles métier dans backend (providers/processors/services), front orienté affichage/interaction.
  • Maintenir alignement backend DTO PHP / frontend DTO TS (frontend/services/dto/*).
  • Mettre à jour TU si signature constructor/service change.

10) Fichiers à lire avant modification

  • src/State/WorkHourBulkUpsertProcessor.php
  • src/State/AbsenceWriteProcessor.php
  • src/State/WorkHourSiteValidationProcessor.php
  • src/State/WorkHourWeeklySummaryProvider.php
  • src/Service/WorkHours/WorkedHoursCreditPolicy.php
  • frontend/composables/useHoursPage.ts
  • frontend/components/hours/HoursDayView.vue
  • frontend/components/hours/HoursWeekView.vue