Files
MH-DashBoard-organization/docs/INTEGRATION_DB_PLAN.md

264 lines
4.5 KiB
Markdown

# Integration DB Plan
## Goal
`organization.xlsx`, `MH.xlsx`, `payment.csv`를 하나의 통합 DB로 수용하고,
`조직 현황`, `프로젝트별 분석`, `팀/개인별 분석`, `자리배치도`가 같은 기준 데이터를 바라보도록 정리한다.
## Source Summary
### 1. `organization.xlsx`
용도:
- 인원 기본 정보
- 조직 구조
주요 컬럼:
- `name`
- `tag`
- `rank`
- `pos`
- `co`
- `cell`
- `team`
- `div`
- `gr`
- `part`
- `ph`
- `mail`
해석:
- `tag`는 사번 또는 내부 인원 식별자로 사용
- 조직 정보는 `part > gr > div > team > cell` 구조
### 2. `MH.xlsx`
용도:
- 일자별 인원 근무 실적
- 프로젝트별 투입 시간
- 연장근무 포함 세부 투입 슬롯
주요 컬럼:
- `근무일자`
- `팀 분류`
- `팀`
- `사원번호`
- `이름`
- `직책`
- `user_state`
- `시차시간`
- `메인업무/추가업무1~5/연장근무`
- `프로젝트 코드`
- `프로젝트명`
- `서브 코드`
- `근무시간`
추가 시트:
- `Sheet2`
- 프로젝트 코드와 PM 이름 매핑으로 추정
### 3. `payment.csv`
용도:
- 프로젝트별 수입/지출 전표
주요 컬럼:
- `프로젝트코드`
- `사업명`
- `사업명(표출PJT)`
- `사업명(인트라넷기준)`
- `사업분야`
- `세부분야`
- `부서명`
- `팀명`
- `거래처`
- `적요`
- `차변공급가`
- `대변공급가`
- `지출`
- `수입`
- `구분`
- `프로젝트성격`
## Recommended Model
### Raw Layer
원본을 그대로 적재하는 영역.
- `raw_organization_import`
- `raw_mh_import`
- `raw_payment_import`
원칙:
- 원본 행을 최대한 손대지 않고 저장
- 파일명, 업로드시각, 배치 ID 같이 저장
### Standard Layer
정규화된 운영 테이블.
#### Members
- `members`
- `id`
- `employee_id`
- `name`
- `company`
- `rank`
- `position`
- `phone`
- `email`
- `active`
#### Organization
- `org_units`
- `id`
- `unit_type`
- `name`
- `parent_id`
- `member_org_assignments`
- `id`
- `member_id`
- `part_name`
- `group_name`
- `division_name`
- `team_name`
- `cell_name`
- `effective_from`
- `effective_to`
#### Projects
- `projects`
- `id`
- `project_code`
- `project_name`
- `display_name`
- `intranet_name`
- `domain`
- `subdomain`
- `project_type`
- `project_nature`
- `project_aliases`
- `id`
- `project_id`
- `alias_type`
- `alias_value`
- `project_pm_assignments`
- `id`
- `project_id`
- `member_id`
- `source`
#### Work Logs
- `work_logs`
- `id`
- `member_id`
- `work_date`
- `team_category`
- `team_name`
- `user_state`
- `shift_hours`
- `late_flag`
- `work_log_segments`
- `id`
- `work_log_id`
- `project_id`
- `activity_code`
- `hours`
- `is_overtime`
- `slot_type`
#### Vouchers
- `vouchers`
- `id`
- `company_name`
- `request_date`
- `issue_date`
- `issue_month`
- `account_code`
- `management_account_code`
- `project_id`
- `department_name`
- `team_name`
- `customer_name`
- `summary`
- `debit_amount`
- `credit_amount`
- `expense_amount`
- `income_amount`
- `voucher_type`
- `project_nature`
- `note`
#### Reference
- `member_cost_rates`
- 직급별 표준 인건비
## Matching Rules
### Member Match
우선순위:
1. `MH.xlsx.사원번호`
2. `organization.xlsx.tag`
3. 이름 단독 매칭은 보조 규칙으로만 사용
원칙:
- `employee_id`가 있으면 그 값으로 병합
- 이름만 같은 경우 자동 병합 금지
### Project Match
우선순위:
1. `project_code`
2. `사업명(인트라넷기준)`
3. `사업명(표출PJT)`
4. `프로젝트명`
원칙:
- `project_code`를 정식 키로 사용
- 이름 차이는 `project_aliases`로 흡수
## Migration Strategy
### Phase 1
- `payment.html`, `mh.html`을 현재 대시보드 탭에 편입
- 기존 HTML 기능은 유지
- 파일은 backend route를 통해 iframe으로 연결
### Phase 2
- raw import 테이블 생성
- 원본 3종 import 스크립트 작성
- 파일별 업로드/재적재 배치 ID 관리
### Phase 3
- 표준 테이블 생성
- raw -> standard 정규화 파이프라인 작성
- 멤버/프로젝트 매핑 규칙 적용
### Phase 4
- `payment.html`, `mh.html`의 파일 직접 파싱 로직을 API 기반 조회로 전환
- 프론트는 공통 DB 기준으로만 동작
## Immediate Next Tasks
1. Postgres 스키마 초안 SQL 작성
2. `payment.csv` import 파서 작성
3. `MH.xlsx` import 파서 작성
4. `organization.xlsx` import 파서 작성
5. 멤버/프로젝트 중복 병합 규칙 구현