콘텐츠로 이동

companies/{company_id}/settings 스키마

회사 레벨의 설정 문서 모음. 각 doc_id가 별도의 설정 범주를 나타냅니다. 회사 생성(_company_registration) 시 tags, site_tags, drive_usage, ai_credit 4개 문서가 자동 생성됩니다.

저장 위치

companies/{company_id}/settings/{doc_id}

문서 목록

doc_id 설명 생성 시점
tags 회사 공통 태그 (직급/직종/일당/인력공급처/수수료) 회사 생성 시 자동
site_tags 현장 태그 (site_state.py에서 관리) 회사 생성 시 자동
drive_usage 드라이브 사용량/한도 회사 생성 시 자동
ai_credit AI 크레딧 잔액 회사 생성 시 자동, 미존재 시 AI 호출 시 기본값으로 자동 생성
company_attendance 회사 출근 설정 (attendence.py에서 조회) 참조만, 생성 로직은 현재 코드에 없음

tags

직급/직종/일당/인력공급처/수수료를 한 문서에 통합 저장. _set_positions, _set_fields, _set_custom에서 부분 업데이트됨.

필드

필드 타입 설명
positions string[] 직급 목록 (예: ["대표", "부장", "과장", ...])
fields string[] 직종/분야 목록 (예: ["사무관리", "안전관리자", ...])
wage_rate number[] 일당 목록 (fields와 동일 길이, 인덱스 대응)
labor_suppliers string[] 인력 공급처 목록 (예: ["직영", "한빛인력", ...])
commission object[] 인력공급처별 수수료 (labor_suppliers와 동일 길이, 인덱스 대응)

commission 서브오브젝트

{ "type": "amount", "value": 20000 }
필드 타입 설명
type string "amount" (정액) | "percent" (정률, 0~1 사이의 비율)
value number

초기값 (회사 생성 시)

{
  "positions": ["대표", "부장", "과장", "대리", "주임", "사원"],
  "fields": ["사무관리", "안전관리자", "유도원", "비계공", "도장공"],
  "wage_rate": [140000, 120000, 130000, 140000, 150000],
  "labor_suppliers": ["직영", "한빛인력", "가야인력"],
  "commission": [
    { "type": "amount", "value": 0 },
    { "type": "amount", "value": 20000 },
    { "type": "percent", "value": 0.1 }
  ]
}

사용 방식

  • _change_company_member_data에서 fieldwage_rate 계산 시 인덱스 매칭
  • fields/positions에 없는 값이 들어오면 SETTING_002 / SETTING_003 에러
  • field=None이면 "없음"으로 저장, wage_rate=0

site_tags

회사가 관리하는 현장들의 태그 목록(일종의 라벨). 현장 등록 시 필터/분류용.

필드

필드 타입 설명
site_tags string[] 현장 태그 목록

초기값

{ "site_tags": ["서울현장", "수원현장"] }

관리 위치

con24/site/site_state.py_set_site_tags에서 업데이트됨 (현장 모듈 소속).


drive_usage

파일 드라이브의 용량 사용량을 회사/현장 단위로 추적. tools/cloudflare.py에서 업로드/삭제 시 firestore.Increment로 원자적 갱신.

필드

필드 타입 설명
total_bytes number 회사 전체 사용 바이트
trash_bytes number 휴지통 용량
limit_bytes number 회사 전체 용량 한도 (기본 10GB = 10737418240)
sites map 현장별 사용량 맵 (sites.{site_id}.total_bytes, sites.{site_id}.trash_bytes)

초기값

{
  "total_bytes": 0,
  "trash_bytes": 0,
  "limit_bytes": 10737418240,
  "sites": {}
}

구조 예시

{
  "total_bytes": 1048576,
  "trash_bytes": 10240,
  "limit_bytes": 10737418240,
  "sites": {
    "site_1": { "total_bytes": 524288, "trash_bytes": 0 },
    "site_2": { "total_bytes": 524288, "trash_bytes": 10240 }
  }
}

회사 단위 업로드는 site_id="__company__" 키로 기록됩니다.


ai_credit

AI 기능 호출 크레딧 잔액. ai/credit.py에서 관리.

필드

필드 타입 설명
balance number 잔여 크레딧

초기값

{ "balance": 100000 }

크레딧 비용 (AI_CREDIT_COSTS)

feature 비용
material_document_extraction 3000
generate_risk_assessment 800
generate_task_risk_assessment 800
ai_text_processing 500

동작

  • check_ai_credit(company_id, feature): 잔액이 비용 미만이면 CREDIT_001 에러. 문서 미존재 시 DEFAULT_CREDIT=100000으로 자동 생성.
  • deduct_ai_credit(company_id, feature): firestore.Increment(-cost)로 차감.

company_attendance

회사 출근 설정. attendence.py_company_check_in_request에서 조회만 수행되고, 현재 코드 경로에서 명시적 생성/초기값 로직은 확인되지 않음 (참조 전용).

attendance_setting = database.get_by_id(f"companies/{cid}/settings", "company_attendance")