Employee Attendance & Self-Service Platform
An internal platform for Lotería de Córdoba employees, centered on attendance and vacation requests. I designed and built both systems and their integration, from signed QR check-ins to leave approvals, balance rules, and historical recalculation.
Company project · Confidential
Developed at Lotería de Córdoba. Source code, screenshots, and recordings cannot be shared due to confidentiality.
The Platform and My Role
Autogestión is an internal employee platform at Lotería de Córdoba. Employees use it to record attendance and manage HR requests, while managers and HR administrators review requests and maintain the rules that apply to each employee.
I conceived, designed, and implemented the attendance and vacation systems end to end, across the frontend and backend. My work covered secure attendance capture, employee schedules and historical records, vacation eligibility and approvals, and the calculations that keep attendance and leave balances consistent.
Recording and Interpreting Attendance
Employees record attendance by scanning short-lived, digitally signed QR codes through the authenticated web application. A React Native app generates the codes on registered tablets after operator-approved pairing. Tablets can continue generating codes during connectivity interruptions; employees need a connection to submit their attendance records.
The backend checks the signature, expiry, and device status, and identifies the location from trusted device configuration. Device enrollment uses separate permissions and credentials from everyday operation. Authorized web generators are also supported, with codes signed by the backend.
The system then interprets each record against the employee's expected work. Dated schedule assignments, weekly templates, temporary changes, holidays, and individual exceptions determine the applicable obligation. The rules handle overnight shifts, late arrivals, duplicate scans, corrected departures, missing exits, and work outside the planned schedule.
Vacation Requests and Approval
Vacation requests were previously handled through email and manual HR checks. HR had to establish how many days an employee was owed and whether the request met the applicable rules. I automated those checks and the approval workflow.
Employees receive an annual allowance based on their length of service. Each allocation period has its own balance and validity dates. HR administrators can extend a period, allowing an older balance to remain available alongside a newer one. The employee selects an eligible period, and the system checks its effective validity and available balance.
The requested dates consume only days the employee was scheduled to work, excluding holidays. A four-day workweek therefore uses that employee's actual schedule. Argentine holidays are imported automatically from the government's official website.
The company organization chart identifies the employee's immediate manager and routes the request for approval or rejection. Administrators can extend allocation periods and edit vacation leave records through their respective permissions.
Connecting Vacation with Daily Attendance
Approval connects the vacation workflow directly to attendance: the approved dates become justified leave, so an employee taking vacation is not marked absent. The same schedules and holiday calendar determine both the expected attendance and which dates consume vacation balance.
I designed a central fact collector and attendance calculator to give these workflows a consistent interpretation of each day. The collector loads attendance records, schedules, leave justifications, and the employee context applicable to the date. Rules resolve the work obligation and assign each record to the correct work date, including overnight shifts.
The calculator produces daily attendance status, lateness, worked minutes, and scheduled or unscheduled activity, then a dedicated writer stores the result. Reporting and historical recalculation use the same pipeline. Given the same facts, policy, timezone, and evaluation time, it produces the same attendance result.
Historical Facts and Retroactive Corrections
Correcting a past date requires knowing the employee's circumstances at that time. I implemented historical tracking of facts such as department, length of service, and work schedule, including immutable schedule revisions. Administrators can correct past schedules or add omitted holidays and recalculate the affected employee dates.
One real case involved adding a holiday that had been missed on a past date. Recalculation cleared absence statuses for employees who had correctly stayed home and returned a day of vacation balance to employees who were on vacation. The correction affected both systems because a holiday changes the work obligation and the days chargeable as vacation.
Corrections retain the actor, reason, and operation history. Historical coverage checks block reconstruction when required evidence is missing, keeping the calculation grounded in recorded facts.
Recoverable Recalculation
Small corrections recalculate attendance within the transaction that changes the facts. Larger changes save durable work and begin background processing after that transaction commits.
Processing uses bounded batches, coordination per employee, leases, retries, and progress tracking. Unfinished operations resume on startup, while periodic checks identify recent dates that need repair or were omitted. This supports corrections that affect many employees without losing the work if processing is interrupted.
Other Employee Services
I also fully developed the HR news, payslip acknowledgment, and internal messaging modules, including their frontend and backend. HR can target announcements by department or branch, with updates available in the news tab or home-screen notification bell. Employees can review payslips and record their agreement.
Internal messaging (Gmail-like) lets employees compose messages with a subject and body and find colleagues by name or unique employee number (legajo). It includes profile photos, sent messages, favorites, archive, and a trash folder whose messages are deleted after 30 days.
Messaging and Notification Integrations
I implemented the platform's integrations with two shared backend services that I also developed. They support the internal mailbox and notification delivery; each has its own project description.