KO
Back to Projects
Attendance Management System

Attendance Management System

An internal attendance system v1 designed around three decision criteria — boundary separation from a legacy security system, deterministic explicit handlers over signal automation, and idempotency on partial data

Feb 2024 - May 2024 3 months

Tech Stack

PythonDjangoPostgreSQLMSSQLNGINXDockerNCP

Overview

A v1 internal attendance management service built on top of an existing access-control / fingerprint-device security system (which writes raw commute logs into MSSQL). The service models work plans (WorkPlan), actual commute logs (WorkLog), tardy and early-departure aggregates (TardyLog / LeftEarlyLog), and remote work — all on a single domain so attendance data, which previously lived only inside the security system, becomes a usable internal operations tool.

Because the legacy MSSQL is read-only and has to live separately from Django’s PostgreSQL, and because device data isn’t always complete (missing fingerprints, after-midnight departures, half-day leaves), v1 was built around three explicit decision criteria: a one-way boundary API instead of merging both DBs into a single ORM, deterministic explicit handlers instead of signal-based automation, and idempotent updates that don’t break on partial data.

Tech Stack

My Role

One of two backend engineers on a team of PM 1 / FE 1 / BE 2. I owned the heterogeneous-DB integration, the commute-domain model, work-plan generation, tardy / early-departure / remote-work logic, and NCP deployment for the v1 cycle (2024-02 to 2024-05). I did not participate in the later v2 advancement, so this writeup is scoped to the v1 design decisions on origin/main.

Key Contributions

Troubleshooting

Impact

A system where the boundary between the legacy security system and the new domain stays clean while attendance data finally surfaces as an operations tool. The most satisfying part wasn’t any single feature — it was using three decision criteria (“don’t merge the DBs, bridge them with an API,” “automation is fine but it has to be deterministic,” “don’t break on partial data”) consistently across idempotency, time boundaries, and external API failure handling.

View All Projects
Close