콘텐츠로 이동

attendance_logs 스키마 (근로자 출퇴근 로그)

현장 근로자(worker)의 출퇴근 기록. 한 문서에 check_in + check_out을 묶어 저장하는 페어링 구조입니다.

저장 위치

companies/{company_id}/sites/{site_id}/attendance_logs/{log_id}
  • log_id: Firestore 자동 생성 ID
  • 체크인 시점에 문서가 생성되고, 체크아웃 승인 시 같은 문서가 업데이트됩니다 (새 문서를 만들지 않음).

상태 흐름

[승인된 check_in]  link=False, check_out_at=null        ← 출근만 기록됨
        ↓ check_out 승인
[페어 완성]        link=True,  check_out_at=<시각>      ← 출퇴근 한 쌍 완성
        ↓ 관리자가 직접 수정/추가 가능 (admin_check_out, add_site_attendance_log)
  • link=False: 아직 퇴근 처리가 안 된 로그 (미완결)
  • link=True: 출·퇴근 모두 처리된 완결 로그

현장 상태가 complete가 되면 link=False인 로그는 자동 정리됩니다.

문서 필드

필드 타입 설명
UID string 근로자 UID
name string 근로자 이름 (당시 스냅샷)
company_id string 회사 ID
site_id string 현장 ID
task_id string? 배정된 작업 ID (없을 수 있음)
position string 직급 (당시 스냅샷)
field string 공종 (당시 스냅샷)
labor_supplier string 인력 공급처 (당시 스냅샷)
check_in_at timestamp 출근 시각
check_out_at timestamp | null 퇴근 시각 (미완결이면 null)
link bool 출·퇴근 페어 완성 여부
check_in_approval_UID string 출근 승인자 UID
check_in_approval_at timestamp 출근 승인 시각
check_out_approval_UID string | null 퇴근 승인자 UID
check_out_approval_at timestamp | null 퇴근 승인 시각
man_days float 공수 (기본 0, 관리자 수정 가능 — update_man_days)

관련 컬렉션

생성/수정 경로

  • site_check_in_request_approval → 새 문서 생성 (link=False)
  • site_check_out_request_approval → 기존 link=False 문서 업데이트 (link=True)
  • site_admin_check_out → 관리자가 퇴근만 강제 처리 (request 단계 스킵)
  • add_site_attendance_log → 관리자가 직접 로그 추가 (출/퇴근 동시 입력 가능)
  • edit_site_attendance_tasktask_id 재배정
  • site_update_man_daysman_days 수정
  • delete_site_attendance_log → 문서 삭제

예시 문서

미완결 (출근만)

{
  "UID": "uid_worker",
  "name": "홍길동",
  "company_id": "company_abc",
  "site_id": "site_001",
  "task_id": "task_20260420",
  "position": "작업반장",
  "field": "철근",
  "labor_supplier": "대한인력",
  "check_in_at": "2026-04-20T08:00:00Z",
  "check_out_at": null,
  "link": false,
  "check_in_approval_UID": "uid_admin",
  "check_in_approval_at": "2026-04-20T08:05:00Z",
  "check_out_approval_UID": null,
  "check_out_approval_at": null,
  "man_days": 0
}

페어 완결 (출/퇴근 모두)

{
  "UID": "uid_worker",
  "name": "홍길동",
  "company_id": "company_abc",
  "site_id": "site_001",
  "task_id": "task_20260420",
  "position": "작업반장",
  "field": "철근",
  "labor_supplier": "대한인력",
  "check_in_at": "2026-04-20T08:00:00Z",
  "check_out_at": "2026-04-20T17:30:00Z",
  "link": true,
  "check_in_approval_UID": "uid_admin",
  "check_in_approval_at": "2026-04-20T08:05:00Z",
  "check_out_approval_UID": "uid_admin",
  "check_out_approval_at": "2026-04-20T17:35:00Z",
  "man_days": 1.0
}