# 003_subsidiaries

## 목적
연결재무제표 주석에서 관계기업/종속기업 투자 정보를 추출하고,
시계열 변화(지분율, 장부금액, 기업 추가/제거)를 추적할 수 있는지 연구한다.

## 핵심 발견

### XBRL 패딩 문제 해결

2024+ DART의 "XBRL 인라인" 포맷은 사실 **빈 셀 패딩** 문제였다.
- `| 기초 | 11,767,444 | 10,893,869 |  |  |  |...` (의미있는 셀 3개 + 빈 셀 수백 개)
- `split('|')` 후 빈 후행 셀만 제거하면 정상 3~10셀 테이블로 복원됨
- 기존의 `len(cells) > 20` 거대행 스킵 → `while cells and not cells[-1]: cells.pop()` 으로 해결

### XBRL 거대 첫 행 (2025)

2025년 데이터의 첫 행은 전체 섹션 내용이 하나의 플랫 텍스트로 들어있는 거대행(200~4800셀).
- `len(cells) > 30` 조건으로 헤더 감지에서 제외
- 나머지 행은 빈 셀 패딩 제거 후 정상 테이블

### 2024 XBRL 횡전개 (v2.2 해결)

2024년 일부 기업은 기업명이 **열 헤더**로, 항목이 **행**으로 들어가는 전치(transpose) 형태.
- 기업명 행: `| | 삼척블루파워 | ㈜에스엔엔씨 | 춘천에너지 | ...`
- 항목 행: `기초 | 352,500 | 182,414 | 9,513 | ...`
- `extractTransposedProfiles()`, `extractTransposedMovements()`로 해결
- `_isTransposedNameCell()`: 재무 항목명/긴 설명문 필터링으로 false positive 방지

### 연도별 포맷 정리

| 연도 | 포맷 | 특징 | 파싱 |
|------|------|------|------|
| **2025** | XBRL 패딩 + 거대 첫 행 | 첫 행=전체 내용 플랫텍스트(수백셀), 나머지=정상 테이블 | ✓ |
| **2024** | XBRL 횡전개 (일부 기업) | 기업명이 열 헤더, 항목이 행 (전치 테이블) | ✓ (v2.2) |
| **2024** | 일반 테이블 (일부 기업) | 카카오/LG전자/LG에너지 등 | ✓ |
| **2023↓** | 클린 마크다운 | 기존 테이블 구조 유지 | ✓ |

## 파서 v2.2 결과 (9개 기업)

### 투자현황 (프로필)

| 기업 | 2025 | 2024 | 2023 | 비고 |
|------|------|------|------|------|
| 삼성전자 | 6 ✓ | 2 △ | 6 ✓ | 2024: 횡전개 파싱 (2개는 잡음) |
| SK하이닉스 | 40 ✓ | 9 ✓ | 31 ✓ | 2024: 횡전개 9개 (지분율+소재지) |
| 현대차 | 88 ✓ | 0 | - | 2024 프로필은 일반 테이블 형태이나 미지원 |
| LG전자 | 0 | 0 | - | 투자현황 테이블 없음 |
| 네이버 | 593 ✓ | 238 ✓ | - | 2024: 횡전개 238개 (지분율+장부+소재지) |
| 카카오 | 121 ✓ | 105 ✓ | 105 ✓ | 전연도 정확 |
| POSCO홀딩스 | 0 | 63 ✓ | - | 2024: 횡전개 63개 (지분율+장부) |
| 삼성SDI | 47 ✓ | 14 ✓ | - | 2024: 횡전개 14개 |
| LG에너지솔루션 | 0 | 0 | 0 | 투자현황 테이블 없음 |

### 변동내역

| 기업 | 2025 | 2024 | 2023 | 비고 |
|------|------|------|------|------|
| 삼성전자 | 12 ✓ | 14 ✓ | 12 ✓ | 2024: 횡전개 파싱 (당기+전기 7기업) |
| SK하이닉스 | 33 ✓ | 9 ✓ | 26 ✓ | 2024: 횡전개 9개 |
| 현대차 | 139 ✓ | 42 ✓ | - | 2024: 횡전개 42개 (BHAF, WAE, BHMC 등) |
| LG전자 | 107 ✓ | 109 ✓ | - | 일반 테이블 |
| 네이버 | 469 ✓ | 250 ✓ | - | 2024: 횡전개 250개 (당기+전기) |
| 카카오 | 193 ✓ | 146 ✓ | 177 ✓ | 전연도 정확 |
| POSCO홀딩스 | 55 ✓ | 81 ✓ | - | 2024: 횡전개 81개 (당기+전기×35기업) |
| 삼성SDI | 14 ✓ | 19 ✓ | - | 일반 테이블 |
| LG에너지솔루션 | 19 ✓ | 18 ✓ | 16 ✓ | 일반 테이블 |

### v2.2에서 해결된 문제

1. **2024 XBRL 횡전개 파싱**: `_findTransposedBlocks()` → `extractTransposedProfiles()` / `extractTransposedMovements()`
   - 기업명 행 감지: 셀 수 ≥ 8, 첫 셀 비어있음, `_isTransposedNameCell` ≥ 3개
   - 항목 행 수집: 기업명 행 다음 연속 행, 첫 셀이 항목키워드
   - 블록 타입 판별: "기초"+"기말" 있으면 movement, 지분율/장부금액 있으면 profile
2. **false positive 방지**: `_isTransposedNameCell()` — 재무 항목명/긴 설명문 필터
3. **현대차 2024 횡전개**: `지분법적용 투자지분, 기초` 등 복합 키워드 매핑 추가
4. **POSCO홀딩스 2024**: 프로필(63개) + 변동(81개) 횡전개 파싱

### v2.1에서 해결된 문제

1. **현대차/네이버 열 매핑**: 서브헤더 병합 + `취득(처분)`, `배당금`, `기초금액/기말금액` 등 누락 키워드 추가
2. **거대행 필터**: `len(cells) > 30`인 XBRL 패딩 첫 행이 헤더로 잘못 감지되던 문제 해결
3. **잡음 행 제거**: `_META_NAMES`와 `_MOVEMENT_ITEM_KEYWORDS`로 변동 항목명이 기업명으로 파싱되던 문제 해결
4. **삼성전자 3열 변동표**: 기업별 변동내역과 분리
5. **LG에너지솔루션 offset**: 헤더에 이름열이 없고 데이터에 이름열이 있는 패턴 자동 감지

### 남은 문제

1. **삼성전자 2024 프로필**: 횡전개에서 "측정 전체" 2개 잡음 포함 (minor)
2. **현대차 2024 프로필**: 일반 테이블이지만 헤더 구조 미지원 (0개)
3. **일부 기업 기말=?**: 당기 중 처분/전환된 기업은 기말이 `-`/None인 것이 정상

## 파일 목록

| 파일 | 설명 | 상태 |
|------|------|------|
| 001_explore.py | 주석 내 관련 섹션 구조 탐색 (삼성전자) | 완료 |
| 002_parseExplore.py | 관계기업/종속기업 파싱 실험 | 완료 |
| 003_multiCompany.py | 9개 기업 포맷/파싱 가능성 탐색 | 완료 |
| 004_affiliateParse.py | 삼성전자 포맷 기준 파싱 (빈 셀 제거) | 완료 |
| 005_debugHeaders.py | 기업별 헤더 패턴 디버깅 | 완료 |
| 006_universalParse.py | 범용 파서 v1 | 완료 |
| **007_v2Parse.py** | **범용 파서 v2.2 — 현재 최신** | 완료 |
| 008_debugHyundai.py | 현대차 변동내역 디버깅 | 완료 |
| 009_debugNaver.py | 네이버 변동내역 디버깅 | 완료 |
| 010_debugMerge.py | 서브헤더 병합 디버깅 | 완료 |
| 011_debugLG.py | LG에너지솔루션 offset 디버깅 | 완료 |
| 012_debug2024.py | 2024 XBRL 횡전개 포맷 탐색 | 완료 |
| 013_debug2024detail.py | 2024 횡전개 상세 분석 | 완료 |
| 014_debugTranspose.py | 횡전개 파서 블록 디버깅 | 완료 |
| output/v2_parse.txt | v2.2 파싱 결과 (9기업×3년) | - |
| output/debug_2024.txt | 2024 포맷 디버깅 결과 | - |
| output/debug_2024_detail.txt | 2024 횡전개 상세 | - |
| output/debug_transpose.txt | 횡전개 블록 디버깅 | - |

## 현황
- 2026-03-06: 실험 시작 — 주석 내 관계기업/종속기업 섹션 구조 탐색
- 2026-03-06: XBRL "거대행" 문제 해결 — 빈 셀 패딩 제거로 파싱 가능
- 2026-03-06: 기업별 헤더 구조 차이 확인 — 범용 파서 v2 구현
- 2026-03-06: 9개 기업 검증 — 2025/2023 대부분 파싱 가능, 2024 횡전개는 별도 필요
- 2026-03-06: v2.1 — 현대차/네이버 열 매핑 수정, 잡음 행 필터, LG에너지 offset 보정
- 2026-03-06: v2.2 — 2024 XBRL 횡전개 파서 추가, 전 연도 파싱 가능
