# 2026-04-18 현재 구현 상태 정리

이 문서는 2026-04-18 기준으로 Tornado3 2026 Election 프로젝트에 실제 반영된 구현 사항과 운영 기준을 한 번에 확인하기 위한 현행화 문서다.

## 1. 화면 구성

- 메인 네비게이션은 아래 페이지를 제공한다.
  - `통합 스케줄`
  - `노멀`
  - `좌상단`
  - `하단`
  - `비디오월`
  - `사전데이터`
  - `데이터`
  - `컷리스트`
  - `설정`
  - `로그`
- `사전데이터` 페이지는 저장형 역대 데이터 조회/수정/저장 전용 화면이다.
- `컷리스트` 페이지는 전체 컷 목록, 채널 필터, 컷 시간, 썸네일 현황을 관리하는 운영 화면이다.

## 2. 데이터 화면

- 데이터 화면에서 원본 JSON 형태로 보여주던 `데이터 시트`는 제거했다.
- 현재 데이터 화면에는 아래 두 시트만 남겨두었다.
  - `개표율 시트`
  - `후보 시트`
- `데이터 - 선거구명` 콤보박스 첫 항목에 `전체보기`를 추가했다.
- `전체보기` 선택 시, 현재 수신 가능한 지역 데이터를 작은 카드 형태로 한 번에 볼 수 있도록 바꿨다.
  - 표시 형식: `지역명 - 개표율`
  - 목적: 전체 데이터 수신 상태를 빠르게 확인하기 위한 개요 화면
- 데이터 탭에는 `선거구명`, `지역 코드` 외에 `시도명`, `송출 선거구명`, `StatusText`를 함께 표시한다.

## 3. SBS API 실연동 범위

- 현재 실연동 대상 선거 종류는 아래와 같다.
  - `광역단체장`
  - `교육감`
  - `기초단체장`
- `광역단체장`
  - 개표: 지원
  - 사전 투표율: 지원
- `교육감`
  - 개표: 지원
  - 사전 투표율: SBS API 미지원
- `기초단체장`
  - 개표: 지원
  - 사전 투표율: SBS API 미지원
- `교육감`, `기초단체장`의 사전 방송 데이터는 저장형 사전 데이터(JSON)로 보완한다.

## 4. 저장형 사전데이터

- 저장형 사전데이터는 `Tornado3_2026Election/Assets/Data/pre_election_history.json`에 보관한다.
- 2026-04-18 기준 저장 건수는 아래와 같다.
  - `광역단체장`: 전국 17개 시도
  - `교육감`: 전국 17개 시도
  - `기초단체장`: 전국 262개 선거구
- 커버리지 요약:
  - `광역단체장` 당선자: 1995~2022
  - `광역단체장` 투표율: 2002~2022
  - `교육감`: 직선제 기준 2010~2022
  - `기초단체장`: 공식 API 기준 2002~2022
- `사전데이터` 페이지에서 아래 기능을 제공한다.
  - 선거 종류별 레코드 선택
  - 지역별 역대 투표율 카드 보기
  - 지역별 역대 당선자 카드 보기
  - 엑셀형 편집 그리드에서 직접 수정
  - `사전데이터 저장` 버튼으로 JSON 반영
- `사전_역대당선자`, `사전_역대당선자_교육감`, `사전_역대당선자_기초단체장` 편집 행에는 `ColorParty` 콤보박스가 있다.
  - 표기 정당명은 그대로 두고
  - 송출용 색상 포맷 정당만 별도로 지정할 수 있다.
  - 예: 표기 `한나라당`, 색상 포맷 `국민의힘`
- 사전데이터 편집 화면에서는 개별 항목의 `SourceUrl`을 노출하지 않는다.

## 5. 사전 컷 연동 규칙

- `사전_역대당선자*` 계열은 `사전`과 `개표` 양쪽 단계에서 모두 사용할 수 있다.
- `사전_역대투표율*` 계열은 `사전` 단계 전용이다.
- 사전 컷 송출 시에는 저장형 사전데이터의 `TurnoutHistory`, `WinnerHistory`를 사용한다.
- 역사 정당명은 색상 포맷 선택과 별개로 아래 별칭을 함께 처리한다.
  - `민주자유당`, `신한국당`, `한나라당`, `새누리당`, `자유한국당` -> `국민의힘`
  - `민주당`, `새천년민주당`, `열린우리당`, `새정치민주연합` -> `더불어민주당`
  - `무소속` -> `무기타`, `무소속기타`

## 6. 후보/개표 데이터 처리 규칙

- 후보가 나오는 데이터는 개표 데이터 기준으로 처리한다.
- 개표 데이터에는 반드시 `개표율`도 함께 표시되도록 맞췄다.
- 개표율 텍스트는 아래 형식으로 송출한다.
  - 예: `개표 98.7%`
- 수동 판정값이 있으면 수동 판정을 우선 적용하고, 없으면 API 판정값을 사용한다.
- SBS API 판정 코드는 아래 기준으로 반영한다.
  - `40`: 유력
  - `50`: 확정
  - `60`: 개표중 당선
  - `80`: 무투표 당선
  - `90`: 개표마감 당선

## 7. 직함 표기 규칙

- `광역단체장`, `교육감`, `기초단체장`은 전 컷 공통으로 지역명 대신 직함 기준 표기를 사용한다.
- 적용 대상은 컷 종류를 가리지 않고 executive 계열 전체다.
- 예시:
  - `서울특별시` -> `서울시장`
  - `전라남도` -> `전라남도지사`
  - `부산광역시` -> `부산광역시교육감`
  - `경상남도 창원시` -> `창원시장`
- 송출 시 `선거구명`, `시도명`, `RegionName`, `ElectionDistrictName`, `DistrictName` 계열 값에 같은 규칙을 적용한다.

## 8. 유확당 변수 처리 규칙

`유확당` 계열 변수는 전 컷 공통으로 아래 순서로 처리한다.

1. 해당 컷에 존재하는 `유확당*` 변수를 먼저 모두 `visible=false`로 숨긴다.
2. 실제 판정 이미지가 필요한 후보에게만 `SetValue(...)`를 넣는다.
3. 값이 들어간 변수만 다시 `visible=true`로 켠다.

적용 범위:

- `1-2위`
- `1-3위`
- `당선`
- `모든후보`
- `접전`
- `초접전`
- `이시각1위`

## 9. RGB / 정당 색상 매핑

- 정당 색상은 RGB txt 기준으로 매핑한다.
- RGB txt에 `style > ... > color` 지시가 있으면 이미지 교체보다 `SetStyleColor(...)`를 우선 사용한다.
- style color 지시가 없는 항목만 기존 asset 기반 `SetValue(...)` 경로를 사용한다.
- `사전_역대당선자*` 계열도 `ColorParty` 또는 정당 별칭을 기준으로 동일한 색상 자산 해석을 사용한다.
- 상세 매핑은 `RGB_SPEC_CUT_MAPPING.md`를 기준으로 관리한다.

## 10. 컷 카탈로그 / 실제 디자인 매칭

- 컷 목록은 폴더 스캔이 아니라 `FormatCatalogService`의 하드코딩 카탈로그 기준으로 관리한다.
- 2026-04-18 기준 현재 카탈로그는 실제 `.tscn` 파일 기준으로 정리되어 있다.
  - `Elect2026_Bottom_민방`: 15컷
  - `Elect2026_Normal_민방`: 63컷
  - `Elect2026_Top_민방`: 11컷
  - 총 89컷
- 실제 `.tscn` 파일이 없는 오래된 별칭(`_L`, `_END`, `_7680` 등)은 현재 카탈로그에서 제거했다.
- 다만 기존 저장 상태/큐 복원을 위해 예전 `FormatId`는 내부 별칭 맵으로 현재 실제 컷 이름에 자동 연결한다.
- 2026-04-18 전수 감사 기준:
  - 카탈로그 등록 컷 중 실제 씬 누락 `0건`

## 11. 썸네일 운영

- 썸네일 저장 위치는 `Assets/Thumbnail/<template.Id>.png` 규칙을 사용한다.
- 콤보박스에서 컷을 선택하면 해당 썸네일을 즉시 프리뷰에 표시한다.
- 로딩 우선순위:
  1. 프로젝트 내부 `Assets/Thumbnail`
  2. 번들된 앱 내부 `Assets/Thumbnail`
  3. 기본 앱 아이콘
- `컷리스트` 페이지에서는 전체 컷 썸네일 보유 현황과 채널별 컷 목록을 함께 확인할 수 있다.
- `썸네일 생성` 기능은 Karisma에 씬을 로드한 뒤 320x180 PNG를 저장한다.

## 12. 설정 저장 및 복원

- 설정은 변경 즉시 자동 저장한다.
- 자동 저장 대상에는 아래 항목들이 포함된다.
  - API 자동 갱신 ON/OFF
  - API 갱신 주기
  - 데이터 관련 주요 선택 상태
  - 채널별 큐 상태
  - 컷별 재생 시간
  - 방송사 지역 필터
- 저장된 큐에 예전 컷 ID가 들어 있어도 복원 시 현재 canonical 컷으로 자동 정규화한다.

## 13. 검증 상태

- `dotnet build .\Tornado3_2026Election\Tornado3_2026Election.csproj` 통과
- 2026-04-18 컷 감사 결과 `MISSING_SCENES=0`
- 현재 남아 있는 빌드 경고는 아래와 같다.
  - `WindowsBase` 참조 충돌 경고
  - MSIX 인증서 경고
  - `MockTornado3Adapter.ConnectionChanged` 미사용 경고

## 14. 참고 문서

- `SYSTEM_SPEC.md`
- `INTEGRATION_NOTES_2026-04-15.md`
- `RGB_SPEC_CUT_MAPPING.md`
- `TSCN_VARIABLE_DISCOVERY_ELECT2026_NORMAL.md`
- `LIVE_VALIDATE_1-2위_ani_광역단체장.md`
- `LIVE_VALIDATE_1-2위_ani_광역단체장_labels.md`
- `LIVE_VALIDATE_1-2위_ani_광역단체장_style.md`
- `LIVE_VALIDATE_1-2위_ani_광역단체장_judgement_visibility.md`
