membership_requests 스키마 (현장 입사 요청)
근로자(worker)가 특정 현장에 입사(배정)를 요청하는 문서. 회사/현장 관리자가 승인하면 members 문서가 생성되고 사용자 쪽 membership이 함께 갱신됩니다.
저장 위치
request_id: Firestore 자동 생성 ID- 요청은 사용자
users/{uid}/requests문서와 1:1 쌍으로 관리됩니다 (user_notification_id로 연결).
상태 흐름
pending ──(관리자 승인)──► approved → members 생성 + membership 생성
│
├──(관리자 거절)──────► rejected
│
└──(요청자 취소)──────► rejected (approvalUID = 요청자 본인)
| 상태 | 설명 | 영향 |
|---|---|---|
pending |
요청 등록 직후 기본 상태 | 같은 사용자의 site_membership pending 요청은 1개만 허용 |
approved |
관리자 승인 완료 | members/{uid} 생성/복구, users/{uid}/membership/{cid}_{sid} 생성, FCM 승인 알림 |
rejected |
관리자 거절 또는 요청자 취소 | 어떤 문서도 만들지 않음. 거절 시 FCM 거절 알림 |
이 문서는 삭제되지 않고
status필드로만 상태 전환됩니다.
문서 필드
| 필드 | 타입 | 설명 |
|---|---|---|
UID |
string | 요청한 사용자 UID |
status |
string | pending | approved | rejected |
type |
string | 요청 유형. 현재 값은 "new" (최초 입사) |
field |
string | 희망 직종 (요청자가 입력) |
labor_supplier |
string | null | 희망 소속 업체 (선택) |
requester_name |
string | 요청 시점 요청자 이름 (평문 스냅샷) |
requester_phone_masked |
string | 마스킹된 전화번호 (010-****-1234) |
requester_phone_enc |
string | 암호화된 전화번호 |
requester_email_enc |
string | 암호화된 이메일 |
main_address |
string | 주소 (도로명/지번) |
sub_address_enc |
string | 암호화된 상세 주소 |
requester_birth |
timestamp | 생년월일 |
requester_sex |
string | "male" | "female" |
user_notification_id |
string | 사용자 쪽 users/{uid}/requests/{id} 문서 ID (쌍으로 갱신) |
created_at |
timestamp | 요청 생성 시각 (SERVER_TIMESTAMP) |
approved_at |
timestamp | null | 승인/거절/취소 시각 (pending이면 null) |
approvalUID |
string | null | 승인/거절/취소 처리자 UID (pending이면 null, 요청자 취소 시 요청자 본인) |
승인 시 관리자 입력값
승인 엔드포인트(_site_assign_request_approval)는 승인 시점에 아래 값을 다시 받아 members 생성에 반영합니다 (요청 시 저장된 field/labor_supplier와 다를 수 있음).
| 필드 | 설명 |
|---|---|
field |
확정된 직종 (빈 문자열이면 "없음"). companies/{cid}/settings/tags.fields에 있어야 함 |
labor_supplier |
확정된 업체. companies/{cid}/settings/tags.labor_suppliers에 있어야 함 |
wage_rate |
field에 매핑된 단가 (settings/tags.wage_rate[field_index])를 자동 계산 |
승인 시 생성/갱신되는 문서
members/{uid}생성 또는 복구 — members.md 참조- 신규면
database.write(doc_id=UID)로 생성 - 기존 문서(
resign=True상태)가 있으면resign=False로 복구 업데이트 (재입사) - 현재 활동 중(
resign=False)인 기존 문서가 있으면MEMBER_004에러 users/{uid}/membership/{cid}_{sid}생성 — common/_schema/membership.mdrole="worker",company_name,site_name스냅샷 포함users/{uid}/requests/{notification_id}갱신status: "approved"로 업데이트 — common/_schema/requests.md- FCM 알림 전송
- 제목:
[입사] 현장 입사 승인 notification_type: "site_assign_approved"
거절/취소 시 동작
| 경우 | 처리 |
|---|---|
| 관리자 거절 | status="rejected" + approvalUID=관리자UID. 사용자 쪽 requests도 rejected로 갱신. FCM 거절 알림 전송 (notification_type: "site_assign_rejected") |
| 요청자 취소 | status="rejected" + approvalUID=요청자UID. 사용자 쪽 requests도 rejected로 갱신. FCM 알림 없음 |
요청 생성 시 선검사 (REQUEST_003 등)
_site_assign_request 호출 시 아래를 검사하여 거부합니다:
- 현장(
sites/{sid})이 존재해야 함 (SITE_001) - 동일 사용자의
site_membershippending 요청이 이미 있으면 중복 거부 (REQUEST_003) - 다른 회사에 소속된 membership이 있으면 거부 (
MEMBER_009). 같은 회사 내 복수 역할은 허용.
예시 문서 (pending)
{
"UID": "uid_worker",
"status": "pending",
"type": "new",
"field": "철근공",
"labor_supplier": "동양노무",
"requester_name": "홍길동",
"requester_phone_masked": "010-****-1234",
"requester_phone_enc": "base64...",
"requester_email_enc": "base64...",
"main_address": "서울시 강남구",
"sub_address_enc": "base64...",
"requester_birth": "1990-01-15T00:00:00Z",
"requester_sex": "male",
"user_notification_id": "notif_abc123",
"created_at": "2026-04-20T09:00:00Z",
"approved_at": null,
"approvalUID": null
}
예시 문서 (approved)
{
"UID": "uid_worker",
"status": "approved",
"type": "new",
"field": "철근공",
"labor_supplier": "동양노무",
"requester_name": "홍길동",
"requester_phone_masked": "010-****-1234",
"requester_phone_enc": "base64...",
"requester_email_enc": "base64...",
"main_address": "서울시 강남구",
"sub_address_enc": "base64...",
"requester_birth": "1990-01-15T00:00:00Z",
"requester_sex": "male",
"user_notification_id": "notif_abc123",
"created_at": "2026-04-20T09:00:00Z",
"approved_at": "2026-04-20T10:30:00Z",
"approvalUID": "uid_admin"
}
관련 엔드포인트
_site_assign_request(con24/site/HR/worker_assign.py) — 요청 생성_site_assign_request_cancel— 요청자 취소 (status → rejected)_site_assign_request_approval— 관리자 승인/거절 (배열 처리 지원)
관련 스키마
- members.md — 승인 시 생성되는 현장 근로자 문서
- common/_schema/requests.md — 사용자 쪽 요청 미러
- common/_schema/membership.md — 승인 시 생성되는 사용자 멤버십
- change_requests.md — 현장 변경 요청 (입사 후)