Skip to main content

Attendance Reopening API

Summary

Five direct operations create, list, approve, and reject reasoned reopen requests.

Audience

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

Reference Content

Authentication: Bearer/self context expected for personal requests; approver context expected for pending/decision operations, with exact enforcement requiring confirmation. Tenant: required. Maturity: Direct/Shadow.

OperationMethod and public routeContractStatus and side effectsSafe example
Create reopen requestPOST /attendance/reopen-requestsReopenCreateRequest200 ApiResponse<ReopenRequestDto>; 400 invalid/future; 409 duplicate pending; audit, no attendance event yetBody {"laborId":4242,"date":"2030-01-02","requestedStatus":"Present","requestedWorkHours":7.5,"requestedOvertimeHours":0,"reason":"Fictional correction"}; success 200; duplicate → 409.
My requestsGET /attendance/reopen-requests/myNo parameters/body; self context200 ApiResponse<ReopenRequestDto[]>; read-onlyGET …/my → data:[]; missing required tenant where raised → 400.
Pending requestsGET /attendance/reopen-requests/pendingNo parameters/body200 ApiResponse<ReopenRequestDto[]>; read-onlyGET …/pending → data:[]; framework failure shape unspecified.
Approve reopenPOST /attendance/reopen-requests/{id:int}/approveInteger id; no body200; 400 non-pending; 403 locked period; 404 missing; recalculates/creates approved attendance, audit, reopened eventFictional id → 200 DTO; locked period → 403 envelope.
Reject reopenPOST /attendance/reopen-requests/{id:int}/rejectInteger id; ReopenRejectRequest200; 400 non-pending; 404 missing; audit, attendance unchanged{"rejectionReason":"Fictional request not accepted"} → 200; unknown id → 404.

Request fields are optional laborId, optional attendanceId, date, requestedStatus, requestedWorkHours, requestedOvertimeHours, and reason. Source requires resolved employee, nonblank reason, nonfuture date, and no existing pending request. attendanceId is present in the request type, while workflow resolution uses employee/date as the authoritative lookup. Reject body contains rejectionReason.

The response includes request identity, employee/date, current/requested outcome, reason, workflow state, decision context, timestamps, and optional display fields. Examples intentionally omit personal values. Payroll dependency failure has no distinct public status contract.

Source References

  • microservices/src/attendance-service/Api/AttendanceDirectEndpoints.cs
  • microservices/src/attendance-service/Application/Dtos.cs
  • microservices/src/attendance-service/Application/Services/ReopenRequestWorkflow.cs
  • microservices/src/attendance-service/Application/IPayrollLockClient.cs

See Also

Keywords

  • Attendance API
  • Attendance Reopening API

Revision Information

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