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_departurewhen company notify flags enabled. - Cancel:
notify_parentAPI param optional, default false; when true, sendscancel_checkin/cancel_checkoutportal 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¶
- W05-A: 16/16 per-lesson (existing PASS)
- W05-B: RT-W05-DAILY-POS/STA/REC/UIA-01 (07-release-test-matrix.md §6.1b)
- W05-C: RT-W05-LOBBY-POS/STA/REC/UIA-01 (W05-C-pickup-lobby-contract.md)
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.