Commit Graph

220 Commits

Author SHA1 Message Date
김보곤
f572865b48 fix:사이드바 메뉴 중복 활성화 문제 수정 (v2)
다른 메뉴가 현재 URL에 정확히 매칭될 때 prefix 매칭을
비활성화하여, 형제 메뉴가 동시에 활성화되는 문제 해결.
예: /esign/create 접속 시 /esign 메뉴가 함께 활성화되던 문제.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 12:46:53 +09:00
김보곤
14a3d7a869 fix:사이드바 메뉴 중복 활성화 문제 수정
자식 메뉴가 있는 부모 메뉴의 경우, 하위 경로까지 매칭되어
부모와 자식 메뉴가 동시에 활성화되는 문제를 수정.
자식 메뉴가 있으면 정확한 URL 매칭만 적용.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 12:40:23 +09:00
김보곤
4169b5ce4e feat:Gemini AI 화자 재분배 + V2 리전 엔드포인트 수정
- V2: 리전별 엔드포인트 사용 ({location}-speech.googleapis.com)
- V2 폴링도 리전별 엔드포인트 사용
- Google 화자분리가 1명만 인식 시 Gemini AI가 대화 패턴 분석하여 화자 재분배
- Gemini 프롬프트: 맥락/호칭/질문-답변/어투 변화 기반 화자 분리
- 사용량 로깅에 engine 구분 (v1+gemini, v2+gemini 등)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:33:22 +09:00
김보곤
6b0a786582 fix:STT V2 configMask→snake_case 수정 + V1 채널수 2채널 수정
V2 에러: configMask → 제거 (V2 REST API 자동 추론), 전체 snake_case 적용
V1 에러: audioChannelCount=2 추가 (원본 스트림이 스테레오 WebM)
V2 파싱: speaker_tag/start_offset 등 snake_case 필드명도 처리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:23:15 +09:00
김보곤
7f1f7165a5 feat:최고 품질 음성 녹음 시스템 구축 (STT V2 + Chirp 2 + Web Audio)
- 프론트엔드: Web Audio API 전처리 파이프라인 (GainNode + DynamicsCompressor + AnalyserNode)
- 프론트엔드: VU 미터 실시간 레벨 표시 + 마이크 감도 슬라이더 (0.5x~3.0x)
- 프론트엔드: getUserMedia constraints 강화 + MediaRecorder 128kbps Opus
- 백엔드: Google STT V2 API + Chirp 2 모델 batchRecognize 메서드 추가
- 백엔드: V2→V1 자동 폴백 래퍼 (speechToTextWithDiarizationAuto)
- 백엔드: Speech Adaptation 도메인 용어 힌트 (블라인드/스크린 등 22개)
- 백엔드: V2 SentencePiece 토큰 자동 감지 분기 처리
- 설정: config/services.php에 google.location 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:01:37 +09:00
김보곤
04cec477aa fix:화자분리 SentencePiece 토큰 깨짐 수정
- ▁(U+2581) 문자를 _(U+005F)와 별도로 처리
- SentencePiece 토큰 결합 로직 추가 (joinSentencePieceTokens)
  - ▁로 시작하는 토큰: 새 단어 → 공백 추가
  - ▁없는 토큰: 이전 단어에 직접 붙임
- cleanSttText에서 ▁→공백 변환 추가
- 프론트엔드에서도 ▁ 문자 정제 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:39:50 +09:00
김보곤
1d901501ab fix:회의록 언더스코어 노이즈 완전 제거
- GoogleCloudService: 단어 내부/앞뒤 _ 모두 제거 + cleanSttText 헬퍼
- MeetingMinuteService: 세그먼트 저장 시 _ 제거
- 프론트엔드: 대화기록/스크립트 탭 표시 시에도 _ 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:19:03 +09:00
김보곤
b4f5d1ff1a fix:회의록 화자 텍스트에서 __ 노이즈 문자 제거
- GoogleCloudService: STT 결과에서 언더스코어만으로 구성된 단어 필터링
- 프론트엔드: 기존 저장된 데이터 표시 시에도 언더스코어 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:13:01 +09:00
김보곤
9d314a62fa feat:공사현장 사진대지 멀티행(N행) 사진 지원
- ConstructionSitePhotoRow 모델 추가
- 부모 모델에서 사진 컬럼 제거, rows() 관계 추가
- 서비스/컨트롤러에 행 추가/삭제 기능 추가
- 라우트를 행 기반 URL 구조로 변경
- 프론트엔드 멀티행 UI 전면 개편

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:04:09 +09:00
0e2de0002a feat(MNG): 채번 규칙 관리 기능 추가
- NumberingRule 모델, 서비스, 컨트롤러 추가
- API/Blade 라우트 등록
- CRUD + 미리보기 기능

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 16:00:08 +09:00
김보곤
c6498d4001 fix:최종처리일시에 바로빌 거래내역 최신일시 연결
barobill_bank_transactions에서 계좌번호 매칭(하이픈 제거)으로
최신 거래일시를 서브쿼리로 조회하여 fallback 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:43:07 +09:00
김보곤
bc4322c1f5 feat:거래처 등록 사업자등록증 OCR 기능 추가
- TradingPartnerOcrService 신규 생성 (Gemini Vision API 사업자등록증 OCR)
- TradingPartnerController에 ocr() 메서드 추가
- partners 라우트 그룹에 OCR 엔드포인트 추가
- 거래처 등록 모달에 이미지 드래그앤드롭 업로드 UI 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:18:51 +09:00
김보곤
b2fbd3d113 feat:회의록 자동 화자 분리(Phase 2) 구현 및 세그먼트 저장 에러 수정
- GoogleCloudService에 speechToTextWithDiarization 메서드 추가
- Google STT V1 diarizationConfig 활성화로 자동 화자 구분
- MeetingMinuteService에 processDiarization 메서드 추가
- POST /{id}/diarize 엔드포인트 및 라우트 추가
- 프론트엔드에 '화자 분리' 버튼 추가 (RecordingControlBar)
- saveSegments 컨트롤러에 try-catch 에러 핸들링 추가
- 빈 텍스트 세그먼트 필터링 로직 추가 (서버/클라이언트 양쪽)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 10:29:16 +09:00
김보곤
418aa0c469 feat:Tiro AI 스타일 회의록 작성 기능 추가 (음성인식+화자분리+AI요약)
- MeetingMinute/MeetingMinuteSegment 모델
- MeetingMinuteService (CRUD, GCS 업로드, Gemini AI 요약)
- MeetingMinuteController (11개 엔드포인트)
- React SPA Blade 뷰 (대화기록/스크립트 탭, AI 요약 사이드패널)
- Web Speech API 실시간 STT + 수동 화자 전환 + MediaRecorder 녹음

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 09:50:23 +09:00
김보곤
95fbbd4fff feat:공사현장 사진대지 GCS 업로드 시 AI 토큰 사용량 기록
AiTokenHelper::saveGcsStorageUsage 호출 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:41:32 +09:00
김보곤
16337a243d fix:tenant_id를 session에서 가져오도록 수정
Auth::user()->tenant_id → session('selected_tenant_id')

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:34:49 +09:00
2182f177f2 Merge remote-tracking branch 'origin/develop' into develop 2026-02-09 21:32:55 +09:00
김보곤
beff95b4e1 feat:공사현장 사진대지 기능 추가
모델, 서비스, 컨트롤러, React SPA 뷰, 라우트 추가
GCS 업로드/다운로드, 드래그앤드롭 사진 관리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:25:07 +09:00
8f20fa8163 feat:트리거 관리(4.4) + 파티션 관리(4.6) UI 구현
- TriggerManagementService: 테이블별 트리거 상태 조회/재생성/삭제
- PartitionManagementService: 파티션 현황 조회/추가/삭제 (보관기간 검증)
- triggers.blade.php: 트리거 상태 대시보드 + 개별/전체 재생성·삭제
- partitions.blade.php: 파티션 통계 + 추가/삭제 (초과분만)
- sub-nav: 감사 로그 목록/트리거 관리/파티션 관리 탭 내비게이션
- 라우트 6개 추가, 컨트롤러 6개 메서드 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 19:53:32 +09:00
김보곤
2c138a1135 feat:홈택스 분개 저장 구조 변경 (journal_entries → hometax_invoice_journals)
- HometaxInvoiceJournal 모델 신규 생성
- HometaxInvoice에 journals() 관계 추가
- HometaxController: 저장 로직 변경 + 조회/삭제 엔드포인트 추가
- HometaxSyncService: hasJournal 필드 추가
- 프론트엔드: 분개완료 상태 표시, 기존 분개 로드/수정/삭제 지원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:03:07 +09:00
김보곤
fa14a9fbec feat:AI 음성녹음 GCS 파일 다운로드 엔드포인트 추가
- GoogleCloudService에 downloadFromStorage 메서드 추가 (GCS REST API 사용)
- AiVoiceRecordingController에 download 메서드 추가 (스트림 응답)
- 다운로드 라우트 추가 (GET /{id}/download)
- 파일명은 제목 기반으로 생성, Content-Disposition 헤더 설정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:51:09 +09:00
김보곤
d121a319b3 feat:GCS 업로드/STT 사용량 토큰 기록 추가
- AiTokenHelper: saveGcsStorageUsage(), saveSttUsage() 메서드 추가
- GoogleCloudService: uploadToStorage 반환값 배열로 변경 (uri + size)
- AiVoiceRecordingService: GCS/STT 각각 토큰 사용량 기록
- MeetingLogService: uploadToStorage 반환값 변경 대응

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:45:50 +09:00
김보곤
b25b7c57f1 fix:AI 음성녹음 STT 디버그 로그 추가
- processAudio STT 시작/결과 로그 추가
- GoogleCloudService STT 폴링 토큰 실패 로그 추가
- STT 요청 응답 및 완료 로그 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:36:17 +09:00
김보곤
af344bcc60 feat:AI 음성녹음 실시간 음성인식 및 카테고리 선택기 추가
- Web Speech API로 녹음 중 실시간 텍스트 표시
- 인터뷰 카테고리/템플릿 선택 드롭다운 추가
- 녹음/파일업로드 시 interview_template_id 전달

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:15:46 +09:00
김보곤
5fe6afd9c4 feat:AI 음성녹음 기능 추가
- AiVoiceRecording 모델 (상태 상수, 접근자)
- AiVoiceRecordingService (GCS 업로드, STT, Gemini 분석 파이프라인)
- AiVoiceRecordingController (CRUD, 녹음 처리, 상태 폴링)
- React 블레이드 뷰 (녹음 UI, 파일 업로드, 목록, 상세 모달)
- 라우트 추가 (system/ai-voice-recording)
- 메뉴 시더에 AI 음성녹음 항목 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 12:52:37 +09:00
김보곤
bb81d07d61 feat:전체 AI 서비스에 토큰 사용량 기록 추가
- AiTokenHelper 공통 헬퍼 생성 (Gemini/Claude 응답 파서)
- BizCertOcrService (Claude) 토큰 기록 추가
- BusinessCardOcrService (Gemini) 토큰 기록 추가
- MeetingLogService (Claude) 토큰 기록 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 11:27:53 +09:00
김보곤
32cbef9ae3 feat:인터뷰 시나리오 MD 파일 업로드 일괄 생성 기능
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 21:42:14 +09:00
김보곤
a507f7dc69 feat:인터뷰 시나리오 관리 기능 추가
- InterviewScenarioController: 카테고리/항목/질문 CRUD + 세션 관리 API
- InterviewScenarioService: 비즈니스 로직 (트리 조회, 세션 시작/토글/완료)
- MNG 모델 5개: InterviewCategory, InterviewTemplate, InterviewQuestion, InterviewSession, InterviewAnswer
- React 뷰: 2-패널 레이아웃 (카테고리 사이드바 + 항목/질문 관리)
- 인터뷰 실시 모달: 카테고리 선택 → 체크리스트 → 완료
- 인터뷰 기록 모달: 기록 목록 + 상세 보기
- InterviewMenuSeeder: 영업관리 > 인터뷰 시나리오 메뉴 추가
- 라우트 18개 추가 (sales/interviews/api/*)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 21:01:35 +09:00
김보곤
82b3d6b06d fix:자금일정 요약 완료금액 표시 오류 수정
- completed_amount가 null/0인 경우 amount로 fallback 처리
- 수입/지출 모두 동일하게 적용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:37:41 +09:00
김보곤
471ec88357 feat:자금계획일정 월별 복사 기능 추가
- POST /api/admin/fund-schedules/copy 엔드포인트 추가
- FundScheduleService에 copySchedulesToMonth() 메서드 추가
- 월 네비게이션 옆 일정복사 버튼 및 모달 UI 구현
- 날짜 조정 로직 (31일→28/29/30일) 포함

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 08:42:21 +09:00
김보곤
0fbeabc892 fix:테넌트 영구삭제 시 FK 체크 임시 비활성화로 제약조건 오류 해결 2026-02-04 21:52:56 +09:00
김보곤
0fd5173e43 fix:테넌트 영구삭제 시 역할 하위 참조 데이터 선 삭제 2026-02-04 21:51:47 +09:00
김보곤
806502768f fix:바로빌 API 응답 구조 수정 (CardEx, BankAccount)
- 카드 조회: CardInfoEx2 → CardEx로 수정 (실제 GetCardEx2 응답 구조)
- 계좌 조회: BankAccountInfoEx → BankAccount/BankAccountEx로 수정 (실제 GetBankAccountEx 응답 구조)
- EcardController, EaccountController의 응답 파싱 로직과 일치시킴

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 20:51:00 +09:00
김보곤
1d2d7d4bc7 fix:바로빌 계좌/카드 조회 API 응답 로깅 추가
- 디버깅을 위한 API 응답 상세 로깅 추가
- 데이터 타입 및 실제 응답 내용 로그 기록

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 20:49:47 +09:00
김보곤
cad77ce821 fix:바로빌 API 호출 시 회원사별 서버모드 적용
- getMemberUsage()에서 해당 회원사의 server_mode에 맞게 API 서버 전환
- 운영 모드 회원사는 운영 서버로, 테스트 모드 회원사는 테스트 서버로 조회
- 등록 계좌/카드 수가 0으로 표시되는 문제 해결

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 20:47:49 +09:00
김보곤
d4fb2582fd fix:바로빌 사용량 조회 운영모드 필터 및 건수 집계 구현
- 테스트 모드 제외하고 운영(production) 모드만 조회하도록 필터 추가
- getTaxInvoiceCount(): HometaxInvoice 테이블에서 매출 세금계산서 건수 카운트
- getHometaxCount(): HometaxInvoice 테이블에서 매입/매출 전체 건수 카운트
- 기존 TODO로 표시된 메서드 구현 완료

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 20:44:56 +09:00
김보곤
ac66e36294 feat:홈택스 세금계산서 로컬 저장 및 동기화 기능 구현
- HometaxInvoice 모델 생성 (로컬 DB 조회/저장)
- HometaxSyncService 서비스 생성 (API 데이터 동기화)
- HometaxController에 로컬 조회/동기화 메서드 추가
- 라우트 추가: local-sales, local-purchases, sync, update-memo, toggle-checked
- UI: 데이터소스 선택 (로컬 DB/바로빌 API), 동기화 버튼 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:13:18 +09:00
김보곤
12c6175470 refactor:용어 변경 - 가입비 → 개발비
영업 관련 코드 및 문서 전체에서 "가입비"를 "개발비"로 변경
- 컨트롤러, 서비스, 모델
- 뷰 템플릿 (blade 파일)
- 가이드북 문서 (마크다운)
- 설정 파일

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:20:09 +09:00
김보곤
268b881157 feat:영업파트너 수당 현황에 1차/2차 분할 지급 현황 추가
- 가입비 수당 50%씩 1차/2차 분할 지급 현황 시각화
- 각 단계별 납입대기/지급예정/지급완료 상태 표시
- 진행률 바로 지급 완료 비율 표시
- 수당 지급 프로세스 안내 추가

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-03 14:24:15 +09:00
0f02acf39d Merge remote-tracking branch 'origin/develop' into develop 2026-02-03 14:10:36 +09:00
5dd580623e feat:통계 대시보드 페이지 신규 구현 (/stats/dashboard)
- 모델 7개: StatSalesDaily, StatFinanceDaily, StatProductionDaily,
  StatInventoryDaily, StatSystemDaily, StatSalesMonthly, StatFinanceMonthly
- DashboardStatService: 요약카드, 7일 추이차트, 알림, 월간요약 데이터
- StatDashboardController: HX-Redirect 패턴 적용
- 뷰: 요약카드 6개 + Chart.js 4개 차트 + 알림/월간요약 하단섹션
- 기존 대시보드 "통계 및 리포트" 바로가기 링크 연결
- 헤더 테넌트 선택 기준 전체/개별 테넌트 필터링 지원

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:03:58 +09:00
김보곤
86fa750217 fix:프로필 이름 수정 권한을 최고관리자로 제한 2026-02-03 14:01:49 +09:00
김보곤
425e0e79d6 refactor:바로빌 서버 모드를 회원사별 개별 설정으로 변경
기존 전역 세션 기반 서버 모드 → 회원사별 개별 설정 방식으로 변경

주요 변경사항:
- BarobillMember 모델: server_mode 필드 및 accessor 추가
- BarobillService: switchServerMode() 메서드 추가 (동적 서버 전환)
- BarobillMemberController: 회원사별 서버 모드 변경 API 추가
- 회원사 목록 테이블: 서버 모드 컬럼 추가 (클릭 시 변경 모달)
- 서버 변경 확인 모달: 요금 부과 경고 및 동의 체크박스 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:48:13 +09:00
김보곤
56aa538b3b feat:바로빌 테스트/운영 서버 선택 기능 추가
- 회원사 관리 페이지에 서버 선택 토글 UI 추가
- 서버 모드 전환 API 추가 (GET/POST /api/admin/barobill/members/server-mode)
- BarobillService에서 세션 기반 서버 모드 읽기 지원
- 선택한 서버 설정이 바로빌 API 호출에 적용됨

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:40:35 +09:00
김보곤
e1c1b93fd2 fix:카드사용내역 기본 제공 3장→5장으로 정책 변경 2026-02-02 21:03:17 +09:00
김보곤
ced9110f3b refactor:영업파트너 역할 2개로 단순화 (recruiter 제거)
- 역할: sales(영업파트너), manager(상담매니저) 2개만 유지
- recruiter(유치담당) 역할 완전 제거
- 역할 레이블 변경: 영업→영업파트너, 매니저→상담매니저
- 통계, 필터, 역할관리 UI 모두 업데이트

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:43:02 +09:00
김보곤
a830fa7969 fix:영업파트너 관리에서 비활성 파트너도 목록에 표시
- is_active 필수 조건 제거 (관리 목적으로 비활성 파트너도 표시)
- is_active 필터 옵션 추가 (필요 시 활성 상태로 필터링 가능)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:33:03 +09:00
김보곤
06a0146b12 fix:영업파트너 목록에서 비활성화된 사용자 제외
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 09:26:16 +09:00
김보곤
7830c0b38f fix:개발 승인 화면 영업/매니저 이름 표시 개선
- 가망고객(prospect) 모드에서 영업담당자 이름이 나오도록 수정
- tenantProspect.registeredBy 관계 eager loading 추가
- 매니저가 없으면 영업담당자 이름으로 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:58:50 +09:00
김보곤
d17b1de03d fix:개발 승인 화면에서 가망고객 정보 매핑 지원
- tenantProspect 관계 eager loading 추가
- tenant가 없으면 tenantProspect에서 정보 가져오기
  - 업체명: company_name
  - 사업자번호: business_number
  - 대표자: ceo_name (prospect) / representative_name (tenant)
  - 연락처: contact_phone (prospect) / phone (tenant)
  - 주소: address
- pending/progress/completed/detail 모든 화면 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:54:50 +09:00