Commit Graph

1298 Commits

Author SHA1 Message Date
김보곤
203d52300a fix:계약 생성 폼 UX 전면 개선
- max-w-3xl 제거하여 전체 너비 사용
- flex 기반 반응형 레이아웃 (PC: 한 행, 모바일: 자동 줄바꿈)
- 이름(1):이메일(2.5):전화번호(1) flex-grow 비율 적용
- 작성자/상대방을 하나의 카드에 통합 (구분선으로 분리)
- SignerRow 컴포넌트 분리로 중복 제거
- 서명자 컬러 표시 (파란색: 작성자, 빨간색: 상대방)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:33:26 +09:00
김보곤
ebee3f195c fix:계약 생성 폼 이름/이메일/전화번호 항상 한 행 표시
- md: breakpoint 제거하여 항상 grid-cols-8 적용
- 사이드바 포함 레이아웃에서도 한 행으로 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:31:16 +09:00
김보곤
5c39369530 fix:계약 생성 폼 이름/이메일/전화번호 너비 비율 조정
- 이름 25% : 이메일 50% : 전화번호 25% (grid-cols-8 기반 2:4:2)
- 작성자, 상대방 섹션 모두 동일 적용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:30:02 +09:00
김보곤
79c23f3337 feat:E-Sign 필드 템플릿 저장/불러오기 및 계약 간 복사 기능
- EsignFieldTemplate, EsignFieldTemplateItem 모델 추가
- EsignApiController에 템플릿 CRUD + 적용/복사 메서드 5개 추가
- web.php에 템플릿 라우트 5개 추가
- fields.blade.php에 템플릿 드롭다운 메뉴 + 모달 3개 추가
  (SaveTemplate, LoadTemplate, CopyFromContract)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:02:31 +09:00
김보곤
4f25e0e4a1 fix:서명 완료 후 다음 서명자 자동 알림 발송 추가
- submitSignature: 첫 번째 서명자 완료 시 다음 서명자에게 자동 이메일 발송
- send: sign_order_type이 parallel이면 모든 서명자에게 동시 발송

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:46:57 +09:00
김보곤
405bc1db3e fix:sign.blade.php 주석 내 Blade 파싱 충돌 수정
주석의 {{ }} 텍스트를 Blade가 PHP 코드로 해석하여 ParseError 발생

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:41:06 +09:00
김보곤
df237140a3 fix:E-Sign 서명 페이지 Blade/JSX 충돌 수정 및 내부 API 전환
- sign.blade.php: style={{}} → STYLES 상수로 Blade {{ }} 파싱 충돌 해결
- sign.blade.php, done.blade.php: 외부 API 호출 → MNG 내부 엔드포인트로 변경
- EsignPublicController: submitSignature, rejectContract, downloadDocument 추가
- routes/web.php: submit, reject, document API 라우트 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:38:21 +09:00
김보곤
45e6afb862 feat:E-Sign 서명 인증을 MNG 자체 API로 전환
기존: 브라우저 → 외부 API 서버(api.codebridge-x.com) 호출
변경: 브라우저 → MNG 자체 엔드포인트(/esign/sign/{token}/api/*) 호출

- EsignPublicController에 getContract/sendOtp/verifyOtp API 추가
- auth.blade.php에서 외부 API 호출을 MNG 자체 API로 변경
- EsignOtpMail Mailable + 이메일 템플릿 추가
- CSRF 예외에 esign/sign/*/api/* 추가
- 로컬/서버 환경 모두에서 동작

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:26:28 +09:00
김보곤
9094a82f0a feat:E-Sign 서명 요청/리마인더 메일 발송 구현
- EsignRequestMail Mailable 클래스 추가 (리마인더 구분 지원)
- 이메일 HTML 템플릿 추가 (서명하기 버튼 + 계약 정보)
- send()에서 첫 번째 서명자에게 메일 발송
- remind()에서 다음 서명 대상자에게 리마인더 메일 발송

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:15:53 +09:00
김보곤
837fe42663 feat:E-Sign 리마인더 발송 라우트 및 컨트롤러 추가
detail.blade.php에서 호출하는 remind 엔드포인트가 누락되어 있었음.
POST /esign/contracts/{id}/remind 라우트 추가,
EsignApiController::remind() 메서드 구현 (상태 변경 + 감사 로그).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:10:16 +09:00
김보곤
4ff7bab2bb fix:EsignSignField 생성 시 tenant_id 누락 수정
configureFields()에서 서명 필드 생성 시 tenant_id 추가,
모델 $fillable에도 tenant_id 추가.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:04:56 +09:00
김보곤
376e1bf57e fix:EsignAuditLog 생성 시 tenant_id 누락 수정
모델 $fillable에 tenant_id 추가, 컨트롤러의 감사 로그 생성 3곳
(contract_created, contract_cancelled, sign_request_sent) 모두
tenant_id를 포함하도록 수정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:56:41 +09:00
김보곤
800ce2efba fix:E-Sign 계약 생성 한글 입력 시 포커스 풀림 수정
Input 컴포넌트가 App 내부에 정의되어 매 리렌더마다
새 컴포넌트로 인식 → DOM 재생성 → IME 조합 끊김 발생.
Input을 App 바깥으로 이동하여 안정적인 컴포넌트 참조 유지.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:45:23 +09:00
김보곤
f7c5bad879 feat:E-Sign 서명 필드 편집기 드래그앤드롭 업그레이드
- interact.js 기반 드래그 이동 + 8방향 리사이즈
- 3패널 레이아웃 (썸네일 | PDF뷰어 | 속성패널)
- PDF 페이지 썸네일 사이드바 + 필드 개수 뱃지
- 줌 컨트롤 (50%~200%, Ctrl+/-)
- Undo/Redo (Ctrl+Z/Shift+Z, 최대 50단계)
- 키보드 단축키 (화살표 미세조정, Delete 삭제, Ctrl+C/V 복붙)
- 스냅-투-그리드 토글 + 그리드 오버레이
- 서명자별 필드 타입 도구상자 (서명/도장/텍스트/날짜/체크박스)
- 선택 필드 속성 패널 (유형/라벨/좌표/필수여부)
- 백엔드 변경 없음, 기존 API 100% 호환

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:39:29 +09:00
김보곤
e6353dad08 feat:사용자 매뉴얼에 법률 안내 섹션 추가 및 용어 사전 보강
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 15:06:43 +09:00
김보곤
6629d3c595 fix:사용자 매뉴얼 OTP 설명 대폭 개선 (초보자 친화적)
- OTP 개념 설명 (택배 보관함 비유)
- 왜 필요한지 쉬운 설명
- 시각적 단계별 가이드 (6자리 입력 UI 포함)
- 주의사항 친절한 안내
- FAQ에 "코드가 안 올 때" 항목 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:45:30 +09:00
1969001338 feat(MNG):문서 양식 편집 개선 및 이미지 업로드 API 연동
- DocumentTemplateApiController: 이미지 업로드 API 파일저장소 연동
- 양식 편집: 미리보기 모달 개선
- 문서 편집: UI 개선
- 빌드 에셋 업데이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:30:16 +09:00
b3891e93b7 feat(MNG):작업일지 양식 시더 3종 생성
- WorkLogTemplateSeeder: 스크린/슬랫/절곡 공정별 작업일지 양식
- 공정별 결재라인, 기본필드(9개), 컬럼 구조 반영
- 판정 없음, 비고만 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:30:16 +09:00
791bb37a1d fix:문서 show/print 기본정보·종합판정·이미지 표시 수정
- 기본정보(bf_) 자동 backfill: show/print/edit 진입 시 bf_ 레코드 없으면 작업지시서 원본에서 resolve 후 저장
- 중간검사 DATA row 수를 section items → workOrderItems 기준으로 변경
- 종합판정: overall_result 없을 때 row_judgment에서 합격/불합격 자동 계산 fallback
- 섹션 이미지: asset() → API 스토리지 URL 변환 (api.sam.kr/storage/tenants/...)
2026-02-12 14:30:16 +09:00
김보곤
5f93edf34b refactor:전자계약 관련 용어를 SAM E-Sign으로 통일
- 전자계약 (E-Sign), 전자계약 대시보드, 전자계약 상세 등 → SAM E-Sign
- 9개 파일, 19곳 수정 (코드 식별자/URL은 유지)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:29:09 +09:00
김보곤
a15d5b3e9b feat:전자계약 문서에 사용자 매뉴얼 탭 추가
갑/을 역할별 단계별 가이드, FAQ 13개, 용어 사전 포함

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 14:22:45 +09:00
김보곤
e0e6c71701 feat:전자계약 문서 페이지 추가 (8개 탭 기반 기술 문서)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 13:23:56 +09:00
김보곤
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
김보곤
440cd11ece refactor:esign 페이지 및 전역 레이아웃 React CDN 통합
- esign 전자서명 관련 9개 파일 업데이트
- layouts/app.blade.php 업데이트
- fcm.js React 관련 변경사항 반영
2026-02-12 10:35:04 +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
김보곤
279a15bf0d refactor:E-Sign 외부 API 호출을 MNG 내부 라우트로 전환
- Finance 패턴과 동일하게 MNG 직접 DB 접근 방식으로 변경
- MNG 모델 4개 추가: EsignContract, EsignSigner, EsignSignField, EsignAuditLog
- EsignApiController 추가: stats, index, show, store, cancel, configureFields, send, download
- 모든 뷰(dashboard, create, detail, fields, send)에서 외부 API URL 제거
- 기존 X-API-Key/Bearer 인증 대신 MNG 세션 인증(CSRF) 사용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 10:24:09 +09:00
김보곤
e6a7252646 fix:E-Sign 라우트를 juil 그룹 밖으로 이동 (/esign URL 매칭)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 10:06:38 +09:00
김보곤
b11d4091b6 chore:Vite 빌드 결과물 추가 (CSS/JS 에셋)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 09:53:07 +09:00
김보곤
04c7be80ae feat:아이콘 픽커 개선 - 실시간 검색 + 182개 아이콘 + 카테고리 분류
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 09:53:02 +09:00
김보곤
3281788536 feat:E-Sign 전자계약 서명 솔루션 MNG 프론트엔드 구현
- 컨트롤러 2개 (EsignController, EsignPublicController)
- 뷰 8개 (dashboard, create, detail, fields, send, sign/auth, sign/sign, sign/done)
- React 하이브리드 방식 (기존 Finance 패턴)
- 라우트 추가 (인증 esign/* + 공개 esign/sign/*)
- PDF.js 기반 서명 위치 설정
- signature_pad 기반 전자서명 입력
- OTP 본인인증 플로우

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 07:02: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
김보곤
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
김보곤
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
김보곤
79ed88fd10 fix:STT V2 기본 리전을 싱가포르(asia-southeast1)로 변경
Chirp 2 지원 리전: us-central1, europe-west4, asia-southeast1
서울(asia-northeast3)은 Chirp 2 미지원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:04:13 +09:00
김보곤
4c360b3834 fix:STT V2 기본 리전을 서울(asia-northeast3)로 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:03:25 +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
김보곤
b0c4f18c2e feat:차량정비이력 비용 수정 모달에 복사 버튼 추가
기존 비용 데이터를 복사하여 새 비용으로 등록할 수 있는 기능
- 복사 클릭 시 폼 데이터 유지한 채 등록 모드로 전환
- 날짜만 오늘 날짜로 자동 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 17:43:28 +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
bc6bba0ab1 Merge remote-tracking branch 'origin/develop' into develop 2026-02-11 16:03:32 +09:00