010 - Booking time: venue wall-clock + availability full range
- Tanggal: 2026-08-09
- Chat/topik: POS tampil 13–15 padahal DB 06–08; member lihat 13–15 free
Ringkasan perubahan
- POS:
start_time/end_timecourt diparse sebagai venue wall-clock (abaikanZ/ jangantoLocal). Attendancechecked_in_at/checked_out_attetap timestamptz +toLocal. - mpc-be: availability menandai seluruh jam
[start, end)untuk booking non-Canceled(termasukCompleted). - Model multi-outlet: jam slot = jam di venue;
branches.timezoneuntuk “sekarang di cabang” (Papua →Asia/Jayapura), bukan untuk menggeser digit jam slot di UI.
Impact bisnis
Kasir tidak lagi melihat jam court digeser zona HP (+7). Availability member selaras dengan rentang booking penuh. Outlet lintas zona (Jakarta/Papua) tetap book “13:00 di tempat itu”.
Epic / User stories
- Epic: Konsistensi waktu booking court lintas POS & member app
- US: Sebagai kasir, saya ingin jam di jadwal sama dengan jam lapangan di DB, agar tidak salah cek overlap dengan booking member.
- US: Sebagai member, saya ingin semua jam dalam booking multi-jam terlihat sold.
User terdampak
Kasir POS, member (Android/iOS/Web via availability API).
Aplikasi terdampak
- mpc-pos: PERLU — parse venue-local
- mpc-be: PERLU — mark full range + api_contract
- mpc-be-pos: TIDAK — response OK
- mpc-android / mpc-ios / mpc-web: TIDAK untuk parse (sudah wall-clock); ikut benar setelah BE
- mpc-admin: TIDAK kode — set
branches.timezonesaat outlet Papua - mpc-owner / ksr-sync: TIDAK
Perubahan schema
Tidak ada.
Perubahan kode
mpc-pos/lib/data/models.dart—parseVenueLocalDateTime;DaySchedule.openTime/closeTime/hourSlotsmpc-pos/lib/screens/schedule_screen.dart— grid jam dari schedule API (bukan hardcoded)mpc-be-pos— schedule responseopen_time/close_timedaribranchesmpc-be/internal/courts/repository.go—markBookedHours; filterdeleted_at IS NULLmpc-be/internal/courts/availability_test.gompc-dev/docs/api/be.md— occupancy rules