Files
SIRH/AGENTS.md
tristan ee16779777
All checks were successful
Auto Tag Develop / tag (push) Successful in 5s
[#322] Page horaire (#4)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|        #322          |        Page horaire         |

## Description de la PR
[#322] Page horaire

## Modification du .env

## Check list

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

Reviewed-on: #4
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-02-20 11:23:52 +00:00

4.0 KiB
Raw Permalink Blame History

AGENTS.md

État des lieux opérationnel du projet SIRH (backend + frontend), à utiliser comme base sur les prochaines interventions.

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

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
  • trackingMode:
    • TIME: suivi par heures
    • PRESENCE: suivi présence demi-journées/journées
  • Enums backend:
    • App\Enum\TrackingMode
    • App\Enum\ContractType (FORFAIT, 35H, 39H, INTERIM, CUSTOM)
  • Contract::getType() est exposé en API (contract:read, employee:read)

Heures / absences

  • Les absences sont découpées en enregistrements journaliers (pas de période unique stockée).
  • Une ligne dheures validée est verrouillée côté métier.
  • Règles de crédit absence (countAsWorkedHours=true) gérées dans WorkedHoursCreditPolicy:
    • contrats présence: crédit en unités de présence
    • contrats temps: crédit en minutes selon règles contrat (35h, 39h, 4h, fallback)

4) Écrans principaux

Page Heures (frontend/pages/hours.vue)

  • Vue Jour + Vue Semaine (semaine réservée admin)
  • Toolbar dédiée: frontend/components/hours/HoursToolbar.vue
  • Vue jour: frontend/components/hours/HoursDayView.vue
  • Vue semaine: frontend/components/hours/HoursWeekView.vue
  • Logique page: frontend/composables/useHoursPage.ts

Points UX déjà en place

  • Toolbar semaine: raccourcis semaine précédente / actuelle / suivante
  • Légende absences affichée dans la toolbar (admin + vue semaine)
  • Cellules semaine avec absence: couleur du type dabsence (plus rouge fixe)
  • Pour user non-admin: restrictions dédition selon validations/absences

5) API / calculs hebdo

  • Provider: src/State/WorkHourWeeklySummaryProvider.php
  • DTOs:
    • src/Dto/WorkHours/WeeklySummaryRow.php
    • src/Dto/WorkHours/WeeklyDaySummary.php
  • Le résumé hebdo renvoie notamment:
    • trackingMode
    • contractName
    • contractType
    • détails journaliers (jour/nuit/total, présence, absence label/couleur)

Heures supp

  • Règles métier:
    • contrats <= 35h: tranche 25% de 35h à 43h, puis 50% au-delà
    • contrats >= 39h: tranche 25% de 39h à 43h, puis 50% au-delà
    • contrats INTERIM: pas de bonus 25/50 ni récup

6) Conventions techniques

  • Favoriser DTO explicites plutôt que tableaux associatifs bruts.
  • Utiliser les interfaces repository dans providers/processors testés.
  • Centraliser les règles métier dans services/providers backend plutôt que dupliquer côté front.
  • Front: éviter les calculs métier lourds; consommer les champs API déjà calculés.

7) Tests et qualité

  • Les TU backend passent actuellement via make test.
  • Le build frontend passe via npm run build.
  • À chaque évolution métier:
    • mettre à jour les tests provider/processor/service impactés
    • maintenir la cohérence des DTO TypeScript (frontend/services/dto/*)

8) Fichiers sensibles (à lire avant modif)

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

9) Décisions de conception actuelles

  • Les absences sont stockées par jour (facilite verrouillage/édition fine).
  • Les règles de calcul (crédits, majorations, récup) sont portées côté backend.
  • Le front reste centré sur laffichage/interaction et réutilise les données enrichies de lAPI.