docs: PAAI 시스템 아키텍처 문서 추가
- PAAI 전체 흐름 다이어그램 - 구성 요소 (Trigger, WebSocket, API, 프린터) - WebSocket 이벤트 목록 - 자동인쇄/중복방지/재시도 로직 설명 - 로그 파일 위치
This commit is contained in:
parent
ebd4669d24
commit
a144a091b9
@ -420,6 +420,128 @@ OPENAI_MODEL=gpt-4o-mini
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤖 PAAI 시스템 (처방 AI 분석)
|
||||||
|
|
||||||
|
### 개요
|
||||||
|
|
||||||
|
**PAAI (Prescription AI Analysis)**는 처방 접수 시 자동으로 AI 분석을 수행하고,
|
||||||
|
분석 결과를 영수증 프린터로 출력하는 시스템입니다.
|
||||||
|
|
||||||
|
### 아키텍처
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ PAAI 시스템 흐름 │
|
||||||
|
└─────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ POS 접수 │────►│ PM_PRES_LOG │────►│ Trigger Module │
|
||||||
|
│ (처방입력) │ │ (MSSQL) │ │ (폴링 감지) │
|
||||||
|
└─────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
│
|
||||||
|
┌───────────────────────────────┤
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ WebSocket 알림 │ │ PAAI 분석 요청 │
|
||||||
|
│ (ws://8765) │ │ Flask API │
|
||||||
|
└─────────────────┘ └─────────────────┘
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ 프론트엔드 │ │ Claude API │
|
||||||
|
│ pmr.html │ │ (분석 수행) │
|
||||||
|
└─────────────────┘ └─────────────────┘
|
||||||
|
│ │
|
||||||
|
│◄──────────────────────────────┤
|
||||||
|
│ analysis_completed 이벤트
|
||||||
|
▼
|
||||||
|
┌─────────────────┐
|
||||||
|
│ 자동 인쇄 │
|
||||||
|
│ ESC/POS 프린터 │
|
||||||
|
└─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 구성 요소
|
||||||
|
|
||||||
|
| 모듈 | 위치 | 역할 |
|
||||||
|
|------|------|------|
|
||||||
|
| **Trigger Module** | `prescription-trigger/prescription_trigger.py` | PM_PRES_LOG 폴링, 처방 감지, 분석 요청 |
|
||||||
|
| **WebSocket Server** | Trigger 내장 (port 8765) | 프론트엔드에 실시간 이벤트 전송 |
|
||||||
|
| **PAAI API** | `backend/pmr_api.py` | 분석 요청 처리, Claude API 호출, 결과 저장 |
|
||||||
|
| **프론트엔드** | `backend/templates/pmr.html` | 조제관리 UI, 자동인쇄 토글 |
|
||||||
|
| **프린터 모듈** | `backend/paai_printer.py` | ESC/POS 영수증 프린터 출력 |
|
||||||
|
|
||||||
|
### WebSocket 이벤트
|
||||||
|
|
||||||
|
| 이벤트 | 방향 | 설명 |
|
||||||
|
|--------|------|------|
|
||||||
|
| `prescription_detected` | Server → Client | 새 처방 감지됨 |
|
||||||
|
| `analysis_started` | Server → Client | AI 분석 시작 |
|
||||||
|
| `analysis_completed` | Server → Client | 분석 완료 (결과 포함) |
|
||||||
|
| `analysis_failed` | Server → Client | 분석 실패 (에러 포함) |
|
||||||
|
|
||||||
|
### 자동 인쇄 흐름
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 1. WebSocket으로 analysis_completed 수신
|
||||||
|
ws.onmessage = (event) => {
|
||||||
|
const data = JSON.parse(event.data);
|
||||||
|
if (data.event === 'analysis_completed') {
|
||||||
|
// 2. 자동인쇄 ON 상태면 인쇄
|
||||||
|
if (window.autoPrintEnabled) {
|
||||||
|
printPaaiResult(data.pre_serial, data.patient_name, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 3. 인쇄 API 호출
|
||||||
|
POST /pmr/api/paai/print
|
||||||
|
{
|
||||||
|
"pre_serial": "20260305000099",
|
||||||
|
"patient_name": "홍길동",
|
||||||
|
"result": { "analysis": {...}, "kims_summary": {...} }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. ESC/POS 프린터로 출력
|
||||||
|
```
|
||||||
|
|
||||||
|
### 중복 방지
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// window.printedSerials (Set) 으로 중복 인쇄 방지
|
||||||
|
if (window.printedSerials.has(preSerial)) {
|
||||||
|
console.log('[AutoPrint] 이미 인쇄됨, 스킵:', preSerial);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.printedSerials.add(preSerial); // 요청 전에 추가 (race condition 방지)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 자동 재시도
|
||||||
|
|
||||||
|
| 시도 | 대기 시간 | 상태 |
|
||||||
|
|------|----------|------|
|
||||||
|
| 1회차 | - | 최초 시도 |
|
||||||
|
| 2회차 | 2초 | 첫 번째 재시도 |
|
||||||
|
| 3회차 | 4초 | 두 번째 재시도 |
|
||||||
|
| 실패 | - | `analysis_failed` 이벤트 발송 |
|
||||||
|
|
||||||
|
### 로그 파일
|
||||||
|
|
||||||
|
| 파일 | 위치 | 내용 |
|
||||||
|
|------|------|------|
|
||||||
|
| `print_history.log` | `backend/logs/` | 인쇄 성공/실패 기록 |
|
||||||
|
| `analysis_failures.log` | `prescription-trigger/logs/` | 분석 실패 상세 기록 |
|
||||||
|
| `paai_logs.db` | `backend/db/` | 분석 결과 SQLite 저장 |
|
||||||
|
|
||||||
|
### 관련 문서
|
||||||
|
|
||||||
|
- `docs/PAAI_AUTO_PRINT_TROUBLESHOOTING.md` - 자동인쇄 트러블슈팅 가이드
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📝 버전 이력
|
## 📝 버전 이력
|
||||||
|
|
||||||
| 날짜 | 버전 | 변경 내용 |
|
| 날짜 | 버전 | 변경 내용 |
|
||||||
@ -427,6 +549,8 @@ OPENAI_MODEL=gpt-4o-mini
|
|||||||
| 2026-02-28 | 1.0 | 초기 아키텍처 문서 작성 |
|
| 2026-02-28 | 1.0 | 초기 아키텍처 문서 작성 |
|
||||||
| | | 동물약 AI 챗봇 추가 |
|
| | | 동물약 AI 챗봇 추가 |
|
||||||
| | | 플로팅 챗봇 UI 구현 |
|
| | | 플로팅 챗봇 UI 구현 |
|
||||||
|
| 2026-03-05 | 1.1 | PAAI 시스템 아키텍처 추가 |
|
||||||
|
| | | 자동인쇄, WebSocket, 재시도 로직 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user