Planification
{{ dirtyCount }} non publié(s)
Semaine précédente
Semaine suivante
Annuler (Ctrl+Z)
Rétablir (Ctrl+Shift+Z)
Enregistrer la semaine comme modèle…
Appliquer
{{ tm.name }}
Notifier les techs par SMS à la publication
guard(loadWeek)" />
{{ visibleTechs.length }} / {{ techs.length }} techs
Demande — effectif requis par créneau
Coche les jours fériés (F) dans l'en-tête · fin de semaine = sam/dim (auto). Si Durée/job > 0, les nombres = nb de jobs → effectif = ⌈jobs × durée ÷ heures du shift⌉ (compétences requises = colonne Compétences).
| Modèle | Zone | Compétences | Durée/job (h) | Semaine | Fin de sem. | Férié | |
|
|
|
|
|
|
|
|
| Aucune ligne — clique « Ajouter ». |
{{ solverStats.assignments }} assignations · {{ solverStats.shortfall ? (solverStats.shortfall + ' poste(s) non couvert(s)') : 'couverture complète' }} · équité {{ solverStats.spread }} h · {{ solverStats.ms }} ms
{{ selection.length }} cellule(s) — assigner :
{{ t.template_name }}
{{ cellClipboard.length }} copié(s)
Légende :
matin → soir
garde
Ppause
·libre
Jmodifié (non publié)
· glisser = sélection · shift+clic = bloc · clic en-tête = colonne · clic nom = rangée · ctrl+clic = +1 · ctrl+C/V = copier/coller une case
| Technicien |
{{ d.dow }} {{ d.dnum }}
{{ gapByDay[d.iso] }}
Marquer fériéF
{{ tk.h }}
|
|
{{ isPaused(t) ? 'Réactiver' : 'Pause' }}
{{ t.name }}
{{ t.group }}
{{ effLabel(t.efficiency) }}
· {{ hoursOf(t.id) }}h
|
{{ cellInterval(t.id, d.iso) }} · {{ cellOcc(t.id, d.iso).usedH }} h occupé / {{ cellOcc(t.id, d.iso).bookableH }} h offrable ({{ cellOcc(t.id, d.iso).pct }} %)
P
·
|
| Aucun technicien (filtre ?). |
| 👥 Effectif | {{ stat(d.iso).staff || '' }} |
| ⏱ Heures | {{ stat(d.iso).hours || '' }} |
| 🛡️ Garde | {{ stat(d.iso).on_call || '' }} |
| 🎫 Tickets | {{ stat(d.iso).tickets || '' }} |
| 💲 Coût ({{ Math.round(weekCost) }} $/sem) | {{ dayCost(d.iso) || '' }} |
Couverture — dispo vs requis
Aucun besoin défini. Utilise « Demande » → « Appliquer à la semaine ».
| Créneau | {{ d.dow }} {{ d.dnum }} |
| {{ row.label }} | {{ covText(row.key, d.iso) }} |
Types de shift
Congés & disponibilités
| Technicien | Type | Du | Au | Motif | Statut | |
| {{ l.technician_name || l.technician }} | {{ l.availability_type }} | {{ l.from_date }} | {{ l.to_date }} | {{ l.reason }} |
{{ l.status }} |
|
| Aucune demande. |
Nouvelle demande
Une demande approuvée rend le tech indisponible pour le solveur sur ces dates.
Équipe — cadence & coût
Cadence : 1.00 normal · 1.10 = +10 % (plus lent) · 0.90 = −10 % (plus rapide). Coût chargé/h = salaire × (1 + charges %) + autres (véhicule, outils, frais). Le solveur préfère les techs rapides et moins coûteux.
| Technicien | Compétences | Cadence | Salaire/h | Charges % | Autres/h | Coût chargé/h |
| {{ t.name }}{{ t.group }} |
|
|
|
|
|
{{ loadedCost(t) }} $ |
{{ menu.tech && menu.tech.name }} — {{ menu.day && menu.day.dnum }}
{{ cellCode(a) }}
{{ a.shift_name || a.shift }} {{ a.hours }}h
Retirer
Ajouter un shift
{{ code(t) }}{{ t.template_name }}
Libérer tout
Copier cette case
Coller{{ cellClipboard.length ? ' (' + cellClipboard.length + ')' : '' }}
Ajuster l'horaire (glisser)
{{ fmtH(menuRange.min) }}h–{{ fmtH(menuRange.max) }}h