콘텐츠로 이동

환산식 통합 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 불필요 → 추가비용 취소.