Constraints & Assumptions
Constraints
- The attendance system is independent of payroll; downstream systems pull via the API.
- An employee may be deployed across multiple organizations and multiple units.
- Multiple shifts per day are allowed for a single employee but must not overlap in time.
- Geo-fencing and device binding are per-unit configurable, not global.
- All approval chains follow:
Employee → ShiftManager → HR → SuperAdmin (override).
- The system stores raw punches forever; derived attendance rows are idempotently recomputable from punches + rules + roster.
Assumptions
- Employees carry a smartphone capable of running Flutter (Android 8+, iOS 13+).
- Unit sites have at least intermittent mobile data. The Flutter app buffers punches locally when offline.
- Each org unit has exactly one timezone (stored on the unit).
- The calendar month is the atomic reporting and locking unit.
- Holidays are configured at the organization level; unit overrides are allowed.
- The Telegram bot runs on a single token provided by the client organization.