11-회의록수정 화면 안건 기반 구조로 개선

UI/UX 설계서 및 프로토타입 수정으로 유저스토리 v2.1.1+ 요구사항 반영
- 안건별 AI 한줄 요약 (UFR-AI-036): 읽기 전용, 30자 이내, 🔒 아이콘 표시
- 안건 기반 구조: 기존 섹션 구조를 안건 기반으로 전면 변경
- 안건별 검증 UI (UFR-COLLAB-030): 회의 생성자 잠금/해제 기능, 참석자 읽기 전용

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
yabo0812 2025-10-24 13:11:55 +09:00
parent 45578b0f7b
commit e37d20942a
2 changed files with 312 additions and 100 deletions

View File

@ -7,7 +7,7 @@
<link rel="stylesheet" href="common.css"> <link rel="stylesheet" href="common.css">
<style> <style>
/* 페이지별 커스텀 스타일만 유지 */ /* 페이지별 커스텀 스타일만 유지 */
/* 공통 스타일(헤더, 메인콘텐츠, 섹션, AI요약, 관련회의록, 액션바)은 common.css 사용 */ /* 공통 스타일(헤더, 메인콘텐츠, 안건, AI요약, 관련회의록, 액션바)은 common.css 사용 */
/* 저장 상태 표시 */ /* 저장 상태 표시 */
.save-indicator { .save-indicator {
@ -66,6 +66,67 @@
color: var(--primary); color: var(--primary);
} }
/* 안건 카드 스타일 */
.agenda-card {
background: var(--white);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
padding: var(--space-md);
margin-bottom: var(--space-lg);
}
.agenda-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: var(--space-md);
gap: var(--space-sm);
}
.agenda-title-wrapper {
flex: 1;
min-width: 0;
}
.agenda-title {
font-size: var(--font-h3);
font-weight: var(--font-weight-bold);
color: var(--gray-900);
margin-bottom: var(--space-xs);
}
.agenda-status {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
}
/* AI 한줄 요약 (읽기 전용, UFR-AI-036) */
.ai-summary-oneline {
background: var(--gray-50);
border-left: 4px solid var(--primary);
border-radius: var(--radius-md);
padding: var(--space-sm) var(--space-md);
margin-bottom: var(--space-md);
display: flex;
align-items: center;
gap: var(--space-sm);
}
.ai-summary-oneline .lock-icon {
font-size: 18px;
color: var(--gray-500);
flex-shrink: 0;
}
.ai-summary-oneline .summary-text {
font-size: var(--font-small);
color: var(--gray-700);
font-weight: var(--font-weight-medium);
flex: 1;
min-width: 0;
}
/* AI 요약 편집 Footer (common.css에 없는 부분) */ /* AI 요약 편집 Footer (common.css에 없는 부분) */
.ai-summary-footer { .ai-summary-footer {
display: flex; display: flex;
@ -74,8 +135,8 @@
margin-top: var(--space-sm); margin-top: var(--space-sm);
} }
/* 섹션 내용 편집 */ /* 안건 내용 편집 */
.section-content-edit { .agenda-content-edit {
margin-bottom: var(--space-md); margin-bottom: var(--space-md);
} }
@ -152,8 +213,8 @@
background: rgba(255, 86, 86, 0.1); background: rgba(255, 86, 86, 0.1);
} }
/* 검증 완료 */ /* 안건별 검증 (UFR-COLLAB-030) */
.verification-lock { .agenda-verification {
display: flex; display: flex;
align-items: center; align-items: center;
gap: var(--space-sm); gap: var(--space-sm);
@ -163,11 +224,40 @@
margin-top: var(--space-md); margin-top: var(--space-md);
} }
.verification-lock.unlocked { .agenda-verification.verified {
background: var(--primary-light); background: var(--primary-light);
border: 1px solid var(--primary); border: 1px solid var(--primary);
} }
.agenda-verification.unlocked {
background: var(--warning-light);
border: 1px solid var(--warning);
}
.verification-label {
flex: 1;
min-width: 0;
}
.verification-actions {
display: flex;
align-items: center;
gap: var(--space-sm);
}
/* 읽기 전용 표시 */
.readonly-badge {
display: inline-flex;
align-items: center;
padding: 4px 8px;
background: var(--gray-100);
border-radius: var(--radius-sm);
color: var(--gray-600);
font-size: var(--font-caption);
font-weight: var(--font-weight-medium);
margin-left: 8px;
}
/* 관련회의록 검색 모달 */ /* 관련회의록 검색 모달 */
.search-modal-content { .search-modal-content {
max-height: 60vh; max-height: 60vh;
@ -233,19 +323,6 @@
font-size: var(--font-small); font-size: var(--font-small);
color: var(--gray-700); color: var(--gray-700);
} }
/* 읽기 전용 표시 */
.readonly-badge {
display: inline-flex;
align-items: center;
padding: 4px 8px;
background: var(--gray-100);
border-radius: var(--radius-sm);
color: var(--gray-600);
font-size: var(--font-caption);
font-weight: var(--font-weight-medium);
margin-left: 8px;
}
</style> </style>
</head> </head>
<body> <body>
@ -258,6 +335,8 @@
- 검증완료 후: 회의 생성자만 수정 가능 (참석자는 "수정" 버튼 비활성화) - 검증완료 후: 회의 생성자만 수정 가능 (참석자는 "수정" 버튼 비활성화)
- 참석자 관리: 회의 생성자만 추가/삭제 가능 - 참석자 관리: 회의 생성자만 추가/삭제 가능
- 회의 일시/장소: 읽기 전용 (회의 예약 화면에서만 변경 가능) - 회의 일시/장소: 읽기 전용 (회의 예약 화면에서만 변경 가능)
- 안건별 검증: 회의 생성자는 잠금 해제 후 수정 가능, 참석자는 읽기 전용
- AI 한줄 요약: 모든 사용자에게 읽기 전용 (UFR-AI-036)
--> -->
<!-- 헤더 --> <!-- 헤더 -->
@ -305,19 +384,27 @@
</div> </div>
</div> </div>
<!-- 섹션 1 편집 --> <!-- 안건 1 편집 -->
<div class="section"> <div class="agenda-card">
<div class="section-header"> <div class="agenda-header">
<h3 class="section-title"> <div class="agenda-title-wrapper">
1. 신제품 기획 방향 <h3 class="agenda-title">1. 신제품 기획 방향</h3>
<span class="badge badge-complete">검증완료</span> <div class="agenda-status">
</h3> <span class="badge badge-complete">검증완료</span>
</div>
</div>
</div> </div>
<!-- AI 요약 편집 --> <!-- AI 한줄 요약 (읽기 전용, UFR-AI-036) -->
<div class="ai-summary-oneline">
<span class="lock-icon">🔒</span>
<span class="summary-text">타겟 고객을 20-30대로 설정, UI/UX 개선 집중</span>
</div>
<!-- AI 상세 요약 편집 -->
<div class="ai-summary-edit"> <div class="ai-summary-edit">
<div class="ai-summary-header"> <div class="ai-summary-header">
<span class="ai-summary-label">💡 AI 요약</span> <span class="ai-summary-label">💡 AI 상세 요약</span>
<button class="btn-secondary btn-sm" onclick="regenerateSummary(1)">AI 재생성</button> <button class="btn-secondary btn-sm" onclick="regenerateSummary(1)">AI 재생성</button>
</div> </div>
<textarea <textarea
@ -330,11 +417,11 @@
</div> </div>
</div> </div>
<!-- 섹션 내용 편집 --> <!-- 안건 내용 편집 -->
<div class="section-content-edit"> <div class="agenda-content-edit">
<textarea <textarea
class="content-textarea" class="content-textarea"
placeholder="섹션 내용을 입력하세요" placeholder="안건 내용을 입력하세요"
oninput="markAsUnsaved()" oninput="markAsUnsaved()"
>**논의 사항:** >**논의 사항:**
- AI 기반 회의록 자동화 서비스 출시 결정 - AI 기반 회의록 자동화 서비스 출시 결정
@ -379,29 +466,42 @@
</div> </div>
</div> </div>
<!-- 검증 완료 (읽기 전용) --> <!-- 안건별 검증 (회의 생성자 권한) -->
<div class="verification-lock"> <div class="agenda-verification verified" id="verify-agenda-1">
<input type="checkbox" class="checkbox" id="verify-1" checked disabled> <input type="checkbox" class="checkbox" id="verify-1" checked disabled>
<label for="verify-1" style="flex: 1; min-width: 0;"> <div class="verification-label">
<span class="font-medium">검증 완료</span> <label for="verify-1">
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="font-medium">검증 완료</span>
</label> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
<span class="readonly-badge">🔒 읽기 전용</span> </label>
</div>
<div class="verification-actions">
<button class="btn btn-secondary btn-sm" onclick="unlockAgendaVerification(1)">🔓 잠금 해제</button>
</div>
</div> </div>
</div> </div>
<!-- 섹션 2 편집 --> <!-- 안건 2 편집 -->
<div class="section"> <div class="agenda-card">
<div class="section-header"> <div class="agenda-header">
<h3 class="section-title"> <div class="agenda-title-wrapper">
2. 개발 일정 및 리소스 <h3 class="agenda-title">2. 개발 일정 및 리소스</h3>
<span class="badge badge-complete">검증완료</span> <div class="agenda-status">
</h3> <span class="badge badge-complete">검증완료</span>
</div>
</div>
</div> </div>
<!-- AI 한줄 요약 (읽기 전용, UFR-AI-036) -->
<div class="ai-summary-oneline">
<span class="lock-icon">🔒</span>
<span class="summary-text">개발 기간 3개월, 백엔드 2명/프론트 2명/AI 1명 투입</span>
</div>
<!-- AI 상세 요약 편집 -->
<div class="ai-summary-edit"> <div class="ai-summary-edit">
<div class="ai-summary-header"> <div class="ai-summary-header">
<span class="ai-summary-label">💡 AI 요약</span> <span class="ai-summary-label">💡 AI 상세 요약</span>
<button class="btn-secondary btn-sm" onclick="regenerateSummary(2)">AI 재생성</button> <button class="btn-secondary btn-sm" onclick="regenerateSummary(2)">AI 재생성</button>
</div> </div>
<textarea <textarea
@ -414,10 +514,11 @@
</div> </div>
</div> </div>
<div class="section-content-edit"> <!-- 안건 내용 편집 -->
<div class="agenda-content-edit">
<textarea <textarea
class="content-textarea" class="content-textarea"
placeholder="섹션 내용을 입력하세요" placeholder="안건 내용을 입력하세요"
oninput="markAsUnsaved()" oninput="markAsUnsaved()"
>**일정:** >**일정:**
- Phase 1 (11월): 핵심 기능 개발 (음성인식, AI 요약) - Phase 1 (11월): 핵심 기능 개발 (음성인식, AI 요약)
@ -430,6 +531,7 @@
- AI 엔지니어 1명</textarea> - AI 엔지니어 1명</textarea>
</div> </div>
<!-- 관련회의록 편집 -->
<div class="references-edit"> <div class="references-edit">
<div class="references-header"> <div class="references-header">
<span class="references-label">📚 관련회의록 (1개)</span> <span class="references-label">📚 관련회의록 (1개)</span>
@ -445,28 +547,42 @@
</div> </div>
</div> </div>
<div class="verification-lock"> <!-- 안건별 검증 (회의 생성자 권한) -->
<div class="agenda-verification verified" id="verify-agenda-2">
<input type="checkbox" class="checkbox" id="verify-2" checked disabled> <input type="checkbox" class="checkbox" id="verify-2" checked disabled>
<label for="verify-2" style="flex: 1; min-width: 0;"> <div class="verification-label">
<span class="font-medium">검증 완료</span> <label for="verify-2">
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="font-medium">검증 완료</span>
</label> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
<span class="readonly-badge">🔒 읽기 전용</span> </label>
</div>
<div class="verification-actions">
<button class="btn btn-secondary btn-sm" onclick="unlockAgendaVerification(2)">🔓 잠금 해제</button>
</div>
</div> </div>
</div> </div>
<!-- 섹션 3 편집 --> <!-- 안건 3 편집 -->
<div class="section"> <div class="agenda-card">
<div class="section-header"> <div class="agenda-header">
<h3 class="section-title"> <div class="agenda-title-wrapper">
3. 마케팅 전략 <h3 class="agenda-title">3. 마케팅 전략</h3>
<span class="badge badge-complete">검증완료</span> <div class="agenda-status">
</h3> <span class="badge badge-complete">검증완료</span>
</div>
</div>
</div> </div>
<!-- AI 한줄 요약 (읽기 전용, UFR-AI-036) -->
<div class="ai-summary-oneline">
<span class="lock-icon">🔒</span>
<span class="summary-text">프리 런칭 캠페인, LinkedIn 및 스타트업 커뮤니티 집중</span>
</div>
<!-- AI 상세 요약 편집 -->
<div class="ai-summary-edit"> <div class="ai-summary-edit">
<div class="ai-summary-header"> <div class="ai-summary-header">
<span class="ai-summary-label">💡 AI 요약</span> <span class="ai-summary-label">💡 AI 상세 요약</span>
<button class="btn-secondary btn-sm" onclick="regenerateSummary(3)">AI 재생성</button> <button class="btn-secondary btn-sm" onclick="regenerateSummary(3)">AI 재생성</button>
</div> </div>
<textarea <textarea
@ -479,10 +595,11 @@
</div> </div>
</div> </div>
<div class="section-content-edit"> <!-- 안건 내용 편집 -->
<div class="agenda-content-edit">
<textarea <textarea
class="content-textarea" class="content-textarea"
placeholder="섹션 내용을 입력하세요" placeholder="안건 내용을 입력하세요"
oninput="markAsUnsaved()" oninput="markAsUnsaved()"
>**프리 런칭 캠페인:** >**프리 런칭 캠페인:**
- 기간: 11월 1일 ~ 11월 30일 - 기간: 11월 1일 ~ 11월 30일
@ -495,6 +612,7 @@
- 1월부터 유료 전환</textarea> - 1월부터 유료 전환</textarea>
</div> </div>
<!-- 관련회의록 편집 -->
<div class="references-edit"> <div class="references-edit">
<div class="references-header"> <div class="references-header">
<span class="references-label">📚 관련회의록 (0개)</span> <span class="references-label">📚 관련회의록 (0개)</span>
@ -505,13 +623,18 @@
</div> </div>
</div> </div>
<div class="verification-lock"> <!-- 안건별 검증 (회의 생성자 권한) -->
<div class="agenda-verification verified" id="verify-agenda-3">
<input type="checkbox" class="checkbox" id="verify-3" checked disabled> <input type="checkbox" class="checkbox" id="verify-3" checked disabled>
<label for="verify-3" style="flex: 1; min-width: 0;"> <div class="verification-label">
<span class="font-medium">검증 완료</span> <label for="verify-3">
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="font-medium">검증 완료</span>
</label> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
<span class="readonly-badge">🔒 읽기 전용</span> </label>
</div>
<div class="verification-actions">
<button class="btn btn-secondary btn-sm" onclick="unlockAgendaVerification(3)">🔓 잠금 해제</button>
</div>
</div> </div>
</div> </div>
</main> </main>
@ -621,7 +744,7 @@
} }
// AI 요약 재생성 // AI 요약 재생성
function regenerateSummary(sectionId) { function regenerateSummary(agendaId) {
showToast('AI 요약을 생성 중입니다...', 'info'); showToast('AI 요약을 생성 중입니다...', 'info');
setTimeout(() => { setTimeout(() => {
@ -630,6 +753,46 @@
}, 2000); }, 2000);
} }
// 안건별 검증 잠금 해제 (회의 생성자만 가능)
function unlockAgendaVerification(agendaId) {
const verifyContainer = document.getElementById(`verify-agenda-${agendaId}`);
const checkbox = document.getElementById(`verify-${agendaId}`);
// 잠금 해제 상태로 변경
verifyContainer.classList.remove('verified');
verifyContainer.classList.add('unlocked');
checkbox.disabled = false;
// 버튼을 "잠금" 버튼으로 변경
const actionsDiv = verifyContainer.querySelector('.verification-actions');
actionsDiv.innerHTML = `
<button class="btn btn-primary btn-sm" onclick="lockAgendaVerification(${agendaId})">🔒 잠금</button>
`;
showToast('안건 검증을 수정할 수 있습니다', 'success');
markAsUnsaved();
}
// 안건별 검증 잠금 (회의 생성자만 가능)
function lockAgendaVerification(agendaId) {
const verifyContainer = document.getElementById(`verify-agenda-${agendaId}`);
const checkbox = document.getElementById(`verify-${agendaId}`);
// 잠금 상태로 변경
verifyContainer.classList.remove('unlocked');
verifyContainer.classList.add('verified');
checkbox.disabled = true;
// 버튼을 "잠금 해제" 버튼으로 변경
const actionsDiv = verifyContainer.querySelector('.verification-actions');
actionsDiv.innerHTML = `
<button class="btn btn-secondary btn-sm" onclick="unlockAgendaVerification(${agendaId})">🔓 잠금 해제</button>
`;
showToast('안건 검증이 잠겼습니다', 'success');
markAsUnsaved();
}
// 관련회의록 제거 // 관련회의록 제거
function removeReference(btn) { function removeReference(btn) {
const item = btn.closest('.reference-item'); const item = btn.closest('.reference-item');

View File

@ -1427,13 +1427,20 @@ graph TD
- 회의 제목: 수정 가능 - 회의 제목: 수정 가능
- 회의 일시/장소: 읽기 전용 (회의 예약 화면에서만 변경 가능) - 회의 일시/장소: 읽기 전용 (회의 예약 화면에서만 변경 가능)
- 참석자 관리: 회의 생성자만 추가/삭제 가능 - 참석자 관리: 회의 생성자만 추가/삭제 가능
2. 회의록 내용 수정 (섹션별) 2. **회의록 내용 수정 (안건별)** - 용어 변경: 섹션 → 안건
3. **AI 요약 수정** (섹션별) 3. **AI 한줄 요약 표시 (안건별, UFR-AI-036)** - 신규
4. **참고자료 편집** (추가/제거) - 편집 불가능한 AI 한줄 요약 (30자 이내)
5. **Todo 수정 (UFR-TODO-040)** - 신규 추가 (회의 생성자만) - 각 안건 최상단에 표시
6. 자동 저장 (30초 간격) 4. **AI 상세 요약 수정 (안건별)** - 기존 AI 요약 기능
7. 수정 이력 관리 5. **참고자료 편집** (추가/제거)
8. 상태 변경 (검증완료 → 작성중으로 자동 변경) 6. **Todo 수정 (UFR-TODO-040)** - 회의 생성자만
7. **안건별 검증 (UFR-COLLAB-030)** - 신규
- 안건별 검증 완료 체크박스
- 회의 생성자: 잠금 해제 후 수정 가능
- 참석자: 읽기 전용
8. 자동 저장 (30초 간격)
9. 수정 이력 관리
10. 상태 변경 (검증완료 → 작성중으로 자동 변경)
#### UI 구성요소 #### UI 구성요소
@ -1456,19 +1463,30 @@ graph TD
- 회의록 상태 배지 (자동 관리) - 회의록 상태 배지 (자동 관리)
- **편집 화면** - **편집 화면**
- 섹션별 편집 영역 - **안건별 편집 영역** (용어 변경: 섹션 → 안건)
- 각 섹션: - 각 안건:
- 섹션 제목 - **안건 헤더**
- **AI 요약 편집 영역** - 안건 제목 (H4, Bold)
- 요약 텍스트 편집 필드 - 검증 상태 배지 (검증완료/미검증)
- **AI 한줄 요약** (편집 불가, UFR-AI-036) - 신규
- 🔒 아이콘 + 30자 이내 한줄 요약
- 읽기 전용 (회색 배경, 민트 그린 좌측 액센트 라인)
- 호버 시: "이 내용은 편집할 수 없습니다" 툴팁
- **AI 상세 요약 편집 영역**
- 💡 "AI 상세 요약" 레이블 (명칭 변경)
- 요약 텍스트 편집 필드 (textarea)
- "AI 재생성" 버튼 (요약 다시 생성) - "AI 재생성" 버튼 (요약 다시 생성)
- 마지막 수정 시간 표시 - 마지막 수정 시간 표시
- 편집 가능한 텍스트 영역 - 편집 가능한 텍스트 영역
- 논의 주제
- 발언자별 의견
- 결정 사항
- 보류 사항
- **참고자료 편집 영역** - **참고자료 편집 영역**
- 기존 참고자료 목록 (제거 버튼 포함) - 기존 참고자료 목록 (제거 버튼 포함)
- "참고자료 추가" 버튼 - "참고자료 추가" 버튼
- 회의록 검색 및 선택 UI - 회의록 검색 및 선택 UI
- **Todo 섹션 편집 영역** (회의 생성자만) - 신규 - **Todo 섹션 편집 영역** (회의 생성자만)
- Todo 목록 표시 - Todo 목록 표시
- 각 Todo 항목: - 각 Todo 항목:
- 체크박스 (완료 상태) - 체크박스 (완료 상태)
@ -1479,14 +1497,20 @@ graph TD
- "편집" 버튼 (인라인 편집 활성화) - "편집" 버튼 (인라인 편집 활성화)
- "삭제" 버튼 - "삭제" 버튼
- "Todo 추가" 버튼 - "Todo 추가" 버튼
- 검증 완료 체크박스 (잠금 해제 필요) - **안건별 검증 영역** (UFR-COLLAB-030) - 신규
- **회의 생성자 화면**:
- 검증 완료 체크박스 (활성화)
- "잠금 해제" 버튼 (검증완료 안건만 표시)
- **참석자 화면**:
- 🔒 "읽기 전용" 배지 (검증완료 안건)
- 안내 텍스트: "(잠금됨 · 회의 생성자만 수정 가능)"
- 자동 저장 상태 표시 ("저장됨", "저장 중...") - 자동 저장 상태 표시 ("저장됨", "저장 중...")
**Tablet/Desktop (768px+)** **Tablet/Desktop (768px+)**
- **헤더**: Mobile과 동일 (뒤로가기, 타이틀, 저장 버튼, 자동 저장 인디케이터) - **헤더**: Mobile과 동일 (뒤로가기, 타이틀, 저장 버튼, 자동 저장 인디케이터)
- **메인 영역**: - **메인 영역**:
- 회의 기본 정보 영역 (Mobile과 동일) - 회의 기본 정보 영역 (Mobile과 동일)
- 편집 화면 (섹션별 편집, AI 요약, 참고자료, Todo) - 편집 화면 (안건별 편집, AI 한줄/상세 요약, 참고자료, Todo, 안건별 검증)
- **우측 패널** (선택사항): - **우측 패널** (선택사항):
- 수정 이력 (v2.0 고도화 예정) - 수정 이력 (v2.0 고도화 예정)
- 미리보기 - 미리보기
@ -1502,19 +1526,40 @@ graph TD
- 자동 저장: 30초 간격, 인디케이터 표시 - 자동 저장: 30초 간격, 인디케이터 표시
- 수동 저장: "저장" 버튼 클릭 - 수동 저장: "저장" 버튼 클릭
3. **검증완료 섹션 (권한별 차등 표시)** 3. **AI 한줄 요약 확인 (UFR-AI-036)** - 신규
- **회의 생성자**: 06-검증완료 화면에서 잠금 해제 가능 - **읽기 전용 표시**:
- **참석자**: 읽기 전용 표시 ("🔒 읽기 전용" 배지) - 🔒 아이콘으로 편집 불가 명시
- 회색 배경 + 민트 그린 좌측 액센트 라인
- **호버 인터랙션**:
- 툴팁 표시: "이 내용은 편집할 수 없습니다"
- **위치**: 각 안건 최상단 (안건 제목 바로 아래)
4. **AI 요약 편집** 4. **AI 상세 요약 편집**
- 요약 텍스트 필드 클릭: 직접 수정 가능 - 요약 텍스트 필드 클릭: 직접 수정 가능
- "AI 재생성" 버튼 클릭: - "AI 재생성" 버튼 클릭:
- 현재 섹션 내용 기반으로 요약 재생성 - 현재 안건 내용 기반으로 상세 요약 재생성
- 로딩 인디케이터 표시 - 로딩 인디케이터 표시
- 생성 완료 시 자동 업데이트 - 생성 완료 시 자동 업데이트
- 자동 저장 (30초 간격) - 자동 저장 (30초 간격)
5. **참고자료 편집** 5. **안건별 검증 (UFR-COLLAB-030)** - 신규
- **회의 생성자 권한**:
- 검증 완료 체크박스 클릭:
- 체크: 안건 검증 완료 처리 (배지 "검증완료"로 변경)
- 언체크: 미검증 상태로 변경
- "잠금 해제" 버튼 클릭 (검증완료 안건만 표시):
- 확인 다이얼로그: "이 안건의 잠금을 해제하시겠습니까?"
- 확인 시: 안건 편집 가능 상태로 변경
- **참석자 화면**:
- 검증완료 안건: 🔒 "읽기 전용" 배지 표시
- 안내 텍스트: "(잠금됨 · 회의 생성자만 수정 가능)"
- 모든 입력 필드 비활성화 (disabled)
- **검증률 계산 및 표시**:
- 검증률 = 검증 완료된 안건 수 / 전체 안건 수
- 헤더에 검증률 표시 (예: "검증률: 70% (7/10)")
- 모든 안건 검증 완료 시 "최종 확정" 버튼 활성화
6. **참고자료 편집**
- "참고자료 추가" 버튼 클릭: - "참고자료 추가" 버튼 클릭:
- 회의록 검색 모달 표시 - 회의록 검색 모달 표시
- 제목, 날짜, 키워드로 검색 - 제목, 날짜, 키워드로 검색
@ -1522,7 +1567,7 @@ graph TD
- 제거 버튼 (X): 참고자료 목록에서 제거 - 제거 버튼 (X): 참고자료 목록에서 제거
- 순서 변경: 드래그하여 순서 조정 (선택) - 순서 변경: 드래그하여 순서 조정 (선택)
6. **Todo 섹션 편집 (UFR-TODO-040)** - 신규 추가 (회의 생성자만) 7. **Todo 섹션 편집 (UFR-TODO-040)** (회의 생성자만)
- **권한 제어**: - **권한 제어**:
- 회의 생성자만 Todo 섹션 편집 가능 - 회의 생성자만 Todo 섹션 편집 가능
- 일반 참석자는 조회만 가능 (편집 버튼 숨김) - 일반 참석자는 조회만 가능 (편집 버튼 숨김)
@ -1550,22 +1595,26 @@ graph TD
- 삭제 시 Todo 목록에서 제거 - 삭제 시 Todo 목록에서 제거
- 담당자에게 삭제 알림 발송 - 담당자에게 삭제 알림 발송
7. **상태 변경** 8. **상태 변경**
- 확정완료 회의록 수정 시: 자동으로 "작성중" 상태로 변경 - 확정완료 회의록 수정 시: 자동으로 "작성중" 상태로 변경
- 모든 섹션 검증 완료 시: "확정완료"로 변경 제안 - 모든 안건 검증 완료 시: "확정완료"로 변경 제안
#### 데이터 요구사항 #### 데이터 요구사항
- **입력**: - **입력**:
- 회의록 ID (조회) - 회의록 ID (조회)
- 수정 내용 (섹션 ID, 내용) - 수정 내용 (안건 ID, 내용) - 용어 변경: 섹션 → 안건
- **AI 요약 수정 (섹션 ID, 요약 내용)** - **AI 한줄 요약** (읽기 전용, 입력 불가) - 신규
- **참고자료 변경 (추가/제거할 회의록 ID)** - **AI 상세 요약 수정** (안건 ID, 요약 내용)
- **참고자료 변경** (추가/제거할 회의록 ID)
- **안건별 검증 상태** (안건 ID, 검증 여부) - 신규
- **출력**: - **출력**:
- 회의록 목록 (필터/정렬/검색 결과) - 회의록 목록 (필터/정렬/검색 결과)
- 수정 결과 (성공/실패) - 수정 결과 (성공/실패)
- **AI 요약 재생성 결과** - **AI 한줄 요약** (회의 종료 시 생성, 편집 불가) - 신규
- **AI 상세 요약 재생성 결과**
- 수정 이력 (누가, 언제, 무엇을) - 수정 이력 (누가, 언제, 무엇을)
- **연동**: Meeting 서비스, AI 서비스 (UFR-AI-040), Collaboration 서비스 - **검증률** (검증 완료된 안건 수 / 전체 안건 수) - 신규
- **연동**: Meeting 서비스, AI 서비스 (UFR-AI-010, UFR-AI-036, UFR-AI-040), Collaboration 서비스 (UFR-COLLAB-030)
#### 에러 처리 #### 에러 처리
- **권한 없음**: "본인이 작성한 회의록만 수정할 수 있습니다" - **권한 없음**: "본인이 작성한 회의록만 수정할 수 있습니다"