콘텐츠로 이동

equipments 스키마 (현장 장비)

현장에 배정된 장비 본문 문서. companies/{cid}/members가 아닌 장비 단위 문서이며, 장비 소유자 혹은 임대 장비 정보가 저장됩니다. 장비대(재무) 페이지에서 사용하는 월별 가동 공수(attendance)와 임대 계약(contracts) 서브컬렉션은 finance/equipment_cost.md에서 별도 관리합니다. 본 문서는 equipments/{equipment_id} 본문 필드만 다룹니다.

저장 위치

companies/{company_id}/sites/{site_id}/equipments/{equipment_id}
  • equipment_idusers/{UID}/equipments의 장비 문서 ID를 그대로 사용합니다 (사용자 측 장비 문서와 ID 공유).
  • 하위 컬렉션:
  • contracts/{contract_id} — 임대 계약 (finance/equipment_cost.md 참조)
  • attendance/{YYYYMM} — 월별 가동 공수 (finance/equipment_cost.md 참조)

상태 흐름

(요청) equipment_assign_requests (pending)
  → equipment_assign_request_approval(approved)
     → equipments 문서 생성/갱신 (resign=false)
  → 장비대 페이지에서 edit_equipment_info / edit_equipment_lessor_info 로 필드 업데이트
  → equipment_resign / equipment_site_change 로 resign=true 처리 (문서 삭제 X)

생성/업데이트 엔드포인트 요약

엔드포인트 동작 주요 필드
equipment_assign_request_approval (승인) 문서 최초 생성 또는 resign 해제 후 재생성 소유자 신상 + 장비 정보 스냅샷
equipment_site_change_request_approval / equipment_site_change (도착 현장) 현장 이동 시 도착 현장 문서 생성/갱신 출발 현장 문서 필드 그대로 복사 + resign=false
edit_equipment_info 장비 정보 수정 equipment_name, equipment_number, equipment_type
edit_equipment_lessor_info 임대인 정보 저장 lessor_company_name, lessor_registration_number, main_address, sub_address_enc, phone_enc
equipment_resign 해제 처리 resign=true, resign_at, resign_UID, resign_reason="manual_resign"
equipment_site_change (출발 현장) 이동 시 출발 현장 해제 처리 resign=true, resign_reason="site_change"

문서 필드

소유자/운전자 정보 (배정 시점 스냅샷)

필드 타입 설명
UID string 장비 소유자(운전자) UID
name string 소유자 이름 (스냅샷)
phone_enc string 소유자 전화번호 AES 암호화
phone_masked string "010-****-XXXX" 형식의 마스킹 번호
email_enc string 소유자 이메일 AES 암호화
main_address string 주소 (평문)
sub_address_enc string 상세주소 AES 암호화
birth timestamp 생년월일
sex string "male" | "female"

장비 정보

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

배정/해제 메타

필드 타입 설명
assigned_by string 배정한 관리자 UID
assigned_at timestamp 배정 시각
resign bool 해제 여부 (true면 이 현장에서 해제됨, 문서는 삭제되지 않음)
resign_at timestamp? 해제 시각
resign_UID string? 해제 처리자 UID
resign_reason string? 해제 사유 — "manual_resign" (수동 해제) 또는 "site_change" (현장 이동)

임대 장비 추가 필드 (edit_equipment_lessor_info 호출 시)

필드 타입 설명
lessor_company_name string? 임대인 회사명
lessor_registration_number string? 임대인 사업자등록번호

주의: 임대인 정보 저장 시 main_address, sub_address_enc, phone_enc소유자 정보에서 임대인 정보로 덮어쓰기됩니다. 직영/임대 구분 플래그는 없고, lessor_company_name / lessor_registration_number의 존재 여부와 contracts 서브컬렉션 유무로 임대 장비를 판별합니다.

장비대(재무) 하위 컬렉션

  • contracts/{contract_id} — 임대 계약 단위 문서 (start_date, end_date, amount, tax 등)
  • attendance/{YYYYMM} — 월별 가동 공수 (man_days[31], attendance_id map)

두 서브컬렉션의 스키마와 업데이트 로직은 finance/_schema/equipment_cost.md에서 관리하므로 중복 기재하지 않습니다.

데이터 동기화 주의사항

  • users/{UID}/equipments의 장비 정보가 바뀌어도 현장 equipments 문서는 자동 동기화되지 않습니다 (배정 시점 스냅샷).
  • 현장 변경(equipment_site_change) 시 출발 현장 문서는 resign=true로 유지되고 도착 현장에 동일 equipment_id로 새 문서가 생성됩니다. 두 문서가 공존할 수 있습니다.
  • 검색 인덱스(companies/{cid}/search_index/{site_id})는 equipments 문서 변경 시 트리거(update_site_equipment_index)로 자동 갱신됩니다.

예시 문서

직영 장비

{
  "UID": "uid_driver_1",
  "name": "김장비",
  "phone_enc": "AES(...)",
  "phone_masked": "010-****-1234",
  "email_enc": "AES(...)",
  "main_address": "서울특별시 구로구",
  "sub_address_enc": "AES(...)",
  "birth": "1978-06-10T00:00:00Z",
  "sex": "male",
  "equipment_type": "굴착기",
  "equipment_name": "06W",
  "equipment_number": "서울12가3456",
  "resign": false,
  "assigned_by": "uid_admin",
  "assigned_at": "2026-01-05T09:00:00Z"
}

임대 장비 (edit_equipment_lessor_info 호출 후)

{
  "UID": "uid_driver_1",
  "name": "김장비",
  "phone_enc": "AES(임대인_전화번호)",
  "phone_masked": "010-****-1234",
  "email_enc": "AES(...)",
  "main_address": "경기도 안산시",
  "sub_address_enc": "AES(임대인_상세주소)",
  "birth": "1978-06-10T00:00:00Z",
  "sex": "male",
  "equipment_type": "굴착기",
  "equipment_name": "06W",
  "equipment_number": "서울12가3456",
  "resign": false,
  "assigned_by": "uid_admin",
  "assigned_at": "2026-01-05T09:00:00Z",
  "lessor_company_name": "대한중기",
  "lessor_registration_number": "123-45-67890"
}

해제된 장비 (현장 이동으로 해제된 경우)

{
  "UID": "uid_driver_1",
  "equipment_type": "굴착기",
  "equipment_name": "06W",
  "equipment_number": "서울12가3456",
  "resign": true,
  "resign_at": "2026-02-15T10:00:00Z",
  "resign_UID": "uid_admin",
  "resign_reason": "site_change",
  "assigned_by": "uid_admin",
  "assigned_at": "2026-01-05T09:00:00Z"
}