# AI 업무 등록 및 리포트 시스템

모바일에서 텍스트 또는 음성으로 업무를 입력하고, 서버에서 AI 분석을 통해 신규 업무 등록, 기존 업무 업데이트, 담당자 배정, 일일 리포트 생성을 처리하는 업무 관리 시스템입니다.

## 기술 스택

- PHP 7.4
- Laravel 8
- MySQL
- 모바일 웹
- 서버 사이드 OpenAI API 연동

## 현재 상태

- Laravel 8 프로젝트 생성 완료
- `aa_work` DB 생성 및 마이그레이션 완료
- 업무 관리용 모델과 테이블 1차 구현 완료
- 모바일 텍스트 입력의 AI 자동 업무 등록 구현 완료
- 모바일 직접 녹음 UI 구현 완료
- 음성 파일 업로드 API 구현 완료
- 브라우저 녹음이 막히는 경우를 위한 음성 파일 업로드 fallback 구현 완료
- mock 음성 텍스트 변환 구현 완료
- 변환된 텍스트 검수 및 수정 저장 구현 완료
- mock AI 분석 payload 생성 및 응답 검증 구현 완료
- AI 분석 로그 저장 구현 완료
- AI 분석 결과를 실제 업무 생성 또는 기존 업무 업데이트로 반영하는 API 구현 완료
- 업무 반영 중복 방지 구현 완료
- 사람 등록 및 별칭 관리 구현 완료
- 담당자별 개인 업무 리스트 구현 완료
- 업무 담당자 넘기기 구현 완료
- 기능별 메뉴 분리 완료: 개요, 입력/AI, 사람, 업무, 확인 필요, 리포트
- 담당자 문구 정규화 매칭 구현 완료: `김민수에게`, `김민수대리는`, `김민수씨한테` 등
- 테스트 데이터 트랜잭션 격리 적용 완료
- 업무 검수 완료 처리 구현 완료
- 사람 수정 및 비활성화 관리 구현 완료
- 확인 필요 목록 구현 완료
- 전체/개인 일일 리포트 생성 및 조회 구현 완료
- 실제 OpenAI 분석 드라이버 기본 적용, 키 파일 연동, 토큰 사용량 기록 구현 완료
- 업무 마감 일시(`due_at`) 저장 및 표시 구현 완료
- Laragon Apache vhost `aa_work.test` 연결 완료
- 기획 문서와 개발 문서는 [docs/README.md](docs/README.md)에 정리

## 로컬 접속

브라우저에서 아래 주소를 엽니다.

```text
http://aa_work.test
```

## 로컬 PHP 실행

현재 로컬에서는 PHP 7.4 전체 경로로 명령을 실행합니다.

```powershell
C:\laragon\bin\php\php-7.4.33-nts-Win32-vc15-x64\php.exe artisan --version
```

Composer는 다음 방식으로 실행할 수 있습니다.

```powershell
C:\laragon\bin\php\php-7.4.33-nts-Win32-vc15-x64\php.exe C:\laragon\bin\composer\composer.phar --version
```

## 주요 문서

- [프로젝트 개요](docs/00-project-overview.md)
- [기능명세서](docs/01-functional-spec.md)
- [DB 스키마 v1](docs/09-db-schema-v1.md)
- [AI JSON Schema v1](docs/10-ai-json-schema-v1.md)
- [모바일 직접 녹음 설계](docs/15-mobile-voice-recording.md)
- [개발 착수 계획](docs/16-development-start-plan.md)
- [구현 로그](docs/17-implementation-log.md)

## 지금 테스트할 수 있는 것

1. `http://aa_work.test`에 접속합니다.
2. 빠른 업무 입력에 `김민수에게 내일 오후 3시 제안서 작성 업무 넣어줘`처럼 텍스트를 입력하고 `AI 자동 업무 등록`을 누릅니다.
3. 최근 원본 입력 상태가 `applied`가 되고 업무 메뉴에 담당자, 마감일, 마감 시간이 반영되는지 확인합니다.
4. `직접 녹음`에서 녹음 시작, 중지, 서버 업로드를 시도합니다.
5. 브라우저 보안 정책으로 녹음이 막히면 `음성 파일 테스트 업로드`로 음성 파일을 선택해 업로드합니다.
6. 최근 원본 입력에 `voice / received` 항목과 저장 경로가 표시되는지 확인합니다.
7. 음성 항목의 `텍스트 변환` 버튼을 누르면 변환문을 AI가 분석해 업무에 자동 반영하는지 확인합니다.
8. mock 변환문이 표시되면 내용을 수정하고 `변환문 저장`을 눌러 수정 텍스트 기준으로 다시 자동 반영되는지 확인합니다.
9. 수동 재처리가 필요하면 `AI 분석`, `업무 반영` 버튼으로 재실행할 수 있습니다.
10. 사람 등록에서 담당자를 추가하고, 개인 업무 리스트에 담당자별 업무가 묶이는지 확인합니다.
11. 최근 업무의 `업무 넘기기`로 담당자를 변경합니다.
12. `김민수에게`, `김민수대리는`, `김민수씨한테`처럼 다른 표현으로 입력해도 같은 담당자로 매칭되는지 확인합니다.
13. 업무 메뉴에서 `검수 완료`를 눌러 검수 필요 상태가 해제되는지 확인합니다.
14. 사람 메뉴에서 담당자 정보를 수정하거나 진행 중 업무가 없는 사람을 비활성화합니다.
15. 확인 필요 메뉴에서 검수 필요 업무와 실패 입력을 확인합니다.
16. 리포트 메뉴에서 전체 리포트 또는 담당자별 개인 리포트를 생성합니다.

## 메뉴

- `http://aa_work.test/`: 전체 개요
- `http://aa_work.test/inputs`: 입력/AI 처리
- `http://aa_work.test/people`: 사람 관리와 개인 업무 리스트
- `http://aa_work.test/tasks`: 전체 업무와 업무 넘기기
- `http://aa_work.test/reviews`: 확인 필요 업무와 실패 입력
- `http://aa_work.test/reports`: 전체/개인 일일 리포트

## 다음 작업

1. 실제 OpenAI API 연결 상태에서 업무 후보 검색 정확도 개선
2. 로그인/권한 적용
3. 운영 배포 설정 정리
