Lewati ke isi

DEC-006/007 — Attendance V1 Manual Matrix

Mode: Server /home/scola/odoo
Approval: APPROVED_BY_REQUESTING_USER_CONVERSATION (2026-08-29)
Scope: Bounded Core V1 manual attendance — per-lesson + daily gate + pickup registry + lobby queue (W05-C)
Out of V1: Student RFID/face/geofence (SC-ATTEND+ / V2); employee attendance (SC-ATTEND+/SC-PEOPLE); parent self-check-in lobby

DEC-001 extension (attendance boundary)

Domain V1 status Package
Per-lesson sheet save/read Core V1 (W05-A) SC-CORE
Daily arrival/departure manual Core V1 (W05-B) SC-CORE
Pickup persons registry Core V1 SC-CORE
Pickup lobby queue + waiting TV Core V1 (W05-C) SC-CORE
Student RFID / face / geofence V2 optional SC-ATTEND+
Employee HR attendance Optional SC-ATTEND+ / SC-PEOPLE
Pickup officer mobile transport Core V1 operator role SC-CORE (pickup_officer)

Company runtime gate: departure enabled for daily/lobby; lobby additionally requires student_attendance_pickup_lobby_enabled.

W05-C contract: W05-C-pickup-lobby-contract.md


DEC-006 — Actors and transitions

Actors

Actor Daily check-in/out Bulk checkout Cancel/adjust Pickup registry Lobby queue Read
teacher / homeroom yes (today) yes (kebijakan cepat) today only no yes (today) roster
school_admin / head_admin / admin_staff yes yes any date yes yes roster
principal / VP no no no no no via leadership read routes
student / parent no no no no no portal daily read
pickup_officer no no no execute dropoff no transport tasks
public TV no no no no board read-only waiting names+rombel

Capability: mutation requires students.attendance.update; read requires students.attendance.view.

Daily transitions (attendance_scope=arrival_departure)

Action From To Actor Audit
check-in no line / no check-in check_in_time set, present operator line upsert
check-out check-in present check_out_time set operator line upsert
bulk checkout selected checked-in shared check_out_time operator bulk-save API
cancel departure check-out set check-out cleared operator + reason ≥3 cancel log
cancel arrival check-in set check-in cleared (cascade departure if needed) operator + reason ≥3 cancel log
adjust times check-in/out set corrected timestamps admin or today teacher cancel log action=adjust

Past-date cancel: admin/staff only (cancel_past_denied for teachers).

Notification (STAB-029)

  • Check-in/out success: existing notify_parent_arrival_departure when company notify flags enabled.
  • Cancel: notify_parent API param optional, default false; when true, sends cancel_checkin / cancel_checkout portal notice with idempotency key.
  • No UI checkbox in V1; integrators may pass notify_parent: true.

DEC-007 — State glossary

Daily line states (derived)

UI label (id) Condition present late absent excused
Belum datang no check_in false false false false
Hadir check_in, not late true false false false
Terlambat check_in + late true true false false
Sudah pulang check_out set true per check-in false false
Dibatalkan remark cancel false false false false

Per-lesson statuses (W05-A): Hadir, Izin, Alpa, Telat, Sakit/Dispensasi — canonical mapping via attendanceStatus.js; daily scope uses time fields not sheet state machine.

Terminology (STAB-040)

Concept Canonical menu label
Per-lesson Presensi Mapel
Daily gate Kedatangan & Kepulangan
Hub Hub Kehadiran Siswa
Pickup registry Penjemput Siswa
Pickup lobby Antrian Lobby Penjemput
Waiting TV Layar Ruang Tunggu

Irreversibility

  • Cancel/adjust requires reason (≥3 chars) and writes immutable log snapshot.
  • Adjust does not delete history; cancel log retains before snapshot.

Certification denominator

Pickup-officer decision (0c)

pickup_officer role remains Core V1 for manual transport execution (/pickup/attendance); not SC-ATTEND+. Lobby TV is separate from transport dropoff.