Skip to main content

Attendance Submission and Approval API

Summary

Four direct operations save attendance, list pending review, approve, and reject. Saving updates the one daily result rather than providing complete CRUD.

Audience

Frontend/backend developers, QA and support engineers, and implementation partners.

Reference Content

Authentication: Bearer context expected. Self scope is confirmed for non-approving save; approver capability is derived from approved role/permission context. Exact enforcement for decision endpoints requires confirmation. Tenant: required for commands. Maturity: Direct/Shadow.

OperationMethod and public routeContractResponsesBehavior, side effects, and safe example
Save or submit attendancePOST /attendanceBody AttendanceSaveRequest[]200 ApiResponse<int>; 400 validationNormalizes each row; non-approver is forced to self context; authorized save may approve; audits and produces submitted/approved event. Example [{"laborId":4242,"date":"2030-01-02","status":"Present","workHours":7.5}] → data:1; invalid employee/status/weekly off → 400.
Pending reviewGET /attendance/pendingOptional start, end200 ApiResponse<PendingAttendanceDto[]>Returns unapproved non-cleared rows; no side effect. Example date filter → data:[]; binding error → framework 400.
Approve attendancePOST /attendance/{id:int}/approveInteger id; no body200 ApiResponse<AttendanceDto>; 404 missing; 400 handled validationRecalculates canonical values, marks approved, audits, produces approved event. Example fictional id → 200 fictional DTO; unknown id → 404.
Reject attendancePOST /attendance/{id:int}/rejectInteger id; RejectRequest200 ApiResponse<AttendanceDto>; 404 missingClears attendance outcome, retains rejection note, audits, produces rejected event. Example {"message":"Fictional correction required"} → 200; unknown id → 404.

AttendanceSaveRequest fields: id, laborId, date, status, workHours, overtimeHours, deductionHours, lateMinutes, paidUnits, optional payrollNote, optional isApproved. Application validation requires at least one row, employee, and status; available profiles enforce active state and joining date; manual weekly-off entry is rejected. Values are canonicalized by calculator behavior rather than accepted blindly. RejectRequest contains message.

Ordinary approval/rejection has no confirmed Payroll-lock check. Dedicated bulk approval is not implemented; array save is multi-row submission, not a separate approval operation.

Source References

  • microservices/src/attendance-service/Api/AttendanceDirectEndpoints.cs
  • microservices/src/attendance-service/Application/Dtos.cs
  • microservices/src/attendance-service/Application/Services/AttendanceCommands.cs
  • microservices/src/attendance-service/Domain/Attendance/AttendanceRecord.cs

See Also

Keywords

  • Attendance API
  • Attendance Submission and Approval API

Revision Information

  • Status: Draft
  • Last reviewed: 2026-07-15
  • Review cycle: Quarterly