Commit Graph

37 Commits

Author SHA1 Message Date
김보곤
53a851740a feat: [juil] 업무 Workflow 분기형 UI 구현
- 입찰 참여 기업 / 수의계약 기업 두 경로로 분기
- A경로: 영업 → 견적서 작성 → 입찰 참여 → 수주/계약
- B경로: 영업 → 견적서 작성 → 수주/계약 (입찰 생략)
- 분기/합류 시각적 연결선으로 표현
- 수주/계약 이후 공통 프로세스로 합류
2026-03-05 21:28:07 +09:00
김보곤
106e654cbd fix: [juil] 업무 Workflow 프로세스 순서 수정
- 영업/수주 → 영업 (수주는 견적 이후로 이동)
- 순서 변경: 영업 → 입찰 참여 → 견적서 작성 → 수주/계약
- 입찰 참여를 선택적 단계로 변경 (소규모/수의계약 시 생략 가능)
- 분기 표시: 대형/공공 vs 소규모/수의계약 경로 안내
2026-03-05 21:18:56 +09:00
김보곤
e28077745f feat: [juil] 업무 Workflow 상세 모달 추가
- 각 워크플로우 단계 클릭 시 상세 업무 모달 표시
- 서브플로우 4단계 (단계별 아코디언 펼침)
- Input/Output, 담당자, 소요시간, TIP 정보 포함
- 미니 서브플로우 다이어그램으로 단계 간 이동 가능
2026-03-05 20:00:04 +09:00
김보곤
2658b44618 feat: [juil] 업무 Workflow 플로우차트 메뉴 추가
- 주일기업 기획 하위 '업무 Workflow' 메뉴 추가
- 11단계 업무처리과정 인터랙티브 플로우차트 구현
- 각 단계 클릭 시 상세정보(담당부서, 필요서류, SAM 연동) 표시
2026-03-05 19:41:43 +09:00
김보곤
56d060a37d refactor:React CDN을 공통 partial로 통합
- 새 파일: resources/views/partials/react-cdn.blade.php
- 모든 React 페이지에서 중복된 CDN 스크립트를 @include('partials.react-cdn')로 대체
- 30개 파일 업데이트 (finance, juil, system, sales)
- 유지보수성 향상: CDN 버전 변경 시 한 곳만 수정
2026-02-12 10:34:48 +09:00
김보곤
9ae6890141 feat:실시간 자동 화자 감지 시스템 구현 (Spectral Centroid 기반)
- Web Audio API rawAnalyser를 오디오 체인에 삽입 (compressor 이전, 원본 신호 분석)
- Spectral Centroid + VAD 기반 100ms 간격 실시간 화자 분류 엔진 구현
- 500ms 윈도우 다수결 투표로 화자 안정성 확보
- 수동 화자 선택 버튼 제거 → 자동 감지 인디케이터로 대체
- 최대 4명까지 자동 화자 프로필 등록 및 speakers 동기화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:48:20 +09:00
김보곤
da278b7422 fix:화자분리 정확도 개선 - 이중 녹음 방식 적용
DynamicsCompressor가 모든 화자의 음량을 동일하게 압축하여
화자 음성 특성이 파괴되는 문제 해결:
- MediaRecorder 1 (처리된 스트림): 실시간 Web Speech API용
- MediaRecorder 2 (원본 스트림): GCS 업로드 → 화자분리용
- 원본 오디오가 화자 음성 특성을 보존하여 분리 정확도 향상

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:18:16 +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
김보곤
55b5ab6d1d fix:편집 모드 진입 시 SentencePiece 노이즈 정제
- startEditingSegments에서 ▁(U+2581) 문자 제거 후 편집 시작
- DB에 이미 저장된 노이즈 문자도 편집 시 깨끗하게 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:42:58 +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
김보곤
5a523acaa3 feat:회의록 대화 기록 편집 기능 추가
- 대화 기록 탭에서 텍스트, 화자 변경, 세그먼트 삭제 가능
- 편집/저장/취소 버튼을 탭 바에 배치
- 자동 높이 조절 textarea 컴포넌트 추가
- 녹음 중에는 편집 버튼 숨김

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 20:32:07 +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
김보곤
ae58f11179 fix:사진 행 추가/삭제 버튼 수정모드에서만 활성화
- 수정 모드일 때만 행 추가/삭제 버튼 활성화
- 신규 생성 후 자동으로 수정 모드 진입

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 19:42:57 +09:00
김보곤
6fb939810b fix:사진대지 수정 모드 작업일자 표시 오류 수정
work_date ISO 형식에서 YYYY-MM-DD만 추출하여 date input에 바인딩

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:11:17 +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
김보곤
1cc87ecc27 fix:음성 미리보기 패널이 모달에서 잘리는 현상 수정
VoiceInputButton 프리뷰 패널을 absolute → fixed 포지셔닝으로 변경
- 모달의 overflow-y-auto에 의한 클리핑 완전 우회
- 버튼 위치 기반으로 fixed 좌표 계산하여 항상 버튼 상단에 표시
- z-index 9999로 모든 요소 위에 렌더링

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:43:28 +09:00
김보곤
9faf859419 feat:공사현장 사진대지 클라이언트 측 이미지 압축 추가
업로드 전 Canvas API로 이미지를 리사이즈+압축하여 GCS 저장 용량 절감
- 최대 너비 1920px 리사이즈 (비율 유지)
- JPEG 품질 80% 압축
- 압축 결과가 원본보다 크면 원본 유지 (안전장치)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:43:28 +09:00
김보곤
77c412367a fix:회의록 녹음 중지 후 자동 화자 분리 실행
녹음 중지 시 오디오 업로드 → 자동 화자 분리(Google Cloud STT)
→ 자동 AI 요약 순서로 진행하도록 변경
기존에는 수동으로 "화자 분리" 버튼을 눌러야 했음

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:09:44 +09:00
김보곤
7af96006f8 fix:회의록 레이아웃 화면 전체 너비로 변경
max-w-6xl mx-auto 제거하여 전체 너비 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:49:31 +09:00
김보곤
beae44db24 fix:회의록 수동 AI 요약 시 세그먼트 먼저 저장하도록 수정
수동으로 '요약 실행' 클릭 시 로컬 세그먼트가 서버에 저장되지 않아
full_transcript가 비어있어 '요약할 텍스트가 없습니다' 에러 발생.
요약 API 호출 전에 로컬 세그먼트를 먼저 서버에 저장하도록 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:17:59 +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
김보곤
0f312bcf77 fix:회의록 상세 레이아웃 높이 조정 (하단 녹음바 잘림 해결)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 10:18:05 +09:00
김보곤
60daac465f fix:회의록 AI 요약 버튼 대화 내용 없을 때 모달 안내 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 10:13:38 +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
김보곤
8b0f78f364 fix:모달 내 사진 업로드/삭제 시 배경 리스트 갱신 지연
- 모달에서 사진 업로드/삭제/수정 시 배경 리스트 fetchList() 제거
- modalDirtyRef로 변경 여부 추적
- 모달 닫힐 때만 dirty 상태면 리스트 한 번 갱신
- 카드 많을 때 불필요한 리렌더링으로 인한 성능 저하 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 09:03:19 +09:00
김보곤
969976ad6b refactor:음성입력 STT 스트리밍 프리뷰 규칙 적용 (finalizedSegments 기반)
- interim 텍스트: italic + gray (수정 가능)
- final 텍스트: normal weight + solid color (영구 저장, 삭제 불가)
- finalizedSegments 배열로 확정 텍스트 누적 관리
- 고정 line-height(1.6)으로 부드러운 전환
- 녹음 종료 후 2초 dismiss 타이머

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 08:59:07 +09:00
김보곤
5b35938abe fix:음성입력 미리보기 개선 - 텍스트 잘림/깜빡임 방지
- 말풍선 max-w 확대 + 줄바꿈 허용 (truncate 제거)
- final 결과 시 녹색 말풍선으로 1.2초 유지 후 페이드
- interim→final 전환 시 깜빡임 없이 자연스럽게 연결
- 인식 중 노란 점 애니메이션, 확정 시 체크 아이콘

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:03:43 +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
김보곤
e638d97d65 feat:음성입력 실시간 미리보기 + 재클릭 중지 기능
continuous 모드로 변경, interimResults로 실시간 텍스트 표시
녹음 중 버튼 재클릭 시 중지, 아이콘 정지 모양으로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:52:45 +09:00
김보곤
e1a9910939 feat:현장명/설명 음성입력(STT) 버튼 추가
Web Speech API 기반 음성→텍스트 변환
신규등록/수정 모드에서만 마이크 버튼 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:49:02 +09:00
김보곤
18150e1b82 fix:CSRF 토큰 누락 수정 (apiFetch headers 덮어쓰기 문제)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:33:45 +09:00
김보곤
ed2d3425b7 fix:Toast 컴포넌트 이름 충돌 수정
레이아웃의 전역 Toast(SweetAlert)와 이름 충돌 → ToastNotification으로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 21:30:30 +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
김보곤
313ed15e7e fix:Toast 컴포넌트명 충돌 수정 (레이아웃 SweetAlert2 Toast와 중복)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:32:31 +09:00
김보곤
9935906465 fix:Blade @verbatim 추가 - JSX 이중 중괄호 파싱 오류 수정
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:31:38 +09:00
김보곤
71ba63c570 feat:주일기업 기획 메뉴 추가 (견적/입찰/공사관리, 프로젝트관리/기성청구)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:18:51 +09:00