members 스키마
현장 근로자(worker) 멤버 문서의 전체 스키마. 각 엔드포인트 문서에서 참조용으로 사용합니다.
저장 위치
member_id는 사용자 UID와 동일하게 저장됩니다 (doc_id = UID).- 한 현장당 한 명의 근로자는 하나의 문서만 가집니다 (재입사 시 기존 문서
resign=False로 복구).
상태 흐름
- 입사 승인 시: 새 문서 생성 또는
resign=False로 복구 - 개별 탈퇴 (
_site_resign) 또는 현장 변경 (_site_change,_site_change_request_approval) 시:resign=True - 현장 완료 (
complete) 시: 전체 멤버 일괄resign=True처리 (reason="site_complete")
이 문서는 삭제되지 않고
resign필드로만 상태 전환됩니다.
문서 필드
| 필드 | 타입 | 설명 |
|---|---|---|
UID |
string | 사용자 UID (doc_id와 동일) |
name |
string | 근로자 이름 (평문) |
phone_enc |
string | 암호화된 전화번호 |
phone_masked |
string | 마스킹된 전화번호 ("010-****-1234") |
email_enc |
string | 암호화된 이메일 |
main_address |
string | 주소 (도로명/지번) |
sub_address_enc |
string | 암호화된 상세 주소 |
birth |
timestamp | 생년월일 |
sex |
string | "male" | "female" |
field |
string | 직종 (settings/tags.fields 중 하나 또는 "없음") |
position |
string | 직책 ("없음" 기본) |
labor_supplier |
string | 소속 업체 (settings/tags.labor_suppliers 중 하나 또는 "없음") |
wage_rate |
number | 일일 단가 (직종에 매핑됨) |
approved_UID |
string | 입사 승인자 UID |
created_at |
timestamp | 입사 승인 시각 |
fcm_token |
string? | FCM 푸시 토큰 (있을 때만 저장) |
resign |
boolean | 퇴사 여부 (기본 false) |
resign_at |
timestamp? | 퇴사 시각 (resign=True일 때) |
resign_UID |
string? | 퇴사 처리자 UID ("system"=자동) |
resign_reason |
string? | 퇴사 사유 ("manual_resign" | "site_change" | "site_complete") |
관련 서브컬렉션 / 인덱스
companies/{cid}/sites/{sid}/search_index/{sid}: 현장 멤버 검색 인덱스 (current_members, resign_members 배열 포함)._update_site_member_index트리거가 자동 갱신.users/{UID}/membership/{cid}_{sid}: 사용자 관점의 멤버십 문서 (role="worker"). 입사 승인/현장 변경/탈퇴 시 동기화됨.
예시 문서 (활동 중)
{
"UID": "uid_worker",
"name": "홍길동",
"phone_enc": "base64...",
"phone_masked": "010-****-1234",
"email_enc": "base64...",
"main_address": "서울시 강남구",
"sub_address_enc": "base64...",
"birth": "1990-01-15T00:00:00Z",
"sex": "male",
"field": "철근공",
"position": "없음",
"labor_supplier": "동양노무",
"wage_rate": 180000,
"approved_UID": "uid_admin",
"created_at": "2026-02-01T09:00:00Z",
"fcm_token": "ey...",
"resign": false
}