Skip to content

Repository files navigation

Pension SEMA Guide

과학기술인공제회(SEMA) DC형 퇴직연금을 위한 AI 멀티에이전트 포트폴리오 가이드입니다. 거시경제 분석부터 펀드 선별, 규제 검증, 환각(hallucination) 방지 검증까지 하나의 명령으로 수행하고, 그 결과를 실제 SEMA 시스템에 입력하는 단계까지 함께 도와주는 것을 목표로 합니다.

이 프로젝트가 도와주는 일

  1. 나에게 맞는 DC형 퇴직연금 포트폴리오를 분석·추천받기
  2. DC형 규제(위험자산 70% 한도 등) 준수 여부를 자동 검증
  3. 완성된 포트폴리오를 과학기술인공제회 포털에 직접 입력할 때 옆에서 도와주기

🔓 공개 저장소입니다. 개인정보(투자자 프로필·잔고·실제 분석 산출물)는 저장소에 포함되지 않으며, 로컬의 confidentialData/ 디렉토리(gitignore 대상)에만 보관됩니다.


무엇을 할 수 있나요?

이 프로젝트의 메인 기능은 SEMA DC형 퇴직연금 포트폴리오 생성입니다. 주식·ETF 상담과 개별 기업 리서치는 같은 환각 방지 설계를 공유하는 추가(보조) 기능입니다.

🎯 메인 기능 — SEMA 퇴직연금 포트폴리오 생성

하고 싶은 일 사용하는 명령 / 에이전트 결과물
내 퇴직연금 포트폴리오 구성 /investments-portfolio:portfolio-analyze 5단계 분석 보고서(거시경제 → 펀드 → 규제 → 검증 → 요약)

➕ 추가 기능

하고 싶은 일 사용하는 명령 / 에이전트 결과물
주식·ETF 투자 상담 /stock-consultation:stock-consult 스크리닝·밸류에이션·반론·검증 상담 보고서
개별 기업 리서치 @equity-research 에이전트 (티커와 함께 호출) 기관급 리서치 리포트
퇴직연금 세금 상담 /pension-tax-advisor:tax-consult 납입→운용→수령 절세 상담, 3중 검증, 보류 안전

⚙️ 공용 엔진macro-analysis(지수·금리·섹터·리스크·리더십)는 위 기능들이 내부에서 호출하는 공용 거시경제 분석 엔진으로, 사용자가 직접 실행하는 기능이 아닙니다.

핵심 설계 원칙은 환각 방지입니다. 모든 수치는 출처를 명시하고, 3개 출처 교차검증·출력 검증 에이전트를 거칩니다.


사전 준비

  • Claude Code (플러그인/마켓플레이스 지원 버전)
  • Python 3 (펀드 데이터 업데이트 시) — 대부분 표준 라이브러리만 사용
  • openpyxl (xlsx → CSV 변환 시에만 필요): pip install openpyxl

빠른 시작

1. 플러그인 등록

이 저장소는 Claude Code 마켓플레이스 + 5개 플러그인을 .claude/plugins/에 내장(vendoring)하고 있습니다. .claude/settings.json에 마켓플레이스(extraKnownMarketplaces)와 활성 플러그인(enabledPlugins, 5개 모두 true)이 등록되어 있어, 프로젝트를 열고 폴더를 신뢰(trust)하면 Claude Code가 자동으로 설치를 안내합니다.

수동으로 등록하려면:

/plugin marketplace add ./.claude/plugins

이후 pension-sema-guide 마켓플레이스의 5개 플러그인(investments-portfolio, macro-analysis, stock-consultation, equity-research, pension-tax-advisor)이 활성화됩니다.

2. 포트폴리오 분석 실행 (투자자 프로필 인라인 입력)

portfolio-analyze 명령에 투자자 프로필을 함께 입력하여 실행합니다. 명령은 입력한 프롬프트에서 생년·투자 성향 등 투자자 정보를 직접 파싱합니다(별도 파일을 읽지 않습니다).

/investments-portfolio:portfolio-analyze 나를 위한 새로운 포트폴리오를 구성해줘.

| 항목 | 내용 |
|------|------|
| **생년** | (예: 1985년) |
| **은퇴 예정** | 65세 |
| **투자 성향** | 공격형 (장기투자) |
| **위험 수용도** | 높음 (단기 손실 감내 가능) |

💡 프로필을 매번 입력하기 번거롭다면 confidentialData/investor-profile.md(gitignore 대상)에 저장해 두고 복사해 붙여넣으세요. 단, 명령이 이 파일을 자동으로 읽지는 않으므로 실행할 때 반드시 프롬프트에 프로필을 포함해야 합니다.

명령을 실행하면 아래 5단계 멀티에이전트 워크플로우가 순차 실행되어, 추천 펀드 목록·비중·규제 준수 여부·신뢰도 점수가 담긴 최종 보고서가 생성됩니다. 산출물은 개인정보를 포함하므로 confidentialData/에 저장됩니다.

3. 결과 확인

공개 예시는 portfolios/samples/sample-aggressive/에서 익명화된 형태로 확인할 수 있습니다:

portfolios/samples/sample-aggressive/
├── 00-macro-outlook.md        # 거시경제 전망 + 자산배분 권고
├── 01-fund-analysis.md        # 펀드 선별 및 비중 배분
├── 02-compliance-report.md    # DC형 규제 준수 검증
├── 03-output-verification.md  # 환각 방지·출처 검증, 신뢰도 점수
├── 04-portfolio-summary.md    # 최종 통합 보고서 (추천 펀드 표 + 실행 체크리스트)
├── index-data.json            # 시장 지수 스냅샷 (근거 데이터)
├── rate-analysis.json         # 금리/환율 분석 근거
├── risk-analysis.json         # 리스크/시나리오 분석 근거
└── sector-analysis.json       # 섹터 전망 분석 근거

최종 보고서(04-portfolio-summary.md)에는 추천 펀드명 + 비중 표실행 체크리스트가 들어 있어, 이 표를 그대로 들고 SEMA 포털에 입력하면 됩니다.


4. SEMA 시스템에 입력하기 (가장 중요한 단계)

분석으로 끝이 아닙니다. 이 프로젝트의 최종 목적은 추천 포트폴리오를 실제 과학기술인공제회 DC형 퇴직연금 포털에 정확히 입력하는 것입니다. 그런데 보고서는 목표 비중(%)·금액으로 적혀 있는 반면, 포털 입력 화면은 비율(%)·좌수 단위로 동작하고 정수만 허용되거나, 매수비율 합이 정확히 100%가 되어야 하는 등 현장에서 숫자를 다시 환산·계산해야 하는 순간이 많습니다. 이때 포털 화면을 그대로 복사해 붙여넣고 에이전트와 함께 계산·검산하며 입력하세요. 에이전트는 보고서의 목표 비중을 포털 입력 단위(비율·좌수·정수 %)로 옮기는 환산 작업을 도와줄 것입니다.

입력 중 에이전트에게 맡기면 좋은 계산

포털 화면(매도/매수, 부담금 설정)을 그대로 복사해 붙여넣고, 아래 같은 계산을 요청하세요.

입력 중 상황 에이전트에게 이렇게 요청
포털이금액이 아니라 비율(%)로만 매도/매수됨 "이 펀드를 목표 비중만 남기고 팔 거야. 매도 비율 몇 %로 입력해야 해?" → (매도금액 ÷ 평가금액) 환산
포털이정수 %만 입력 가능 "환산하니 26.6%인데 정수만 돼. 26%와 27% 중 목표 금액에 더 가까운 건?"
**매수비율 합이 정확히 100%**여야 함 "매도 재원을 이 펀드들에 목표 비중대로 나눌 건데, 정수 %로 합이 딱 100% 되게 배분해줘."
입력값이 맞는지검산 "방금 매도 화면에 입력한 값이야(표 붙여넣기). 매도예상금액이 내 목표랑 맞는지 검산해줘."
빠진 펀드·현금 드래그 점검 "매수 목록에 이거 넣었는데, 합이 100% 안 되거나 빠진 펀드 있어? 안 사고 남는 예수금 생겨?"
부담금(향후 납입금) 투자비율 설정 "'부담금 투자비율 설정' 화면이야. 기본·일시전환·경영성과 3칸을 목표 비중에 맞게 채워줘. 합 100%·위험자산 70% 이하로."
위험자산 70% 게이트에 막힘 "위험자산이 정확히 70%라 포털이 한도 초과로 막아. 어느 펀드를 1%만 줄이면 통과돼?"

이렇게 물어보세요 (실제 입력 예시)

  • "이 펀드 평가금액이 ○○원이고 목표는 10%만 남기는 거야. 포털은 비율 매도니까 몇 %로 팔아야 해?"
  • "매수 재원을 이 7개 펀드에 목표 비중대로 나눌 건데, 정수 %로 합계 100% 맞춰서 표로 줘."
  • "방금 입력한 매도 화면이야(붙여넣기). 매도예상금액이랑 비중 합이 내 계획이랑 맞는지 검산해줘."
  • "'부담금 투자비율' 화면이야. 목표 포트폴리오대로 기본·일시전환·경영성과 비율을 채워줘."
  • "위험자산이 딱 70%라 입력이 막혀. 어느 펀드를 1%만 줄이면 통과되는지 알려줘."

왜 대화형으로 하나요? 포털은 보고서와 입력 단위가 다릅니다. 매수·매도가 금액이 아니라 비율(%)·좌수로 처리되고, 정수만 허용되며, 매수비율 합 100%·위험자산 70% 한도를 그 자리에서 맞춰야 합니다. 보고서의 목표 비중을 화면 단위로 환산·검산하는 계산이 매번 필요하므로, 화면을 붙여넣고 계산하고 → 입력하고 → 검산하기를 반복하는 게 가장 정확하고 안전합니다.

입력 완료 후 체크리스트

  • (보유분) 매도·매수 비율을 입력했고, 매도예상금액이 내 목표와 일치하는가
  • (향후 납입금) 부담금 투자비율(기본·일시전환·경영성과)을 설정했는가
  • 매수비율 합계 = 100% 인가 (정수 % 반올림 후에도)
  • 위험자산 비중 ≤ 70% 인가 (적격 TDF는 한도 면제)
  • 단일 펀드 비중 ≤ 40% 인가

멀티에이전트 워크플로우 (포트폴리오 분석)

/investments-portfolio:portfolio-analyze는 아래 단계를 오케스트레이션합니다. 거시경제 단계는 macro-analysis 플러그인의 공용 에이전트들이 수행하고, 이후 펀드 선별·규제 검증·출력 검증을 거쳐 최종 보고서로 통합됩니다.

[사용자 요청 + 투자자 프로필(명령 프롬프트에 인라인 입력)]
     │
     ▼
[거시경제 분석]   macro-analysis 에이전트(지수·금리·섹터·리스크·리더십) → 종합/검증
     │            └─► 00-macro-outlook.md
     ▼
[fund-portfolio]  펀드 데이터 기반 포트폴리오 구성 (Bogle 원칙·저비용·인덱스 우선)
     │            └─► 01-fund-analysis.md
     ▼
[compliance-checker]  DC형 위험자산 70% 한도, 단일펀드 40% 한도, 비중 합계 100% 검증
     │            └─► 02-compliance-report.md
     ▼
[output-critic]   출처 검증, 환각 탐지, 과신 표현 제어, 신뢰도 점수 산출
     │            └─► 03-output-verification.md
     ▼
[최종 통합]       추천 펀드 표 + 핵심 지표 + 실행 체크리스트
                  └─► 04-portfolio-summary.md
단계 담당 출력 역할
1 macro-analysis 에이전트 00-macro-outlook.md 거시경제·시장 전망, 자산배분 권고
2 fund-portfolio 01-fund-analysis.md 펀드 선별·비중 배분
3 compliance-checker 02-compliance-report.md DC형 규제 준수 검증
4 output-critic 03-output-verification.md 환각 방지·출처 검증·신뢰도 점수
5 portfolio-analyze(조율) 04-portfolio-summary.md 최종 통합 보고서

퇴직연금 세금 상담 예제 (/pension-tax-advisor:tax-consult)

추가 기능인 tax-consult납입 → 운용 → 수령 3단계의 연금·퇴직연금 절세를 상담하는 오케스트레이터입니다. portfolio-analyze와 마찬가지로 투자자 프로필을 프롬프트에 인라인으로 입력하면(개인정보 파일을 자동으로 읽지 않습니다), 교육 → 전략 → 3중 검증 → 최종 요약 파이프라인이 순차 실행됩니다. 모든 세제 수치는 funds/pension_tax_params.json(현행 조문 앵커)에서 parameter_id로 로드해 python3로 독립 재계산하고, 검증을 통과하지 못한 항목은 숫자를 만들어내지 않고 **"보류"**로 표시합니다.

1. 실행 (프로필 인라인 입력)

/pension-tax-advisor:tax-consult 내 연금계좌 절세 상담을 해줘.

| 항목 | 내용 |
|------|------|
| **총급여** | 6,000만원 (고소득) |
| **나이 / 수령 개시** | 45세 / 65세 (20년 후) |
| **계좌 구성** | IRP + 연금저축 (DC는 직장에서 별도 운용) |
| **연간 납입** | IRP 600만원 + 연금저축 300만원 |

💡 프로필에는 개인정보가 포함되므로 실행 결과는 모두 confidentialData/tax/(gitignore 대상) 하위에만 저장됩니다.

2. 멀티에이전트 워크플로우

[프로필 인라인 입력]
     │
     ▼
[0. 신선도 체크]   funds/pension_tax_params.json 90일 초과 시 → tax-law-updater (BLOCKING)
     │
     ▼
[tax-knowledge-educator]  납입·운용·수령 3단계 세제 교육 (개인 맞춤 아님)
     │            └─► 00-educator.md
     ▼
[tax-strategy-planner]    개인 맞춤 절세 전략 초안 (미검증 파라미터는 보류)
     │            └─► 01-strategy.md
     ▼
[C4 3중 검증]  calc-verifier(python3 재계산) → critic(A~F 채점) → devil-advocate(반론)
     │            └─► 02-calc-verify.json/.md · 03-critic.json/.md
     │            ✗ C/D/E/F·중대 반론 → planner 재시도(최대 3회) → 초과 시 "제공 보류"
     ▼
[04-summary 재검증]  검증 통과(A/B) 금액만 인용 + parameter_id 1:1 매핑 → 재검증 후 확정
                  └─► 04-summary.md
단계 담당 에이전트 산출물 게이트
0 tax-law-updater (파라미터 갱신) 90일 초과 시에만 · BLOCKING
1 tax-knowledge-educator 00-educator.md BLOCKING
2 tax-strategy-planner 01-strategy.md BLOCKING
3 tax-calc-verifiertax-critic → devil-advocate¹ 02-calc-verify.* · 03-critic.* A/B 통과 · 미통과 3회 시 보류
4 tax-consult(조율) 04-summary.md 재검증(calc→critic) 후 확정

¹ devil-advocate는 별도 에이전트가 아니라 tax-critic이 보유한 반론 스킬입니다(에이전트는 5개).

3. 산출물 구조

개인정보 보호를 위해 모든 파일은 confidentialData/tax/{YYYY-MM-DD}-{slug}-{6자리}/ 하위에만 JSON+MD로 저장됩니다(공개 저장소에 커밋되지 않습니다).

confidentialData/tax/{YYYY-MM-DD}-{slug}-{6자리}/
├── 00-educator.md            # 납입·운용·수령 3단계 세제 교육
├── 01-strategy.md            # 개인 맞춤 절세 전략 초안
├── 02-calc-verify.json/.md   # python3 독립 재계산 검증
├── 03-critic.json/.md        # A~F 신뢰도 채점 + 반론(devil-advocate)
└── 04-summary.md             # 최종 요약 (검증 통과 금액만 + 검증 부록)

4. 최종 요약(04-summary.md) 예시 발췌

위 익명 프로필에 대한 최종 요약의 일부입니다. tax-critic A등급 PASS를 받은, parameter_id로 재계산된 금액만 포함됩니다.

항목 금액 parameter_id 조문 등급
연간 세액공제 1,080,000원 [id:연금계좌_세액공제한도] × [id:공제율_국세기준_고소득] 소득세법 §59의3 제1항 ✅ A
분리과세 경계 15,000,000원 [id:사적연금_분리과세_경계] 소득세법 §14 제3항 및 §20의3 ✅ A

보류(미검증) 항목 — 숫자를 생성하지 않고 세무사 확인을 권고합니다.

parameter_id 조문 상태
연금소득세율_70세미만 소득세법 §20의3 보류(미검증)
퇴직소득세_감면율_11년_20년 소득세법 §22 제3항 보류(미검증)

⚠️ 면책: 본 상담은 정보 제공 목적이며 공인 세무사의 자문을 대체하지 않습니다. 세법·파라미터는 변경될 수 있으므로 실행 전 최신 조문(law.go.kr)을 재확인하세요.

5. 공개 예시

익명화된 전체 예시는 portfolios/samples/sample-tax-consult/에서 5단계 산출물(00-educator01-strategy02-calc-verify03-critic04-summary)로 확인할 수 있습니다. 실명·생년·소속·계좌 등 개인정보는 포함되어 있지 않습니다.


플러그인 구성

마켓플레이스 pension-sema-guide에 5개 플러그인이 vendoring되어 있습니다. (서브모듈이 아닌 내장 디렉토리)

역할 위계는 다음과 같습니다.

구분 플러그인 위치
🎯 메인 기능 investments-portfolio SEMA 퇴직연금 포트폴리오 생성 (이 프로젝트의 핵심)
⚙️ 공용 엔진 macro-analysis 메인·추가 기능이 내부 호출하는 거시경제 분석 엔진
추가 기능 stock-consultation 주식/ETF 투자 상담
추가 기능 equity-research 개별 기업 리서치
추가 기능 pension-tax-advisor 퇴직연금·연금계좌 세금 상담

🎯 메인 기능

1. investments-portfolio (v1.2.0) — 포트폴리오 분석의 중심

3 에이전트 · 1 명령 · 11 스킬

종류 이름 역할
명령 portfolio-analyze 포트폴리오 분석 오케스트레이터
에이전트 fund-portfolio 퇴직연금 펀드 포트폴리오 추천
에이전트 compliance-checker DC형 규제 준수 검증
에이전트 output-critic 출력 검증·환각 탐지
스킬 web-search-verifier 3개 출처 교차검증 웹검색 프로토콜
스킬 analyst-common 분석 에이전트 공통 규칙
스킬 bogle-principles John Bogle / Vanguard 투자 철학
스킬 dc-pension-rules DC형 퇴직연금 규제 준수 규칙
스킬 fund-selection-criteria 펀드 선택 기준·점수 체계
스킬 fund-output-template 펀드 포트폴리오 보고서 출력 템플릿
스킬 macro-output-template 거시경제 보고서 출력 템플릿
스킬 perspective-balance Bull/Bear 균형 분석
스킬 devil-advocate 반론·리스크 발굴
스킬 file-save-protocol 분석 결과 파일 저장 프로토콜
스킬 data-updater CSV→JSON 펀드 데이터 업데이트

⚙️ 공용 엔진

2. macro-analysis (v1.0.1) — 공용 거시경제 에이전트

7 에이전트 (명령·스킬 없음). 메인·추가 기능 플러그인이 내부에서 재사용하며, 사용자가 직접 실행하는 기능은 아닙니다.

에이전트 역할
index-fetcher 지수·환율 데이터 수집
rate-analyst Fed/BOK 금리 + USD/KRW 전망
sector-analyst 5개 핵심 섹터 전망
risk-analyst 지정학·경제·시장 리스크 + Bull/Base/Bear 시나리오
leadership-analyst 주요 7개국 정치·중앙은행 동향
macro-synthesizer 하위 분석 결과 종합 보고서 작성
macro-critic 종합 결과 검증

➕ 추가 기능

3. stock-consultation (v1.0.1) — 주식/ETF 상담

5 에이전트 · 1 명령 · 3 스킬. Bogle/Vanguard 철학 기반.

종류 이름 역할
명령 stock-consult 주식/ETF 상담 오케스트레이터
에이전트 materials-organizer 사용자 제공 자료 정리·요약
에이전트 stock-screener 주식/ETF 후보 스크리닝
에이전트 stock-valuation 개별 종목 심층 밸류에이션
에이전트 bear-case-critic 반대 논거·리스크 분석
에이전트 stock-critic 최종 검증
스킬 stock-data-verifier 주식/ETF 데이터 교차검증
스킬 analyst-common-stock 주식/ETF 분석 공통 규칙
스킬 file-save-protocol-stock 결과 파일 저장 프로토콜

4. equity-research (v1.0.0) — 기업 리서치

1 에이전트 (명령·스킬 없음).

에이전트 역할
equity-research-analyst 기관급 주식 리서치 분석 (티커와 함께 호출)

5. pension-tax-advisor (v1.0.0) — 퇴직연금 세금 상담

5 에이전트 · 1 명령 · 3 스킬. law.go.kr 출처 등급제 + 3중 검증(재계산→비판→반론) 기반 환각 방지.

종류 이름 역할
명령 tax-consult 절세 상담 오케스트레이터 (read-time 신선도·C4 3중 검증)
에이전트 tax-knowledge-educator 납입·운용·수령 3단계 세제 기초 교육
에이전트 tax-strategy-planner 개인 맞춤 절세 전략 (미검증 시 보류·강한 면책)
에이전트 tax-calc-verifier python3 독립 재계산 검증 (LLM 암산 금지)
에이전트 tax-critic 조문·basis·미검증·미래시행 탐지, A~F 채점
에이전트 tax-law-updater 90일 법령 자동 재확인 (law.go.kr 현행 앵커)
스킬 pension-tax-rules 납입/운용/수령 규칙 + 계산식 스펙 (parameter_id 참조)
스킬 tax-law-verifier 출처 등급제·EXACT 법령 검증
스킬 file-save-protocol-tax 세금 상담 결과 저장 프로토콜

펀드 데이터

데이터는 과학기술인공제회 상품제안서(제로인 평가 데이터) 기반이며, JSON으로 저장됩니다. 각 파일의 정확한 기준일·레코드 수는 항상 파일 안의 _meta 블록을 신뢰하세요.

파일 내용 레코드 수 기준일(_meta.version) 조인 키
funds/fund_data.json 투자가능 펀드 기본정보·수익률 205 2026-06-01 fundCode(요율) / name(분류)
funds/fund_fees.json 펀드 총보수·연간비용 205 2026-06-01 fundCode
funds/fund_classification.json 카테고리·위험자산 분류 (9개 유형) 205 (생성 시각 기준) 펀드명
funds/tdf_data.json TDF 마스터 (결정적 enrichment) 75 2026-06-04 fundCode
funds/tdf_fees.json TDF 수수료/요율 75 2026-06-07 fundCode
funds/deposit_rates.json 원리금보장형 예금 금리 (수동 업데이트) 4 2026-02-28 (단독 조회)
funds/investable_codes.json 투자가능 펀드 코드 허용목록 207 (필터용)
funds/all/all_fund_data.json 전체 펀드 마스터 (투자불가 포함) 2104 2026-06-01 fundCode
funds/all/all_fund_fees.json 전체 펀드 수수료 2104 2026-06-01 fundCode
funds/all/all_fund_classification.json 전체 펀드 분류 2104 (생성 시각 기준) 펀드명

⚠️ TDF는 별도 기준일(tdf_data.json 2026-06-04, 75개)을 사용하므로 fund_data.json(205개)과 직접 교차비교하지 마세요. tdf_data.jsonbaseDateNote에도 명시되어 있습니다.

⚠️ funds/README.md구버전(STALE) 문서입니다. 펀드 수·분류 기준은 항상 각 JSON의 _meta를 따르세요. 데이터 스키마·조인 키 상세는 funds/AGENTS.md를 참고하세요.


펀드 데이터 업데이트 (매월)

스크립트는 data-updater 스킬 디렉토리에 있습니다. update_fund_data.py·classify_funds.py·update_tdf_data.py표준 라이브러리만 사용하고, xlsx_to_csv.pyopenpyxl이 필요합니다 (fetch_latest_proposal.py--convert 시에만 간접 필요).

SCRIPTS=".claude/plugins/investments-portfolio/skills/data-updater/scripts"

# 1) 미래에셋 게시판에서 최신 xlsx 자동 다운로드 + CSV 변환 (openpyxl 필요)
python $SCRIPTS/fetch_latest_proposal.py --out-dir resource --convert

# 2) CSV → JSON 변환 (fund_data / fund_fees / fund_classification 자동 재생성)
python $SCRIPTS/update_fund_data.py \
  --file "resource/26년06월_상품제안서_퇴직연금(DCIRP).csv" \
  --output-dir "funds"

선택 검증·재생성:

# 변경 사항만 미리보기
python $SCRIPTS/update_fund_data.py --file "resource/...csv" --output-dir funds --dry-run

# 분류만 재생성
python $SCRIPTS/classify_funds.py \
  --fund-data "funds/fund_data.json" --output "funds/fund_classification.json"

TDF 업데이트 (별도 흐름):

# 1) TDF 표를 resource/tdf-raw.md 에 붙여넣기
# 2) 파싱 → tdf_data.json 생성 (요율 enrichment는 --fees)
python $SCRIPTS/update_tdf_data.py --input resource/tdf-raw.md --fees

⚠️ 유지보수 주의 (게시판/양식 변경 시)

  • 미래에셋 게시판 구조가 바뀌면 fetch_latest_proposal.py의 첨부 파싱 정규식(attachmentId·(DCIRP).xlsx)을 점검하세요.
  • 상품제안서 xlsx 양식이 바뀌면 xlsx_to_csv.py의 시트명(실적배당형(펀드, ETF))·컬럼 수(25)를 점검하세요.
  • 회귀 검증: 과거 월 xlsx를 변환해 커밋된 resource/*.csvbyte 단위 일치하는지 확인하세요.

테스트 및 정합성 검증

이 프로젝트는 데이터의 결정성과 일관성을 보장하기 위해 두 단계의 검증 체계를 갖추고 있습니다.

1. 단위 및 통합 테스트 (pytest)

tests/는 TDF enrichment 파이프라인(update_tdf_data.py)의 결정성을 검증합니다. 이름 정규화·펀드코드 해석·수수료 매칭·수익률 드리프트 경고·전체 enrichment·CLI·통합 테스트로 구성됩니다.

python3 -m pytest          # 98 passed (GREEN)

2. 정합성 게이트 (Consistency Gate)

데이터 업데이트나 프롬프트 수정 후, 전체 시스템의 정합성을 검증하는 게이트를 실행합니다.

python3 scripts/verify_consistency.py
  • 검증 항목: dangling references, 날짜 동기화, 데이터 신선도, 중복 테스트, 플러그인 매니페스트 정합성 등 5개 항목
  • 결과: Exit 0 (정상), Exit 1 (불일치 감지), Exit 2 (내부 에러)

프로젝트 구조

pension_sema_guide/
├── .claude/                        # 🔌 Claude Code 설정 + 내장 마켓플레이스/플러그인
│   ├── settings.json               #   enabledPlugins(5개) + extraKnownMarketplaces
│   └── plugins/                    #   vendored 마켓플레이스 + 5개 플러그인
│       ├── .claude-plugin/
│       │   └── marketplace.json    #     마켓플레이스 매니페스트 (pension-sema-guide)
│       ├── investments-portfolio/  #     3 에이전트 + portfolio-analyze + 11 스킬
│       ├── macro-analysis/         #     7 공용 거시경제 에이전트
│       ├── stock-consultation/     #     5 에이전트 + stock-consult + 3 스킬
│       ├── equity-research/        #     1 에이전트 (기업 리서치)
│       └── pension-tax-advisor/    #     5 에이전트 + tax-consult + 3 스킬
├── funds/                          # 펀드 데이터 (제로인 기반) — funds/AGENTS.md 참고
│   ├── fund_data.json              #   투자가능 펀드 (205)
│   ├── fund_fees.json              #   수수료 정보 (205)
│   ├── fund_classification.json    #   자산 분류 (205, 9개 유형)
│   ├── tdf_data.json               #   TDF 마스터 (75, 별도 기준일)
│   ├── tdf_fees.json               #   TDF 수수료 (75)
│   ├── deposit_rates.json          #   예금 금리 (수동 업데이트)
│   ├── investable_codes.json       #   투자가능 코드 허용목록 (207)
│   └── all/                        #   전체 펀드 (2104, *_all_*)
├── tests/                          # TDF enrichment pytest 스위트
├── portfolios/samples/             # 익명화된 공개 예시 (sample-aggressive)
├── consultations/                  # 주식/ETF 상담 보고서 (비개인)
├── resource/                       # SEMA 상품제안서 CSV/XLSX (원본)
├── docs/                           # 기술 문서
├── scripts/                        # verify_no_pii.sh, verify_plugin.sh
├── index-data.json                 # 시장 지수 데이터 스냅샷
├── pytest.ini                      # testpaths=tests
├── confidentialData/               # 🔒 개인정보 (gitignore — 저장소 미포함)
└── AGENTS.md                       # 프로젝트 지식베이스

개인정보 보호 정책

이 저장소는 공개(Public) 저장소입니다. 개인정보는 절대 커밋하지 않습니다.

  • 개인별 데이터(투자자 프로필 investor-profile.md, 개인 투자계획·잔고, 실제 분석 산출물)는 반드시 confidentialData/에만 저장합니다.
  • confidentialData/.gitignore에 등록되어 저장소에 포함되지 않습니다.
  • 공개 가능한 예시는 익명화하여 portfolios/samples/에 둡니다 (실명·생년·소속·계좌 금지).
  • 커밋 전 PII 누출 여부를 검증하세요:
scripts/verify_no_pii.sh      # 히스토리 전수 PII 스캔
scripts/verify_plugin.sh      # 플러그인 매니페스트 검증

면책 조항

  1. 과거 수익률은 미래 수익률을 보장하지 않습니다.
  2. 본 가이드는 정보 제공 목적이며, 투자 권유가 아닙니다. 투자 결정은 본인의 판단과 책임 하에 이루어져야 합니다.
  3. DC형 퇴직연금 규제는 변경될 수 있으니 입력 전 최신 규정과 포털 안내를 확인하세요.
  4. 데이터 기준일이 지난 경우 펀드 라인업·수익률이 실제 포털과 다를 수 있습니다.

  • 데이터 출처: 과학기술인공제회 퇴직연금 상품제안서 + 펀드평가사 제로인(Zeroin)
  • 마켓플레이스: pension-sema-guide

Multi-Agent Portfolio System for SEMA DC Pension

About

ai 기반 투자

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages