환산식 통합 QA¶
기존 Notion QA 그룹 02 중 환산식 관련 6개 항목을 통합 정리한 문서입니다. 통합 대상: 정시 환산식 / 수시-내신 환산 계산 로직 / 계산로직 설계 문의 / 환산식 구분 설계·체크리스트 / 입시요강↔환산식 데이터 연동 불일치 / 환산식 검수
1. 환산식 핵심 원칙 (확정)¶
환산식 = 성적 기반 정량 계산만¶
| 구분 | 기준 | 처리 위치 |
|---|---|---|
| 수시 | 학생부 교과 성적 | 환산식 엔진 |
| 정시 | 수능 성적 (표준점수/백분위/등급) | 환산식 엔진 |
| 서류/면접/실기 | 정성 평가 | 리포트 영역 (환산식 밖) |
다단계 전형 처리 방침¶
- 환산식 계산에서 다단계 전형(1단계/2단계)은 구분하지 않음
- 1단계가 서류인지 성적인지는 학교마다 달라서 단계 기준 접근은 부적절
- 학교가 제공하는 "학생부 교과 성적 반영방법 / 수능 성적 반영방법" 자체가 환산식이며, 여기에 서류·면접·실기는 원래 포함되어 있지 않음
- 다단계 전형 정보는 입시요강 페이지와 리포트 내 입시요강 카드에서만 표시
2. 현재 상태 및 해결 과제¶
A. 환산식 관리 단위 (군+전형유형+학과)¶
확정 기준: 정시 환산식은 학과 단독 또는 전형 단독이 아니라 군(가/나/다) + 전형유형 + 모집단위(학과) 조합 단위로 선택한다.
예시 — 같은 대학인데 환산식이 다른 경우: - 국민대 / 가군 / 실기전형 / 공간디자인 → 수능60 + 실기40 - 국민대 / 가군 / 실기전형 / 공업디자인 → 수능100 - 국민대 / 나군 / 일반전형 / 시각디자인 → 수능100
현재 구현:
- USC = 계산 엔진 source of truth (유지)
- departmentOverrides 키는 군__전형유형__학과를 최우선으로 해석
- 전형유형은 실기/비실기로만 단순화하지 않고, 농어촌, 사회배려, 특성화고교졸업자 같은 특별전형도 별도 track으로 관리
- 기존 데이터 호환을 위해 군__학과, 학과__실기/비실기, 학과도 dual-read fallback으로 유지
- 전형유형만 공통인 환산식은 군__전형유형__* wildcard 키로 관리 가능
- 배치표/리포트 계산은 cutline의 군, 전형유형, 학과를 함께 사용해 resolved formula를 선택
남은 작업:
- 기존 DB에 남아 있는 군__학과 형태 override를 재시드/검수해 군__전형유형__학과 또는 군__전형유형__*로 전환
- override key 검증 스크립트로 군/전형유형 누락을 정기 점검
- AdmissionCalculation = 전형별 반영비율·수능최저 등 요강/표시 source of truth
- 두 모델 병행 운영, 데이터 안정화 후 재판단
B. 성적 입력값 타입 분기 (표준점수 vs 백분위)¶
문제: 사용자는 표준점수/백분위/등급을 모두 입력 가능하지만, 학교별로 사용하는 지표(STANDARD/PERCENTILE 등)에 따라 계산 시 어떤 값을 쓸지 분기가 필요.
현재 상태:
- subjectMetricMap 필드로 엔진 레벨 분기는 구현 완료
- 모든 대학 데이터에 올바른 metric이 설정되어 있는지 E2E 검증은 미완
- 같은 대학인데 가군은 표준점수, 나군은 백분위인 경우 departmentOverrides에 subjectMetricMap override 필요 → 데이터 정비 미완
해결 방향: - 수능성적표 입력 시 표준점수+백분위 둘 다 입력 → 어드민 매칭 테이블로 자동 변환 - 엔진은 학교별 metric에 따라 올바른 값 선택 (기존 분기 로직 유지) - 전 대학 subjectMetricMap 데이터 정비 + E2E 검증
C. 전처리/후처리 파이프라인 (6단계)¶
현재 엔진 파이프라인: 1. 영어 등급 → 영어 환산점수 변환 2. 탐구 점수 처리 (평균/상위 반영 등) 3. 선택과목 가산점 또는 영역 선택 로직 적용 4. Σ 계산 5. 총점 스케일 적용 6. 한국사 가산점 후처리
QA 체크리스트 10항목 현황:
| # | 항목 | 상태 | 비고 |
|---|---|---|---|
| ① | 수능환산점 vs 최종총점 구분 | ✅ 완료 | suneungMaxScore / selectionRatio 분리 |
| ② | 탐구 반영 방식 | ✅ 완료 | TOP_1/TOP_2_AVG/TOP_2_SUM/SINGLE |
| ③ | 영어 처리 | ✅ 완료 | CONVERTED_SCORE/BONUS + 변환표 |
| ④ | 한국사 처리 | ✅ 완료 | historyPenaltyTable 가산/감산 |
| ⑤ | 반영 과목 제외 | ✅ 완료 | PICK_ONE/BEST_N |
| ⑥ | 총점 스케일 | ✅ 완료 | suneungMaxScore 필드 |
| ⑦ | STANDARD_MAX (정규화형) | ⚠️ 수정 필요 | 하드코딩 → 매칭테이블 동적 조회로 변경 |
| ⑧ | CONVERTED_STANDARD | ✅ 완료 | inquiryConversionTable |
| ⑨ | 반올림 | ⚠️ 검증 필요 | 스키마 규격(ROUND_2)과 엔진(한글 파싱) 미정렬. 중간 단계 반올림 미지원 |
| ⑩ | 원문/설정/코드 일치 | ⚠️ 검수 중 | 대학별 E2E 검증 진행 중 |
D. STANDARD_MAX 하드코딩 제거¶
문제: 과기대 등 정규화형 대학에서 전국 최고 표준점수가 코드에 CSAT_2026_MAX_STANDARD_SCORE로 하드코딩.
해결: 어드민 매칭 테이블(표준점수↔백분위)에서 max(standard_score)를 동적 조회하는 구조로 변경. 이미 운영진이 매년 수능 성적 발표 시 매칭 테이블을 입력하고 있으므로 신규 어드민 UI 불필요, 추가비용 없음.
E. 입시요강 ↔ 환산식 데이터 연동 불일치¶
문제: AdmissionCalculation 모델이 스키마에만 존재하고 코드에서 미사용. 입시요강 표시용 데이터와 환산식 계산 데이터 간 불일치 가능.
해결 방향: - AdmissionCalculation → 입시요강 페이지 + 리포트 내 요강 카드 표시용으로 연결 - USC ↔ AdmissionCalculation 간 불일치 검출 체계 추가
F. 반올림 규격 정렬¶
문제: 스키마에서는 ROUND_2/CEIL_0 형태를 사용하지만, 엔진은 한글 문구("셋째"/"둘째")만 파싱. 과기대처럼 중간 계산에서 소수점 6자리 반올림이 필요한 경우 현재 roundingRule은 최종 단계에만 적용.
해결 방향: - 스키마 규격과 엔진 파싱 로직 통일 (Phase 1에서 처리) - 중간 단계 반올림 지원 추가 → Phase 3에서 영향 범위 파악 후 구현 여부 결정
3. 작업 우선순위¶
Phase 1: 즉시 수정 (추가비용 없음)¶
| # | 작업 | 관련 항목 |
|---|---|---|
| 1 | STANDARD_MAX 하드코딩 → 매칭테이블 동적 조회 | D |
| 2 | 반올림 규격 통일 (스키마↔엔진) | F |
| 3 | 다단계 전형 관련 불필요 코드/계획 정리 | 원칙 |
Phase 2: 데이터 정비 (추가비용 없음)¶
| # | 작업 | 관련 항목 |
|---|---|---|
| 4 | USC override 키에 군(가/나/다) 차원 추가 | A |
| 5 | 전 대학 subjectMetricMap 데이터 정비 + E2E 검증 | B |
| 6 | AdmissionCalculation 실사용 연결 (요강 표시용) | E |
| 7 | USC ↔ AdmissionCalculation 불일치 검출 | E |
Phase 3: 검수 (추가비용 없음)¶
| # | 작업 | 관련 항목 |
|---|---|---|
| 8 | 대학별 환산식 원문/설정/코드 일치 E2E 검증 | C-⑩ |
| 9 | 검수 뷰어에서 파이프라인 단계별 결과 표시 | C |
4. 추가비용 요약¶
| 구분 | 추가비용 |
|---|---|
| 환산식 구분 설계/체크리스트 (기존 확정) | 100,000원 |
| STANDARD_MAX 하드코딩 제거 | 0원 (매칭테이블 활용) |
| 기타 전체 | 0원 (기존 스펙 범위) |
| 합계 | 100,000원 |
환산식 구분 설계(군+전형유형+학과 조합 관리)는 기존에 확정된 추가비용 100,000원 그대로 유지. STANDARD_MAX는 어드민 매칭 테이블이 이미 있으므로 신규 UI 불필요 → 추가비용 취소.