- 09_UI_DESIGN.md 신규: Ant Design 테마 토큰, 글로벌 CSS 변수,
레이아웃 규격(Header 48px / Sider 220px), 페이지 표준 3종(목록/상세/대시보드),
공통 컴포넌트 스타일(CodeBadge/MoneyText/SearchForm/DataTable/DataGrid),
등록·수정 폼 규칙(Drawer), 화면별 와이어프레임 6종, 신입 체크리스트
- 00_PROMPTS.md: 프롬프트 3 frontend-developer 가 09_UI_DESIGN.md 도 함께 참조
- 06_FRONTEND_SPEC.md: 상단에 디자인 시스템 참조 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
00_PROMPTS.md — Claude Code 실행 프롬프트 1~6
01_DB_SCHEMA.md — V1~V17 Flyway 스키마 + 프로젝트 뼈대
02_COMMON_SPEC.md — ga-common 공통 프레임워크 (모델/예외/MyBatis/AOP/엑셀/공통컴포넌트)
03_CORE_SPEC.md — ga-core VO 설계 원칙 + Mapper 패턴
04_BATCH_SPEC.md — ga-batch 정산 8 Step + DataReceiver/MappingEngine
05_API_SPEC.md — ga-api Controller/Service 표준 패턴 + 엔드포인트 목록
06_FRONTEND_SPEC.md — ga-frontend 13개 화면 + 공통 컴포넌트 사용법
07_INFRA_SPEC.md — Docker/Nginx + README + DEVELOPER_GUIDE
08_DBA_SPEC.md — V13~V15 인덱스/파티셔닝/뷰
실제 구현된 ga-commission-system 기준으로 작성. 코드는 변경 없음.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
mybatis-spring-boot-starter 가 BaseTypeHandler<String> 빈을 자동 등록하면서
모든 String 컬럼에 적용해버리는 문제 해결. @Component 를 제거하고
EncryptTypeHandlerInitializer (@Configuration) 에서 EncryptUtil 만 정적 주입.
사용처는 mapper XML 에서 컬럼별 typeHandler 속성으로 명시(기존과 동일).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 시나리오 A: 운영 DB(trading_ai/ga, 포트 55432) 연결 실행
- 시나리오 B: 로컬 PostgreSQL 처음부터 (Flyway 자동 마이그레이션)
- 시나리오 C: Docker Compose 전체 기동
- 트러블슈팅 6항목 (Gradle 미설치, JDBC 드라이버, Flyway 스키마, JWT, AG Grid, 비밀번호)
- 13개 페이지 메뉴-경로 표
- 데이터 현황 테이블 (보험사 5 / 상품 20 / 설계사 50 / 계약 200 등)
- 외부 시스템 연결 정보 (호스트/포트/스키마/관리자 계정)
Backend:
- MappingEngine: company_field_mapping 기반 동적 변환 구현
- raw_content(JSON) → 표준 원장 (TRIM/UPPER/LOWER/DATE/DIVIDE/MULTIPLY/CODE_MAP)
- policy_no 로 contract 매칭 → contract_id/agent_id 자동
- 실패 시 parse_error_log 자동 적재
- Recruit/Maintain Mapper.sumByAgentMonth 추가
- OrganizationMapper.selectAncestorIds (CTE 재귀 상향) 추가
- CalcOverrideStep 실제 동작:
* lower agent 의 모집+유지 합계를 base 로 사용
* 자기 조직 → 상위 조직 순으로 to_grade 직급 ACTIVE 설계사 탐색
* (lowerOrgId, toGrade) 캐싱
Frontend (주요 화면):
- 공통 컴포넌트:
* CodeSelect (공통코드 드롭다운, React Query 캐시)
* CodeBadge (상태 색상 자동 매핑)
* MoneyText (천단위 콤마, 음수 빨강, 부호 옵션)
* PermissionButton (권한 없으면 미렌더)
* SearchForm (조건 배열 → 자동 폼)
* ExcelExportButton (blob 다운로드)
* PageContainer
- 훅: useCommonCodes, usePermission (메뉴별 boolean)
- API 모듈: agent, contract, ledger, settle, code
- 페이지: AgentList, ContractList, RecruitLedger, SettleList
* SettleList: 월 요약 카드 + 확정/보류 액션 + 권한 체크
- 라우터: /org/agents, /contracts, /ledger/recruit, /settle
V16 fix:
- PAYMENT 메뉴는 V12 에서 level1 directory 로 생성됨 → V16 에서 PAGE 로 UPDATE 후 권한 매트릭스 적용 (자식으로 또 만들면 unique 충돌)
Bugs:
- MyBatisConfig: @MapperScan basePackages corrected to scan all com.ga.* by @Mapper annotation (was missing common.code/menu/system/file/notification)
- CalcRecruitStep: endDate was first day of month (only contracts on day 1 were picked); now full month range via DateUtil.getMonthRange
- EncryptTypeHandler: removed @MappedTypes(String.class) to prevent encrypting all String columns; now requires explicit per-column typeHandler
- mybatis-config.xml: removed redundant javaType for JsonTypeHandler (uses @MappedTypes)
V16 admin initial data:
- Child menus (24): ORG_TREE, ORG_AGENT, CONTRACT_LIST, COMPANY, PRODUCT,
RULE_*, RECEIVE_*, LEDGER_*, SETTLE_LIST, BATCH_RUN, PAYMENT, SYSTEM_*
- Permissions for each PAGE menu × {READ,CREATE,UPDATE,DELETE,APPROVE,EXPORT}
- SUPER_ADMIN: full grants
- ADMIN: all except SYSTEM
- MANAGER: READ/CREATE/UPDATE/EXPORT except SYSTEM
- AGENT: READ on LEDGER_*, SETTLE_LIST
- admin user (login_id=admin, pw=admin1234!) mapped to SUPER_ADMIN