콘텐츠로 이동

equipment_attendance_logs 스키마 (장비 출퇴근 로그)

현장 장비(equipment)의 출퇴근 기록. 근로자 attendance_logs와 동일한 페어링 구조 (한 문서에 check_in + check_out을 묶어 저장) 를 사용하되, 장비 식별 정보(equipment_id, equipment_number, equipment_name 등)가 추가됩니다.

저장 위치

companies/{company_id}/sites/{site_id}/equipment_attendance_logs/{log_id}
  • log_id: Firestore 자동 생성 ID
  • 체크인 시점에 문서가 생성되고, 체크아웃 승인 시 같은 문서가 업데이트됩니다 (새 문서를 만들지 않음).
  • 장비 자체의 식별자는 equipment_id, 장비를 운전/사용하는 사용자는 UID입니다.

상태 흐름

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

문서 필드

공통 필드

필드 타입 설명
UID string 장비 운전자/소유자 UID (장비 문서의 UID 필드 복사)
name string 장비 표시명 (당시 스냅샷, equipment_data["name"])
company_id string 회사 ID
site_id string 현장 ID
equipment_id string 장비 문서 ID (sites/{sid}/equipments/{eid})
check_in_at timestamp 출근 시각 (요청의 check_at 또는 created_at이 복사됨)
check_out_at timestamp | null 퇴근 시각 (미완결이면 null)
link bool 출·퇴근 페어 완성 여부
check_in_approval_UID string | null 출근 승인자 UID
check_in_approval_at timestamp | null 출근 승인 시각
check_out_approval_UID string | null 퇴근 승인자 UID
check_out_approval_at timestamp | null 퇴근 승인 시각
man_days float 공수 (기본 0)

요청 승인 경로(_equipment_check_in_request_approval)에서만 저장되는 필드

출근 요청에서 스냅샷된 장비 정보가 함께 보존됩니다.

필드 타입 설명
equipment_type string 장비 종류 (예: "굴착기", "덤프트럭")
equipment_number string 장비 번호(차량번호/관리번호)
equipment_name string 장비 세부명

관리자 직접 추가 경로(_add_equipment_attendance_log)에서 추가로 저장되는 필드

필드 타입 설명
created_at timestamp 로그 생성 시각 (서버 타임스탬프)
created_by string 로그를 추가한 관리자 UID
memo string 메모

이 경로에서는 equipment_type / equipment_number / equipment_name이 저장되지 않습니다 (코드 상 스냅샷 안 함). 화면에 표시할 때는 equipments/{eid} 원본을 함께 조회해야 합니다.

관련 컬렉션

  • 승인 전 요청: equipment_attendance_requests.md (status=pending)
  • 장비 마스터: companies/{cid}/sites/{sid}/equipments/{eid}UID, equipment_type, equipment_number, equipment_name 원본 보관
  • 근로자 출퇴근: attendance_logs.md — 동일 패턴의 근로자 버전
  • 삭제 로그: companies/{cid}/delete_logs — 로그 삭제 시 type="equipment_attendance_log"로 기록

생성/수정 경로

  • _equipment_check_in_request_approval → 새 문서 생성 (link=False)
  • _equipment_check_out_request_approval → 기존 link=False 문서 업데이트 (link=True)
  • _equipment_admin_check_out → 관리자가 퇴근만 강제 처리 (request 단계 스킵)
  • _add_equipment_attendance_log → 관리자가 직접 로그 추가 (출/퇴근 동시 입력, link=True 고정)
  • _delete_equipment_attendance_log → 문서 삭제 + delete_logs에 감사 이력 기록

예시 문서

미완결 (출근만, 요청 승인 경로)

{
  "UID": "uid_driver",
  "name": "이기사",
  "company_id": "company_abc",
  "site_id": "site_001",
  "equipment_id": "eq_001",
  "equipment_type": "굴착기",
  "equipment_number": "경기99가1234",
  "equipment_name": "22톤 굴착기",
  "check_in_at": "2026-04-23T08:00:00Z",
  "check_out_at": null,
  "link": false,
  "check_in_approval_UID": "uid_admin",
  "check_in_approval_at": "2026-04-23T08:05:00Z",
  "check_out_approval_UID": null,
  "check_out_approval_at": null,
  "man_days": 0
}

페어 완결 (출/퇴근 모두, 요청 승인 경로)

{
  "UID": "uid_driver",
  "name": "이기사",
  "company_id": "company_abc",
  "site_id": "site_001",
  "equipment_id": "eq_001",
  "equipment_type": "굴착기",
  "equipment_number": "경기99가1234",
  "equipment_name": "22톤 굴착기",
  "check_in_at": "2026-04-23T08:00:00Z",
  "check_out_at": "2026-04-23T17:30:00Z",
  "link": true,
  "check_in_approval_UID": "uid_admin",
  "check_in_approval_at": "2026-04-23T08:05:00Z",
  "check_out_approval_UID": "uid_admin",
  "check_out_approval_at": "2026-04-23T17:35:00Z",
  "man_days": 1.0
}

관리자 직접 추가 (출/퇴근 동시 입력)

{
  "UID": "uid_driver",
  "name": "이기사",
  "company_id": "company_abc",
  "site_id": "site_001",
  "equipment_id": "eq_001",
  "check_in_at": "2026-04-22T08:00:00Z",
  "check_out_at": "2026-04-22T17:30:00Z",
  "link": true,
  "check_in_approval_UID": "uid_admin",
  "check_in_approval_at": "2026-04-22T08:05:00Z",
  "check_out_approval_UID": "uid_admin",
  "check_out_approval_at": "2026-04-22T17:35:00Z",
  "created_at": "2026-04-23T09:00:00Z",
  "created_by": "uid_admin",
  "memo": "요청 누락분 보완 등록",
  "man_days": 0
}