| name | orar-gimnaziu |
| description | Construiește orarul lecțiilor pentru o școală (gimnaziu/liceu) pornind de la fișiere text cu clasele, disciplinele, numărul de ore și profesorii; verifică automat că nu există coliziuni de profesori sau săli și ferestre în orarul claselor; salvează fiecare variantă ca versiune datată; produce planul de suplinire când un profesor lipsește. Exportă în Excel, Word, HTML de tipărit și Markdown. Folosește ACEST skill ori de câte ori apare vorba de „orar", „orarul lecțiilor", „orar școlar", „repartizarea orelor", „încărcătura profesorilor", „coliziuni în orar", „profesor bolnav", „suplinire", „ora dirigintelui", „câte ore are clasa" — chiar dacă utilizatorul nu cere explicit generarea, ci doar o modificare, o verificare sau o comparație între variante. Nu-l folosi pentru orarul personal al unei persoane, pentru calendare de ședințe sau pentru planificarea unui proiect.
|
Orarul lecțiilor pentru gimnaziu
Un orar școlar are trei feluri de cerințe, iar confundarea lor e sursa
majorității greșelilor:
- Reguli tari — încălcarea lor face orarul inutilizabil: un profesor nu poate
fi în două clase deodată, o sală nu poate fi ocupată de două clase, o clasă nu
poate avea o oră liberă în mijlocul zilei, iar numărul de ore din plan trebuie
respectat exact.
- Reguli moi — orarul funcționează și fără ele, dar oamenii îl vor detesta:
ferestre între orele profesorilor, matematică la ultima lecție, cinci discipline
grele într-o zi.
- Preferințe locale — ce știe doar școala: cine vine doar în anumite zile,
ce cabinet e obligatoriu, ce zi e mai ușoară.
Scripturile din scripts/ se ocupă de partea mecanică (căutarea unei soluții,
verificarea, exportul). Rolul tău este să înțelegi corect datele omului, să-i
arăți ce ai înțeles înainte de a genera și să traduci rezultatul în decizii.
Fluxul de lucru
Toate comenzile se rulează din folderul proiectului (unde stau config.yaml,
orar.json, date/, versiuni/). Notează calea o dată:
ORAR=~/.claude/skills/orar-gimnaziu/scripts/orar.py
python3 $ORAR init
python3 $ORAR pregateste date/*.txt
python3 $ORAR diagnostic
python3 $ORAR genereaza
python3 $ORAR verifica
python3 $ORAR exporta --formate md,html,xlsx,docx
python3 $ORAR versiune salveaza --nume "v1" --nota "orar inițial, septembrie"
1. Citirea datelor — pasul unde se pierd cel mai des lucruri
pregateste afișează ce a înțeles din fiecare linie și un rezumat cu orele
pe clasă și pe profesor. Arată-i omului acest rezumat și confruntă-l cu ce știe
el: „V-A are 23 de ore, Ceban Maria are 27 — corespunde?".
Semne că ceva s-a citit greșit, pe care trebuie să le urmărești activ:
✗✗ clasa X: NICIO disciplină citită — formatul liniilor nu a fost recunoscut;
citește references/format-intrare.md și rescrie fișierul, nu ghici.
- o clasă cu vizibil mai puține ore decât surorile ei;
- un profesor cu 40 de ore (probabil două persoane cu același nume prescurtat
diferit) sau cu 2 ore (probabil nume scris în două feluri);
- discipline completate automat din planul-cadru: sunt valori orientative
pentru Rep. Moldova și se schimbă de la an la an — cere confirmarea explicită
a omului înainte de a merge mai departe.
2. Diagnosticul — de ce e mai bun decât un eșec
diagnostic compară orele cerute cu capacitatea reală (zile × lecții,
disponibilitatea fiecărui profesor). Dacă spune „Cazacu Petru: 24 ore de predat,
dar disponibil doar 21", niciun algoritm din lume nu poate rezolva asta —
problema e în date. Rezolvă întâi ce arată diagnosticul; abia apoi generează.
3. Generarea
Rulează în câteva secunde și tipărește un „cost final": suma penalizărilor
pentru regulile moi (0 = ideal). Dacă rezultatul are prea multe avertismente,
mai întâi încearcă --slefuire 40000 --incercari 20 (caută mai mult, tot
automat). Dacă tot nu e bine, problema e în reguli, nu în căutare — vezi
references/reguli.md.
Când generarea eșuează complet, jurnalul spune la ce etapă: „etapa A" înseamnă
că orele nu încap în zile (date prea strânse), „etapa B" înseamnă conflicte
între profesori în aceeași zi. Ambele se atacă prin date, nu prin reîncercări.
4. Verificarea — se face mereu, nu doar când pare nevoie
verifica reia orarul salvat și îl compară de la zero cu cerințele, fără să
folosească nimic din generator. E singurul mod de a prinde și greșelile
generatorului, și modificările făcute manual în orar.json.
- Erorile (✗) înseamnă orar invalid. Nu-l exporta, nu-l afișa, nu-l trimite
omului ca fiind gata. Repară-le întâi.
- Avertismentele (⚠) înseamnă orar valid, dar imperfect. Rezumă-le pentru om
(„4 profesori au câte o fereastră, VII-A are matematica ultima oră marți") și
întreabă dacă merită reglat. Un orar real de gimnaziu are aproape întotdeauna
câteva; obsesia pentru zero avertismente strică lucruri mai importante.
Comanda întoarce cod de ieșire 1 când există erori — util în scripturi.
5. Exportul și versiunile
Fiecare versiune salveaza creează versiuni/AAAA-LL-ZZ-HHMM-nume/ cu orarul,
exporturile, raportul de verificare și o notă cu motivul. Nimic nu se suprascrie.
python3 $ORAR versiune lista
python3 $ORAR versiune compara --nume 2026-09-01-0900-v1
python3 $ORAR versiune restaureaza --nume 2026-09-01-0900-v1
Pune în --nota motivul, nu conținutul („a venit profesor nou de fizică",
nu „orar modificat"). Peste trei luni, nota e singurul lucru care mai explică
de ce există versiunea aceea.
Când un profesor lipsește
python3 $ORAR suplinire --profesor "Popescu Ion" --zile marți,miercuri
Fără --aplica, comanda doar propune: pentru fiecare lecție rămasă
descoperită arată variantele în ordinea în care le-ar cântări un director —
coleg de aceeași disciplină, rearanjare în interiorul zilei, clasa vine mai
târziu sau pleacă mai devreme, supraveghere. Arată-i omului lista și lasă-l să
aleagă; el știe lucruri care nu sunt în fișiere (cine e obosit, cine are
încredere în ce clasă).
Cu --aplica, se ia varianta [0] pentru fiecare lecție și se salvează o
versiune separată de suplinire — orarul de bază rămâne neatins. Pentru alte
alegeri:
python3 $ORAR suplinire --profesor "Popescu Ion" --zile marți --aplica \
--alege 'VII-A|marți|3=1' --alege 'V-B|marți|2=2'
Într-o versiune de suplinire, orele neținute și profesorul care suplinește apar
ca avertismente („de recuperat"), nu ca erori — asta e diferența față de un orar
obișnuit. Coliziunile și ferestrele rămân erori și acolo.
Acceptă și date calendaristice: --zile 2026-09-14,2026-09-15.
Modificări punctuale
python3 $ORAR muta --clasa VII-A --de-la luni:3 --la marți:5
python3 $ORAR profesor --clasa IX-A --obiect "Chimie" --nou "Rotaru Vera"
Ambele rulează verificarea imediat după și raportează ce s-a stricat. Dacă apare
o eroare, spune-i omului exact ce s-a stricat și propune-i fie altă mutare, fie
revenirea la versiunea anterioară — nu lăsa orarul într-o stare invalidă.
Pentru schimbări mari (profesor nou care preia mai multe clase, altă structură a
săptămânii), e mai curat să modifici fișierele din date/ și să regenerezi de
la zero, salvând o versiune nouă.
Cum vorbești despre rezultat
Omul care face orarul nu vrea să vadă cost, seed sau etape. Vrea să știe: e
valid? ce e imperfect? ce trebuie să decidă el? Un răspuns bun sună așa:
Orarul e gata și verificat: nicio coliziune, nicio fereastră la clase, toate
orele din plan acoperite. Trei observații: Ursu Diana are 2 ferestre miercuri
(are doar 8 ore, greu de evitat), VII-A are româna ultima oră de trei ori, iar
VI-A are miercurea 5 discipline grele din 5. Le pot regla dacă vrei, dar
fiecare reglaj mută problema în altă parte. Fișierele sunt în export/.
Fișiere de referință
references/format-intrare.md — toate formatele acceptate pentru fișierele
text (clase, ore, profesori, indisponibilități, grupe, săli). Citește-l când
parserul pierde linii sau când omul întreabă „cum să scriu fișierul?".
references/reguli.md — ce înseamnă fiecare setare din config.yaml, ce
reguli pedagogice se aplică și cum le schimbi pentru școala respectivă.
references/depanare.md — ce faci când generarea eșuează, când avertismentele
nu scad, când datele par corecte dar rezultatul nu.