시드 구성

시더는 페르소나마다 step01 ~ step10 을 순차 실행합니다. 각 단계는 BaseStep 을 상속하며 execute() / clean() 두 메서드를 구현합니다. 모든 문서에는 공통적으로 _seed_marker: cone-demo-{key} 가 들어가 있어 task clean 으로 안전하게 일괄 삭제됩니다.

단계별 생성 데이터

Step이름생성 컬렉션핵심 산출물
01회원가입 + 회사 생성company, userreseller 회사 1개 + ADMIN 계정
02NHN 계정 등록nhn_accountNHN 파트너 계정 (가짜 credentials)
03고객사(조직) + 계약organization, contract3개 고객사 + 6개월짜리 계약
04프로젝트 등록organization.cloud_accounts고객사별 NHN 프로젝트 5건
05멤버(MANAGER/CLIENT_ADMIN)user2개 추가 사용자
06청구서 + 할인 + partner_usagenhn_invoice, partner_usage, discount_policy월별 invoice + 집계 + 5% 할인 정책
07회사 설정company_settings청구서 템플릿 등
08대시보드 검증(읽기만)invoice 건수 일치 검증
09영업 리포트report매출 리포트 1건
10영업 검증(읽기만)마진/매출 검산 출력

Step 06 상세 — 청구서·partner_usage·할인 정책

요금 조회 화면(/settings/billing)이 정상 작동하도록 한 번에 3종 데이터를 만듭니다. 자세한 코드는 scripts/seed_demo/steps/step06_invoices.py 참조.

nhn_invoice

입력
개월 수페르소나 invoice_count (skybridge=12, nhgov=9, cloudpeak=6)
프로젝트당 invoice5건 (_BASE_COSTS 표 기반)
status 분포최근월 일부 Unissued, 그 다음 Invoiced, 오래된 월 Paid

invoice_id 는 조직 단위로 1개 발급되어 같은 조직의 여러 프로젝트가 동일 invoice_id 를 공유합니다.

partner_usage

월별로 2건씩 생성됩니다 (unique index (company_id, date, status) 충족):

  1. Origin — NHN 원본 데이터 시뮬레이션
  2. API status — 같은 월 invoice 상태들의 우선순위 최상위 (Overdue > Unissued > Invoiced > Paid)
필드
total_service_fee월별 고유 invoice 수 × 30,000원
discount_rate0.05 고정 (전체 월)
customers[]조직별 {organization_id, name, number_of_invoices, service_fee}

discount_policy

페르소나당 1건 (데모 5% 할인, rate=0.05, 활성). 시작/종료월은 invoice 전체 기간을 포괄합니다. 요금 조회 화면의 "할인 적용 내역" 패널이 이 컬렉션을 읽기 때문에 partner_usage 만으로는 패널이 비어 보입니다.

컬렉션 일람

컬렉션생성 단계clean 단계
company0101
user01, 0501, 05
nhn_account0202
organization03 (04 에서 cloud_accounts 갱신)03
contract0303
nhn_invoice0606
partner_usage0606
discount_policy0606
company_settings0707
report0909

SeederContext

각 step 간 공유 상태는 scripts/seed_demo/context.pySeederContext 데이터클래스를 통해 전달됩니다. 페르소나 단위로 새 컨텍스트가 만들어지고 restore_from_db() 로 부분 실행(task steps STEPS=…) 시 이전 단계 데이터를 다시 끌어옵니다.