@startuml
!theme mono

title 05. 회의 종료 및 완료 - 이벤트스토밍 플로우

actor "회의록 작성자" as User
participant "회의록 시스템" as System
participant "LLM" as LLM
participant "캘린더 시스템" as Calendar
participant "알림 시스템" as Notification

== 회의 종료 ==

User -> System : **커맨드**: 회의 종료하기\n(데이터: 회의 ID, 종료 시간)
activate System
System -> System : 음성 녹음 중지
System -> System : 회의 통계 생성
System --> User : **이벤트**: 회의가 종료됨\n(데이터: 종료 시간, 회의 총 시간, 참석자 수)
deactivate System

== 최종 회의록 확정 ==

User -> System : **커맨드**: 최종 회의록 확정하기\n(데이터: 회의록 버전, 확정자)
activate System
System -> System : 필수 항목 누락 검사
System -> System : 최종 버전 생성
System --> User : **이벤트**: 최종 회의록이 확정됨\n(데이터: 회의록 ID, 확정 버전, 확정 시간)
deactivate System

note right of System
**Policy/Rule**:
회의 종료 시 →
AI가 자동으로 Todo 항목 추출
end note

== Todo 자동 추출 ==

System -> LLM : **커맨드**: Todo 자동 추출하기\n(데이터: 회의록 내용, 추출 규칙)
activate LLM
LLM -> LLM : 회의록 내용 분석
LLM -> LLM : 액션 아이템 식별
LLM -> LLM : 담당자 자동 식별
LLM --> System : **이벤트**: Todo가 자동 추출됨\n(데이터: Todo 목록, 추출된 항목 수, 담당자 정보)
deactivate LLM

note right of LLM
**Policy/Rule**:
Todo 추출 시 →
담당자 자동 식별 (발언 내용 기반)
end note

== 다음 회의 일정 연동 ==

alt 다음 회의 일정이 언급됨
    note right of System
    **Policy/Rule**:
    다음 회의 일정이 언급되면 →
    자동으로 캘린더에 등록
    end note

    System -> Calendar : **커맨드**: 일정 연동하기\n(데이터: 일정 정보, 캘린더 ID)
    activate Calendar
    Calendar -> Calendar : 일정 생성
    Calendar --> System : **이벤트**: 일정이 캘린더에 연동됨\n(데이터: 일정 ID, 연동 상태)
    deactivate Calendar
end

== 회의록 공유 ==

note right of System
**Policy/Rule**:
회의록 확정 시 →
참석자 전원에게 자동 공유
end note

System -> Notification : **커맨드**: 회의록 공유하기\n(데이터: 공유 대상, 공유 권한, 공유 방식)
activate Notification
Notification -> Notification : 공유 링크 생성
Notification --> System : **이벤트**: 회의록이 공유됨\n(데이터: 공유 ID, 공유 대상, 공유 시간)

Notification -> User : 회의록 공유 알림
Notification --> System : **이벤트**: 알림이 발송됨\n(데이터: 알림 대상, 알림 내용)
deactivate Notification

note over User, Notification
**Actor**: 회의록 작성자, AI 시스템
**External System**: LLM (Todo 추출), 캘린더 시스템, 알림 시스템
**커맨드 데이터**: 회의 종료 정보, 회의록 버전, 일정 정보
**이벤트 데이터**: 확정 회의록, Todo 목록, 공유 상태
end note

@enduml
