Commit Graph

604 Commits

Author SHA1 Message Date
김보곤
f73e8a18a1 fix:입출금내역 저장 시 decimal:2 cast dirty 감지로 인한 unique 제약조건 위반 수정
Eloquent 모델의 decimal:2 cast가 balance를 dirty로 잘못 감지하여
UPDATE 시 balance가 포함되면서 unique 제약조건 위반 발생.
Query Builder(DB::table)로 변경하여 지정 필드만 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:35:04 +09:00
김보곤
13f2e1df73 fix:입출금내역 상대계좌예금주명 저장 후 원복되는 문제 수정
인라인 편집으로 cast 저장 시 override 테이블의 modified_cast가
메인 테이블 값보다 우선하여 이전 값이 표시되는 문제.
save() 후 override의 modified_cast를 동기화(제거)하여 충돌 방지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:25:00 +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
김보곤
d4ff6dae25 fix:일일자금일보 중복 제거 키에 balance 추가하여 동일 금액 다른 거래 구분
계좌 입출금내역과 동일한 문제: balance 없이 중복 제거하면
같은 출금금액의 서로 다른 거래가 하나로 합쳐지는 문제 수정.
BankTransaction 모델의 unique_key 속성(balance 포함)을 재사용.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:17:09 +09:00
김보곤
20568765e0 fix:계좌 입출금내역 저장 키값에 balance 추가하여 동일 금액 다른 거래 구분
같은 출금금액이라도 잔액(balance)이 다르면 별도 거래로 인식하도록 개선.
기존에는 balance 없이 매칭하여 김종성/곽형석 등 다른 거래가 같은 키로 인식되는 문제 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:39:16 +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
김보곤
d7a656a047 feat:음성입력 STT 사용량 AI 토큰 추적 연동
logSttUsage 엔드포인트 추가, 녹음 종료 시 duration 전송
AI 토큰 사용량에 '공사현장사진대지-음성입력' 카테고리로 기록

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:54:30 +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
김보곤
64ac667cfd fix:계좌 입출금내역 상대계좌예금주명/적요 업데이트 누락 수정
기존 거래 업데이트 시 cast(상대계좌예금주명), summary(적요)가
업데이트 대상에서 빠져있어 저장되지 않던 문제 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:46:57 +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
김보곤
943648169a fix:홈택스 분개 차/대 토글 기능 추가 및 저장 오류 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 16:25:16 +09:00
김보곤
4c9daf3633 fix:부가세 카드매입 분개 이중계산 버그 수정
분개가 있는 카드거래의 unique_key가 금액 변경/수동입력으로
달라질 경우 매칭 실패하여 원본+분개 이중 집계되는 문제 수정.
금액을 제외한 부분키(card_num|use_dt|approval_num)로
보조 매칭하여 분개가 있으면 원본 금액을 사용하지 않도록 개선.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 15:05:39 +09:00
김보곤
71ba63c570 feat:주일기업 기획 메뉴 추가 (견적/입찰/공사관리, 프로젝트관리/기성청구)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:18:51 +09:00
f24a084152 Merge remote-tracking branch 'origin/develop' into develop 2026-02-09 10:46:09 +09:00
김보곤
89a5c7000d fix:법인차량 총 주행거리에 운행기록 합산 반영
- 기존: 초기 주행거리(mileage)만 표시
- 변경: 초기 주행거리 + vehicle_logs.distance_km 합계 = total_mileage
- 요약 카드, CSV 다운로드 모두 total_mileage 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:55:27 +09:00
김보곤
b204e73ada feat:부가세 관리 구분 6개로 확장 (전자/종이세금계산서 분리)
- 매출(세금계산서) → 매출(전자세금계산서) + 매출(종이세금계산서) 분리
- 매입(세금계산서) → 매입(전자세금계산서) + 매입(종이세금계산서) 분리
- 매입(카드) → 매입(신용카드) 명칭 변경
- 요약 테이블 6행으로 확장, 필터 드롭다운 업데이트
- 컨트롤러 stats에 hometaxSales/manualSales/manualPurchase 분리 반환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:46:21 +09:00
김보곤
4ed902e846 feat:AI 토큰 단가 설정 UI 및 DB 조회 연동
- AiPricingConfig 모델 추가 (캐시 적용 단가/환율 조회)
- AiTokenUsageController에 pricingList/pricingUpdate 메서드 추가
- AI 토큰 사용량 페이지에 설정 버튼 + 모달 UI 추가
- AiTokenHelper 하드코딩 단가를 DB 조회로 변경
- pricing 라우트 추가 (GET/PUT)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:33:56 +09:00
0316c63d3c feat:DB 트리거 감사 로그 관리 화면 구현
- TriggerAuditLog 모델 (casts, accessors, scopes)
- TriggerAuditController (목록/상세/이력/롤백 미리보기/롤백 실행)
- index: 대시보드 통계 + 필터 + 목록 + 파티션 현황
- show: old/new diff 뷰 (변경 컬럼 하이라이트)
- history: 레코드별 변경 타임라인
- rollback-preview: SQL 미리보기 + 확인 후 실행
- 라우트 5개 등록, 메뉴 시더 (시스템 관리 > DB 변경 추적)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 08:55:18 +09:00
김보곤
6d02cc5e5e feat:상세모달에 브라우저 내장 오디오 플레이어 추가
- DetailModal에 <audio> 태그 기반 재생기 추가 (다운로드 없이 바로 재생)
- 다운로드 엔드포인트에 ?inline=1 파라미터 지원 (스트리밍 재생용)
- Content-Length, Accept-Ranges 헤더 추가
- 플레이어 옆 다운로드 버튼 배치

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:24:59 +09:00
김보곤
29a670522a fix:음성파일 다운로드 한글 파일명 및 확장자 수정
- Str::slug()이 한글을 제거하는 문제 수정
- 한글 파일명 그대로 유지 (파일시스템 금지문자만 치환)
- RFC 5987 filename*=UTF-8'' 헤더로 브라우저 호환성 확보
- 다운로드 파일명 예시: 무제 음성녹음.webm

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:20:57 +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
김보곤
55f604ce6f feat:AI 토큰 사용량 관리 화면 추가
- AiTokenUsageController (index, list) 생성
- AiTokenUsage 모델 생성
- React 기반 토큰 사용량 조회 페이지 (필터, 통계, 페이지네이션)
- 라우트 추가 (system/ai-token-usage)
- AiTokenUsageMenuSeeder 메뉴 시더 생성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 09:57:25 +09:00
김보곤
d6cf587bc9 fix:고객관리 필터 버튼 정리 (영업중/완료/인계완료)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:59:55 +09:00
김보곤
0ac8b3ee9b feat:가망고객 상태 토글 기능 추가 (영업중 ↔ 완료)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:41:04 +09:00
김보곤
cebc1262b6 feat:수당지급일 입력 시 개발상태 인계 여부 검증 안전장치 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:26:25 +09:00
김보곤
71065ca91a feat:납입일 입력 시 수당지급일 자동 계산 (익월 10일)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:23:35 +09:00
김보곤
a337b7afb4 feat:수퍼관리자 가망고객 삭제 기능 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:18:54 +09:00
16fb78fe5e feat: 문서 양식 관리 및 수입검사 양식 개선
- 문서 양식 API 컨트롤러 및 뷰 개선
- 수입검사 양식 시더 업데이트
- 문서 미리보기 뷰 개선

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 03:27:32 +09:00
b1b4070fe4 Merge remote-tracking branch 'origin/develop' into develop 2026-02-06 22:16:37 +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
5063e2933e Merge remote-tracking branch 'origin/develop' into develop 2026-02-06 20:23:09 +09:00
김보곤
f34bcce0e0 fix:홈택스 수동입력 수정 validation 오류 해결
- corp_name 필드 sometimes→nullable 변경 (null 전달 시 string 오류 방지)
- tax_amount nullable 처리, 미입력 시 0
- 한글 validation 메시지 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 19:45:07 +09:00
김보곤
3f2c8a013b fix:홈택스 수동입력 세액 필수 제거, 미입력시 0 처리
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 19:42:52 +09:00
김보곤
f24287cafa fix:홈택스 수동입력 validation 오류 메시지 한글화
validation.required 대신 필드별 한글 오류 메시지 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 19:38:41 +09:00
김보곤
9cf9576781 fix:홈택스 수동입력 저장 시 NOT NULL 오류 수정
invoicer_corp_name, invoicee_corp_name에 null coalescing 추가
매출 입력 시 invoicer 필드가 null로 전달되어 DB NOT NULL 제약 위반 발생

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 19:36:34 +09:00
김보곤
a30489f1a8 fix:일일자금일보 중복 제거 시 최신 레코드(정확한 잔액) 유지
- orderBy id DESC로 먼저 정렬하여 unique() 시 최신 ID 유지
- 중복 제거 후 날짜+시간 기준으로 재정렬

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 18:01:44 +09:00
김보곤
eaa3490c9a fix:일일자금일보 중복 제거 키에서 balance 제외
- 같은 거래가 잔액만 다르게 저장된 경우도 중복으로 인식하도록 수정
- save() upsert에서도 balance 제외하여 향후 중복 방지
- 기존 레코드 발견 시 balance도 갱신

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 17:59:21 +09:00
김보곤
e9466344c9 fix:일일자금일보 거래 중복 표시 및 잔액 NaN 버그 수정
- periodReport에서 동일 거래(계좌+일시+금액) 중복 제거 로직 추가
- EaccountController save() 금액 비교를 정수 캐스트로 변경하여 decimal 정밀도 차이 중복 방지
- 합계행 잔액 계산 시 Number() 캐스트로 NaN 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 17:55:27 +09:00