- EcardController에 storeJournal/getJournal/deleteJournal/getJournalStatuses 4개 메서드 추가
- journal_entries + journal_entry_lines 통합 (source_type='ecard_transaction')
- CardJournalModal 차변/대변 복식부기 UI 추가
- 거래 테이블에 분개완료/구버전/미분개 3단계 상태 표시
- 기존 splits 데이터 자동 전환 지원
- SenderID: 바로빌 계정 ID (barobill_id) 사용
- YellowId: 카카오톡 채널 ID 필수 전달 (기존에 빈값)
- SmsReply: 'N' (대체문자 미발송) 또는 'S' (발송) 명시
- 템플릿 본문: API에서 조회 후 변수 치환 (정확한 포맷 유지)
- getKakaotalkSenderId → getKakaotalkChannelId 이름 변경
- EsignPublicController: 잘못된 필드명(corp_num, is_test_mode) 수정
- EsignRequestMail, EsignOtpMail, EsignCompletedMail에 from 주소 명시
- config/mail.php에 contact_from_address 설정 추가
- .env의 CONTACT_MAIL_FROM_ADDRESS(contact@codebridge-x.com) 사용
- WSDL 스펙에 맞게 KakaotalkMessage 중첩 구조로 변경
- ReceiverName, ReceiverNum 등을 최상위에서 KakaotalkMessage 내부로 이동
- ReserveDT → SendDT로 파라미터명 수정
- SendATKakaotalkEx에 YellowId 파라미터 추가
- 버튼 배열을 KakaotalkButton 래핑 구조로 변경
- sendATKakaotalks 대량 발송도 WSDL 구조에 맞게 수정
- esign 알림톡 메시지 본문을 등록 템플릿에 맞게 조정
- BankTransaction 모델: getUniqueKeyAttribute, generateUniqueKey에 summary 추가
- EaccountController: API 응답 및 DB upsert 시 summary 포함 매칭
- JournalEntry, JournalEntryController: 레거시(5필드) 키 호환 처리
- BankTransactionOverride: 레거시 키 호환 조회
- 백엔드: submitSignature에 stamp_image(base64) 파라미터 처리 추가
- 프론트: counterpart 역할에 도장 선택 UI 항상 표시
- 프론트: 도장 이미지 업로드(PNG/JPG, 5MB 제한) 및 미리보기 기능
- 기존 Creator 법인도장 흐름은 변경 없음
- 7개 섹션 교육 콘텐츠 (열쇠 고리 비유, 프로젝트별 구조, Docker Override, 동기화 필수 변수, 로컬/서버 비교, 변경 후 할 일, 주의사항)
- SVG 이미지 9종 (에메랄드 다크 테마)
- 용어 사전 15개 (env-management 도메인)
- 실제 .env.example, docker-compose.yml, production-env-sync.md 기반 콘텐츠
- 퍼플 테마 6대 섹션 22소 섹션 Blade 뷰 작성
- SVG 이미지 12장 생성 (인터넷, URL, HTTP, 에러코드 등)
- AcademyController webBasics() 메서드 및 라우트 등록
- academy-glossary 컴포넌트에 web-basics 도메인 추가
- 이미지 생성 프롬프트 문서 작성
- AcademyController에 dockerEnvironment() 메서드 추가
- academy 라우트 그룹에 docker-environment 라우트 추가
- 6개 섹션 Blade 뷰 작성 (Docker 소개, 아키텍처, 서비스 상세, 볼륨, .env, 명령어)
- academy-glossary에 docker-environment 도메인 용어 25개 추가
- AiConfig::getActiveGemini() → config('services.gemini') 기반
- AiConfig::getActiveGcs() → config('services.google') 기반
- AiConfig::getActiveClaude() → config('services.claude') 기반
- AiConfig::getActiveNotion() → config('services.notion') 기반
- GoogleCloudStorageService: DB 우선 로직 제거, .env만 사용
- 8개 서비스 파일은 수정 없이 동작 (AiConfig 인터페이스 유지)
- RagSearchService: docs 폴더 키워드 검색 + Gemini API 컨텍스트 기반 답변
- RagSearchController: 검색 페이지 및 HTMX 비동기 검색 API
- 검색 UI: 통계 바, 예시 질문, Markdown 렌더링, 참조 문서 표시
- AiTokenHelper 연동으로 토큰 사용량 자동 추적
- KioskController (index/showroom/factory) 생성
- 키오스크 메인 선택 페이지 (쇼룸/공장 카드 UI)
- 쇼룸 키오스크 골격 (제품 카탈로그, 견적 시뮬레이션, 시공 갤러리, 회사 소개)
- 공장 키오스크 골격 (생산 현황, 작업 지시, 생산 통계, 공지사항)
- /additional/kiosk 라우트 그룹 추가
- FormulaApiService의 Bearer token 조회를 session('api_explorer_token')에서
ApiTokenService 기반으로 변경
- resolveApiToken() 메서드 추가: 세션 토큰 확인 → 만료시 HMAC 토큰 교환
- DocumentTemplateApiController와 동일한 인증 패턴 적용
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 2-pass 보정 후 각 step의 좌표 영역을 원본에서 크롭하여 Gemini 검증
- 크롭에 패딩 확장 (30% 또는 최소 80px) + 최소 크롭 200x150px 보장
- 빨간 사각형으로 타겟 영역 표시하여 false positive 방지
- 재추정 실패 시 그리드 오버레이 이미지로 3차 재시도
- _verification 메타데이터에 crop_verified, crop_corrected 추가
- PASS율: 37.5% → 100% (FAIL 5 → 0)