Merge branch 'main' of https://github.com/hwanny1128/HGZero into feat/meeting-reservation

This commit is contained in:
djeon 2025-10-24 13:56:38 +09:00
commit 75feb8493a
7 changed files with 1043 additions and 1270 deletions

View File

@ -113,13 +113,99 @@
transition: width 1s ease; transition: width 1s ease;
} }
/* Todo 리스트 */ /* 안건 카드 */
.todo-list-item { .agenda-card {
padding: var(--space-md);
background: var(--white); background: var(--white);
border-radius: var(--radius-md); border-radius: var(--radius-md);
box-shadow: var(--shadow-sm); box-shadow: var(--shadow-sm);
margin-bottom: var(--space-md);
overflow: hidden;
border: 1px solid var(--gray-200);
}
.agenda-header {
padding: var(--space-md);
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
background: var(--gray-50);
}
.agenda-header:hover {
background: var(--gray-100);
}
.agenda-title {
font-size: var(--font-h4);
font-weight: var(--font-weight-bold);
color: var(--gray-900);
margin-bottom: var(--space-xs);
}
.ai-summary-short {
background: var(--gray-100);
border-left: 4px solid var(--primary);
padding: var(--space-sm) var(--space-md);
margin-top: var(--space-sm);
border-radius: var(--radius-sm);
font-size: var(--font-small);
color: var(--gray-700);
display: flex;
align-items: center;
gap: var(--space-sm);
}
.ai-summary-short .lock-icon {
color: var(--gray-500);
font-size: 16px;
}
.expand-icon {
font-size: 20px;
color: var(--gray-500);
transition: transform 0.3s ease;
}
.agenda-card.expanded .expand-icon {
transform: rotate(180deg);
}
.agenda-content {
display: none;
padding: var(--space-md);
border-top: 1px solid var(--gray-200);
}
.agenda-card.expanded .agenda-content {
display: block;
}
.agenda-section {
margin-bottom: var(--space-md);
}
.agenda-section-title {
font-size: var(--font-small);
font-weight: var(--font-weight-bold);
color: var(--gray-500);
margin-bottom: var(--space-xs);
text-transform: uppercase;
}
.agenda-section-content {
font-size: var(--font-body);
color: var(--gray-700);
line-height: 1.6;
}
/* Todo 리스트 (읽기 전용) */
.todo-list-item {
padding: var(--space-md);
background: var(--gray-50);
border-radius: var(--radius-md);
margin-bottom: var(--space-sm); margin-bottom: var(--space-sm);
opacity: 0.8;
} }
.todo-header { .todo-header {
@ -129,10 +215,15 @@
margin-bottom: var(--space-sm); margin-bottom: var(--space-sm);
} }
.todo-checkbox {
margin-right: var(--space-sm);
cursor: not-allowed;
}
.todo-content { .todo-content {
flex: 1; flex: 1;
font-weight: var(--font-weight-medium); font-weight: var(--font-weight-medium);
color: var(--gray-900); color: var(--gray-700);
} }
.todo-meta { .todo-meta {
@ -143,83 +234,58 @@
color: var(--gray-500); color: var(--gray-500);
} }
/* 체크리스트 */ /* 하단 액션 바 - 3개 버튼 배치 */
.checklist { .action-bar {
background: var(--gray-100); position: fixed;
bottom: 0;
left: 0;
right: 0;
background: var(--white);
padding: var(--space-md); padding: var(--space-md);
border-radius: var(--radius-md); box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);
margin-bottom: var(--space-md);
}
.checklist-item {
display: flex; display: flex;
align-items: center;
gap: var(--space-sm); gap: var(--space-sm);
padding: var(--space-sm) 0; z-index: 100;
color: var(--success);
font-size: var(--font-small);
} }
.checklist-item::before { .action-bar .btn {
content: '✓';
font-weight: var(--font-weight-bold);
}
/* 하단 액션 바 - common.css에서 기본 스타일 적용됨 */
/* 이 화면만 버튼 크기 비율 조정: 공유(1) : 수정(1) : 대시보드(4) */
.action-bar .btn-secondary {
flex: 1; flex: 1;
} }
.action-bar .btn-primary { .action-bar .btn-primary {
flex: 4; flex: 2; /* 바로 최종 확정 버튼 강조 */
} }
@media (min-width: 768px) { @media (min-width: 768px) {
.stats-grid { .stats-grid {
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(4, 1fr);
} }
.action-bar {
position: static;
box-shadow: none;
justify-content: center;
gap: var(--space-md);
} }
/* 날짜 입력 필드 래퍼 - 달력 아이콘 보호 */ .action-bar .btn {
.date-input-wrapper { flex: 0 1 200px;
position: relative;
} }
.date-input-wrapper input[type="date"] { .action-bar .btn-primary {
position: relative; flex: 0 1 250px;
z-index: 1; }
} }
/* 달력 아이콘을 별도 요소로 표시 */ .readonly-notice {
.date-input-wrapper::after { background: var(--warning-light);
content: '📅'; border: 1px solid var(--warning);
position: absolute; border-radius: var(--radius-md);
right: 12px; padding: var(--space-md);
top: 50%; margin-bottom: var(--space-lg);
transform: translateY(-50%); font-size: var(--font-small);
pointer-events: none; color: var(--warning-dark);
font-size: 18px; text-align: center;
z-index: 3;
}
/* 네이티브 달력 아이콘 숨김 */
.date-input-wrapper input[type="date"]::-webkit-calendar-picker-indicator {
position: absolute;
right: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
z-index: 2;
/* Edge 브라우저 캘린더 팝업에 그림자 추가 */
filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.2));
}
/* Edge 브라우저용 포커스 시 하단 테두리 강조 */
.date-input-wrapper input[type="date"]:focus {
box-shadow: 0 0 0 3px rgba(77, 213, 167, 0.15),
0 4px 0 0 var(--primary);
} }
</style> </style>
</head> </head>
@ -232,6 +298,11 @@
<p class="meeting-title">2025년 1분기 제품 기획 회의</p> <p class="meeting-title">2025년 1분기 제품 기획 회의</p>
</div> </div>
<!-- 읽기 전용 안내 -->
<div class="readonly-notice">
🔒 이 화면은 <strong>확인 전용</strong>입니다. 내용을 수정하려면 "회의록 수정" 버튼을 클릭하세요.
</div>
<!-- 통계 카드 그리드 --> <!-- 통계 카드 그리드 -->
<div class="stats-grid"> <div class="stats-grid">
<div class="stat-card"> <div class="stat-card">
@ -243,8 +314,8 @@
<div class="stat-label">참석자</div> <div class="stat-label">참석자</div>
</div> </div>
<div class="stat-card"> <div class="stat-card">
<div class="stat-value" id="sectionsValue">0</div> <div class="stat-value" id="agendasValue">0</div>
<div class="stat-label">섹션</div> <div class="stat-label">안건</div>
</div> </div>
<div class="stat-card"> <div class="stat-card">
<div class="stat-value" id="todosValue">0</div> <div class="stat-value" id="todosValue">0</div>
@ -271,97 +342,128 @@
<div class="speaker-stats" id="speakerStats"></div> <div class="speaker-stats" id="speakerStats"></div>
</div> </div>
<!-- AI Todo 추출 결과 --> <!-- 안건별 AI 요약 -->
<div class="card mb-md"> <div class="card mb-md">
<div class="card-header"> <h3 class="card-title">안건별 AI 요약</h3>
<h3 class="card-title">AI가 추출한 Todo</h3> <div id="agendaList"></div>
<button class="btn btn-ghost btn-sm" onclick="openModal('todoEditModal')">수정</button>
</div>
<div id="todoList"></div>
</div> </div>
<!-- 최종 확정 섹션 -->
<div class="card card-highlight mb-md">
<h3 class="card-title mb-md">최종 회의록 확정</h3>
<div class="checklist mb-md">
<div class="checklist-item">회의 제목 작성</div>
<div class="checklist-item">참석자 목록 작성</div>
<div class="checklist-item">주요 논의 내용 작성</div>
<div class="checklist-item">결정 사항 작성</div>
</div>
<button class="btn btn-primary" style="width: 100%;" onclick="confirmMeeting()">
최종 회의록 확정
</button>
</div> </div>
<!-- 하단 액션 바 --> <!-- 하단 액션 바 (3가지 선택 옵션) -->
<div class="action-bar"> <div class="action-bar">
<button class="btn btn-ghost" onclick="navigateTo('02-대시보드.html')">
대시보드
</button>
<button class="btn btn-secondary" onclick="navigateTo('11-회의록수정.html')"> <button class="btn btn-secondary" onclick="navigateTo('11-회의록수정.html')">
수정 회의록 수정
</button> </button>
<button class="btn btn-primary" onclick="navigateTo('02-대시보드.html')"> <button class="btn btn-primary" onclick="confirmMeetingDirectly()">
대시보드로 이동 바로 최종 확정
</button> </button>
</div> </div>
</div> </div>
<!-- Todo 편집 모달 -->
<div class="modal-overlay" id="todoEditModal">
<div class="modal">
<div class="modal-header">
<h3 class="modal-title">Todo 편집</h3>
<button class="modal-close">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<label class="form-label">Todo 내용</label>
<input type="text" class="form-control" value="API 명세서 작성">
</div>
<div class="form-group">
<label class="form-label">담당자</label>
<select class="form-control">
<option>이준호</option>
<option>박서연</option>
<option>김민준</option>
</select>
</div>
<div class="form-group">
<label class="form-label">마감일</label>
<div class="date-input-wrapper">
<input type="date" class="form-control" value="2025-10-23">
</div>
</div>
<div class="form-group">
<label class="form-label">우선순위</label>
<select class="form-control">
<option value="high">높음</option>
<option value="medium">보통</option>
<option value="low">낮음</option>
</select>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-ghost" onclick="closeModal('todoEditModal')">취소</button>
<button class="btn btn-primary" onclick="saveTodoEdit()">저장</button>
</div>
</div>
</div>
<script src="common.js"></script> <script src="common.js"></script>
<script> <script>
// 샘플 안건 데이터
const SAMPLE_AGENDAS = [
{
id: 'agenda-1',
title: '1. 신제품 기획 방향성',
aiSummaryShort: '타겟 고객을 20-30대로 설정, UI/UX 개선 집중',
details: {
discussion: '신제품의 주요 타겟 고객층을 20-30대 직장인으로 설정하고, 기존 제품 대비 UI/UX를 대폭 개선하기로 함',
opinions: [
{ speaker: '김민준', opinion: '타겟 고객층을 명확히 설정하여 마케팅 전략 수립 필요' },
{ speaker: '박서연', opinion: 'UI/UX 개선에 AI 기술 적용 검토' }
],
decisions: ['타겟 고객: 20-30대 직장인', 'UI/UX 개선을 최우선 과제로 설정'],
pending: []
},
todos: [
{
title: '시장 조사 보고서 작성',
assignee: SAMPLE_MEETINGS[0].participants[0],
dueDate: '2025-11-01',
priority: 'high'
},
{
title: 'UI/UX 개선안 초안 작성',
assignee: SAMPLE_MEETINGS[0].participants[1],
dueDate: '2025-11-05',
priority: 'medium'
}
]
},
{
id: 'agenda-2',
title: '2. 예산 편성 및 일정',
aiSummaryShort: '총 예산 5억, 개발 기간 6개월 확정',
details: {
discussion: '신제품 개발을 위한 총 예산을 5억원으로 책정하고, 개발 기간은 6개월로 확정함',
opinions: [
{ speaker: '이준호', opinion: '개발 기간 6개월은 타이트하므로 우선순위 명확화 필요' },
{ speaker: '최유진', opinion: '예산 배분은 개발 60%, 마케팅 40%로 제안' }
],
decisions: ['총 예산: 5억원', '개발 기간: 6개월', '예산 배분: 개발 60%, 마케팅 40%'],
pending: ['세부 일정 확정은 다음 회의에서 논의']
},
todos: [
{
title: '세부 개발 일정 수립',
assignee: SAMPLE_MEETINGS[0].participants[2],
dueDate: '2025-10-28',
priority: 'high'
}
]
},
{
id: 'agenda-3',
title: '3. 기술 스택 및 개발 방향',
aiSummaryShort: 'React 기반 프론트엔드, AI 챗봇 기능 추가',
details: {
discussion: '프론트엔드는 React 기반으로 개발하고, 고객 지원을 위한 AI 챗봇 기능을 추가하기로 함',
opinions: [
{ speaker: '박서연', opinion: 'AI 챗봇은 GPT-4 기반으로 개발 제안' },
{ speaker: '이준호', opinion: 'React 외에 Next.js 도입 검토 필요' }
],
decisions: ['프론트엔드: React 기반', 'AI 챗봇 기능 추가', 'Next.js 도입 검토'],
pending: ['AI 챗봇 학습 데이터 확보 방안']
},
todos: [
{
title: 'AI 챗봇 프로토타입 개발',
assignee: SAMPLE_MEETINGS[0].participants[1],
dueDate: '2025-11-10',
priority: 'medium'
},
{
title: 'Next.js 도입 검토 보고서',
assignee: SAMPLE_MEETINGS[0].participants[3],
dueDate: '2025-11-03',
priority: 'low'
}
]
}
];
// 페이지 초기화 // 페이지 초기화
function initPage() { function initPage() {
// 통계 카운트 애니메이션 // 통계 카운트 애니메이션
animateCounter('durationValue', 90); animateCounter('durationValue', 90);
animateCounter('participantsValue', 4); animateCounter('participantsValue', 4);
animateCounter('sectionsValue', 3); animateCounter('agendasValue', SAMPLE_AGENDAS.length);
animateCounter('todosValue', 5);
// Todo 전체 개수 계산
const totalTodos = SAMPLE_AGENDAS.reduce((sum, agenda) => sum + (agenda.todos?.length || 0), 0);
animateCounter('todosValue', totalTodos);
// 발언 통계 렌더링 // 발언 통계 렌더링
renderSpeakerStats(); renderSpeakerStats();
// Todo 리스트 렌더링 // 안건 리스트 렌더링
renderTodoList(); renderAgendaList();
} }
// 카운터 애니메이션 // 카운터 애니메이션
@ -416,15 +518,81 @@
}, 100); }, 100);
} }
// Todo 리스트 렌더링 // 안건 리스트 렌더링
function renderTodoList() { function renderAgendaList() {
const todos = SAMPLE_TODOS.filter(todo => todo.meetingId === 'meeting-001'); const container = $('#agendaList');
const container = $('#todoList');
todos.forEach(todo => { SAMPLE_AGENDAS.forEach(agenda => {
const statusInfo = getTodoStatusInfo(todo); // 안건 카드
const item = createElement('div', { className: 'todo-list-item' }, ` const card = createElement('div', {
className: 'agenda-card',
id: `agenda-${agenda.id}`,
onclick: `toggleAgenda('${agenda.id}')`
});
// 헤더
const header = createElement('div', { className: 'agenda-header' }, `
<div>
<div class="agenda-title">${agenda.title}</div>
<div class="ai-summary-short">
<span class="lock-icon">🔒</span>
<span>${agenda.aiSummaryShort}</span>
</div>
</div>
<div class="expand-icon"></div>
`);
card.appendChild(header);
// 상세 내용
const content = createElement('div', { className: 'agenda-content' });
// 논의 주제
if (agenda.details.discussion) {
content.appendChild(createElement('div', { className: 'agenda-section' }, `
<div class="agenda-section-title">논의 주제</div>
<div class="agenda-section-content">${agenda.details.discussion}</div>
`));
}
// 발언자별 의견
if (agenda.details.opinions && agenda.details.opinions.length > 0) {
const opinionsHtml = agenda.details.opinions.map(op =>
`<li><strong>${op.speaker}:</strong> ${op.opinion}</li>`
).join('');
content.appendChild(createElement('div', { className: 'agenda-section' }, `
<div class="agenda-section-title">발언자별 의견</div>
<div class="agenda-section-content"><ul>${opinionsHtml}</ul></div>
`));
}
// 결정 사항
if (agenda.details.decisions && agenda.details.decisions.length > 0) {
const decisionsHtml = agenda.details.decisions.map(d => `<li>✓ ${d}</li>`).join('');
content.appendChild(createElement('div', { className: 'agenda-section' }, `
<div class="agenda-section-title">결정 사항</div>
<div class="agenda-section-content"><ul>${decisionsHtml}</ul></div>
`));
}
// 보류 사항
if (agenda.details.pending && agenda.details.pending.length > 0) {
const pendingHtml = agenda.details.pending.map(p => `<li>⏸ ${p}</li>`).join('');
content.appendChild(createElement('div', { className: 'agenda-section' }, `
<div class="agenda-section-title">보류 사항</div>
<div class="agenda-section-content"><ul>${pendingHtml}</ul></div>
`));
}
// Todo 목록
if (agenda.todos && agenda.todos.length > 0) {
const todosSection = createElement('div', { className: 'agenda-section' }, `
<div class="agenda-section-title">Todo 자동 추출 결과</div>
`);
agenda.todos.forEach(todo => {
const todoItem = createElement('div', { className: 'todo-list-item' }, `
<div class="todo-header"> <div class="todo-header">
<input type="checkbox" class="todo-checkbox" disabled>
<div class="todo-content">${todo.title}</div> <div class="todo-content">${todo.title}</div>
${createBadge(todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음', ${createBadge(todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음',
`priority-${todo.priority}`)} `priority-${todo.priority}`)}
@ -436,22 +604,31 @@
<span>${formatDate(todo.dueDate)}</span> <span>${formatDate(todo.dueDate)}</span>
</div> </div>
`); `);
container.appendChild(item); todosSection.appendChild(todoItem);
});
content.appendChild(todosSection);
}
card.appendChild(content);
container.appendChild(card);
}); });
} }
// 회의록 확정 // 안건 카드 확장/축소
function confirmMeeting() { function toggleAgenda(agendaId) {
if (confirm('회의록을 최종 확정하시겠습니까?\n확정 후에는 Todo가 자동 할당됩니다.')) { const card = $(`#agenda-${agendaId}`);
showToast('회의록이 확정되었습니다', 'success'); card.classList.toggle('expanded');
navigateTo('02-대시보드.html');
}
} }
// Todo 편집 저장 // 바로 최종 확정
function saveTodoEdit() { function confirmMeetingDirectly() {
showToast('Todo가 수정되었습니다', 'success'); if (confirm('AI가 정리한 내용 그대로 최종 확정하시겠습니까?\n\n모든 안건이 자동으로 검증 완료 처리되며, 참석자에게 확정 알림이 발송됩니다.')) {
closeModal('todoEditModal'); showToast('회의록이 최종 확정되었습니다', 'success');
setTimeout(() => {
navigateTo('02-대시보드.html');
}, 1000);
}
} }
// 페이지 로드 시 초기화 // 페이지 로드 시 초기화

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>
<div class="agenda-status">
<span class="badge badge-complete">검증완료</span> <span class="badge badge-complete">검증완료</span>
</h3> </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">
<label for="verify-1">
<span class="font-medium">검증 완료</span> <span class="font-medium">검증 완료</span>
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
</label> </label>
<span class="readonly-badge">🔒 읽기 전용</span> </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>
<div class="agenda-status">
<span class="badge badge-complete">검증완료</span> <span class="badge badge-complete">검증완료</span>
</h3> </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">
<label for="verify-2">
<span class="font-medium">검증 완료</span> <span class="font-medium">검증 완료</span>
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
</label> </label>
<span class="readonly-badge">🔒 읽기 전용</span> </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>
<div class="agenda-status">
<span class="badge badge-complete">검증완료</span> <span class="badge badge-complete">검증완료</span>
</h3> </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">
<label for="verify-3">
<span class="font-medium">검증 완료</span> <span class="font-medium">검증 완료</span>
<span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span> <span class="text-caption text-muted"> (잠금됨 · 회의 생성자만 수정 가능)</span>
</label> </label>
<span class="readonly-badge">🔒 읽기 전용</span> </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

@ -1229,6 +1229,42 @@ Todo 마감일 표시를 위한 D-day 배지 스타일입니다.
--- ---
## 15. 용어 정의
### 사용자 역할 용어
프로젝트 전체에서 다음 용어를 일관되게 사용합니다:
#### 회의 생성자 (Meeting Creator)
- **정의**: 회의 예약을 생성한 사용자
- **권한**:
- 회의 시작/종료
- 템플릿 선택
- 참석자 관리 (추가/삭제)
- 회의록 최종 확정
- 검증 완료된 안건 잠금 해제
- 모든 Todo 수정 (담당자 변경 포함)
- **사용 예시**:
- "회의 생성자 전용 기능"
- "회의 생성자만 회의를 종료할 수 있습니다"
#### 회의 참석자 (Meeting Participant)
- **정의**: 회의에 참석하는 모든 사용자 (회의 생성자 포함)
- **권한**:
- 회의록 조회
- 안건 편집 (검증 완료 전)
- 안건 검증
- 본인의 Todo 수정 (담당자 변경 불가)
- 회의록 목록 조회 (본인이 참석한 회의만)
- **사용 예시**:
- "모든 참석자가 편집할 수 있습니다"
- "참석자는 본인의 Todo만 수정 가능합니다"
### 사용하지 않는 용어
- ❌ "회의록 작성자" - 명확하지 않으므로 사용 금지
- ❌ "작성자" - "회의 생성자" 또는 "참석자"로 명확히 표현
---
## 변경 이력 ## 변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 | | 버전 | 날짜 | 작성자 | 변경 내용 |
@ -1246,3 +1282,4 @@ Todo 마감일 표시를 위한 D-day 배지 스타일입니다.
| 1.2.2 | 2025-10-23 | 강지수 | 05-회의진행 화면 Todo 카드 스타일 통일 (v1.2.2)<br>- **Todo 카드 구조 통일**: 10-회의록상세조회 화면과 동일한 HTML 구조 적용<br> - `.todo-card` > `.todo-top` > (`.todo-checkbox-wrapper` + `.todo-content-wrapper` + `.todo-actions`)<br> - 체크박스: `.todo-checkbox` (24px, border-radius 6px)<br> - 배지: `.todo-badges` 컨테이너에 D-day 배지 + 우선순위 배지<br> - 제목: `.todo-title` (font-body, regular, gray-900)<br> - 메타 정보: `.todo-meta-row` (담당자, 마감일)<br> - 편집 버튼: 절대 위치 (top-right)<br>- **CSS 스타일 추가**: 10-회의록상세조회와 동일한 스타일 적용<br> - 호버 효과: shadow + primary 테두리<br> - 완료 상태: opacity 0.5 + gray 배경 + 취소선<br> - 아이콘 버튼: 32px, 호버 시 scale(1.1)<br>- **JavaScript 함수 추가**: `toggleTodoComplete()` 함수 구현<br> - 완료/미완료 토글 기능<br> - 확인 다이얼로그 표시<br> - 토스트 메시지 표시 | | 1.2.2 | 2025-10-23 | 강지수 | 05-회의진행 화면 Todo 카드 스타일 통일 (v1.2.2)<br>- **Todo 카드 구조 통일**: 10-회의록상세조회 화면과 동일한 HTML 구조 적용<br> - `.todo-card` > `.todo-top` > (`.todo-checkbox-wrapper` + `.todo-content-wrapper` + `.todo-actions`)<br> - 체크박스: `.todo-checkbox` (24px, border-radius 6px)<br> - 배지: `.todo-badges` 컨테이너에 D-day 배지 + 우선순위 배지<br> - 제목: `.todo-title` (font-body, regular, gray-900)<br> - 메타 정보: `.todo-meta-row` (담당자, 마감일)<br> - 편집 버튼: 절대 위치 (top-right)<br>- **CSS 스타일 추가**: 10-회의록상세조회와 동일한 스타일 적용<br> - 호버 효과: shadow + primary 테두리<br> - 완료 상태: opacity 0.5 + gray 배경 + 취소선<br> - 아이콘 버튼: 32px, 호버 시 scale(1.1)<br>- **JavaScript 함수 추가**: `toggleTodoComplete()` 함수 구현<br> - 완료/미완료 토글 기능<br> - 확인 다이얼로그 표시<br> - 토스트 메시지 표시 |
| 1.2.3 | 2025-10-23 | 강지수 | 05-회의진행 화면 D-day 배지 제거 (v1.2.3)<br>- **정책 변경**: 회의 진행 중에는 Todo의 마감일이 확정되지 않았으므로 D-day 배지 숨김<br>- **Todo 카드 배지 수정**: 우선순위 배지만 표시 (D-day 배지 제거)<br> - Todo 1: 높음<br> - Todo 2: 보통<br> - Todo 3: 높음<br>- **마감일 표시 간소화**: "2025-10-23 마감" → "마감: 10/23"<br>- **이유**: 회의 중 작성되는 Todo는 마감일이 임시로 입력된 것이며, 회의 종료 후 확정됨<br>- **다른 화면**: 09-Todo관리, 10-회의록상세조회는 D-day 배지 유지 (확정된 회의록) | | 1.2.3 | 2025-10-23 | 강지수 | 05-회의진행 화면 D-day 배지 제거 (v1.2.3)<br>- **정책 변경**: 회의 진행 중에는 Todo의 마감일이 확정되지 않았으므로 D-day 배지 숨김<br>- **Todo 카드 배지 수정**: 우선순위 배지만 표시 (D-day 배지 제거)<br> - Todo 1: 높음<br> - Todo 2: 보통<br> - Todo 3: 높음<br>- **마감일 표시 간소화**: "2025-10-23 마감" → "마감: 10/23"<br>- **이유**: 회의 중 작성되는 Todo는 마감일이 임시로 입력된 것이며, 회의 종료 후 확정됨<br>- **다른 화면**: 09-Todo관리, 10-회의록상세조회는 D-day 배지 유지 (확정된 회의록) |
| 1.2.4 | 2025-10-24 | 이미준 | 12-회의록목록조회 화면 데이터 아키텍처 반영 (v1.2.4)<br>- **프로토타입 동기화**: UI/UX 설계서 v1.4.14 변경사항 반영<br>- **데이터 아키텍처 명시**: common.js → SAMPLE_MINUTES 배열 기반 동적 렌더링<br>- **정렬 옵션 레이블 변경**: "최신순" → "최근수정순", "회의일시순" → "최근회의순"<br>- **페이지네이션**: 초기 10개 표시, "10개 더보기" 버튼으로 추가 로딩<br>- **샘플 데이터**: 총 30개 (작성중 13개, 확정완료 17개) | | 1.2.4 | 2025-10-24 | 이미준 | 12-회의록목록조회 화면 데이터 아키텍처 반영 (v1.2.4)<br>- **프로토타입 동기화**: UI/UX 설계서 v1.4.14 변경사항 반영<br>- **데이터 아키텍처 명시**: common.js → SAMPLE_MINUTES 배열 기반 동적 렌더링<br>- **정렬 옵션 레이블 변경**: "최신순" → "최근수정순", "회의일시순" → "최근회의순"<br>- **페이지네이션**: 초기 10개 표시, "10개 더보기" 버튼으로 추가 로딩<br>- **샘플 데이터**: 총 30개 (작성중 13개, 확정완료 17개) |
| 1.2.5 | 2025-10-24 | 이미준 | 사용자 역할 용어 통일 (유저스토리 v2.1.2 반영)<br>- **용어 정의 섹션 신규 추가**: 프로젝트 전체 용어 사용 가이드<br>- **회의 생성자 (Meeting Creator)**: 회의 예약을 생성한 사용자, 회의 시작/종료 및 최종 확정 권한<br>- **회의 참석자 (Meeting Participant)**: 회의에 참석하는 모든 사용자 (생성자 포함), 회의록 편집 및 조회 권한<br>- **사용 금지 용어**: "회의록 작성자", "작성자" → "회의 생성자" 또는 "참석자"로 명확히 표현<br>- **권한 정의 명시**: 생성자/참석자별 권한 상세 설명<br>- **통일성 달성**: 유저스토리, 화면설계서, 스타일 가이드 간 용어 완전 통일 |

View File

@ -2,9 +2,9 @@
## 문서 정보 ## 문서 정보
- **작성일**: 2025-10-21 - **작성일**: 2025-10-21
- **최종 수정일**: 2025-10-23 - **최종 수정일**: 2025-10-24
- **작성자**: 이미준 (서비스 기획자) - **작성자**: 이미준 (서비스 기획자)
- **버전**: 1.4.14 - **버전**: 1.4.16
- **설계 철학**: Mobile First Design - **설계 철학**: Mobile First Design
--- ---
@ -27,7 +27,7 @@
## 설계 개요 ## 설계 개요
### 설계 목표 ### 설계 목표
업무 지식이 없는 회의록 작성자도 누락 없이 정확한 회의록을 작성하고 공유할 수 있는 직관적이고 효율적인 사용자 경험 제공 업무 지식이 없는 회의 참석자 누구라도 누락 없이 정확한 회의록을 작성하고 공유할 수 있는 직관적이고 효율적인 사용자 경험 제공
### 설계 원칙 ### 설계 원칙
@ -57,7 +57,7 @@
- UFR-AI-030 (프롬프팅 기반 회의록 개선) - UFR-AI-030 (프롬프팅 기반 회의록 개선)
- **UFR-AI-040 (관련 회의록 자동 연결)** ← 신규 반영 - **UFR-AI-040 (관련 회의록 자동 연결)** ← 신규 반영
- **RAG 서비스**: UFR-RAG-010, UFR-RAG-020 (맥락 기반 용어 설명) - **RAG 서비스**: UFR-RAG-010, UFR-RAG-020 (맥락 기반 용어 설명)
- **Collaboration 서비스**: UFR-COLLAB-010 ~ UFR-COLLAB-030 (실시간 협업) - **Collaboration 서비스**: UFR-COLLAB-010 ~ UFR-COLLAB-020 (실시간 협업)
- **Todo 서비스**: UFR-TODO-010, UFR-TODO-030 (Todo 관리) - **Todo 서비스**: UFR-TODO-010, UFR-TODO-030 (Todo 관리)
### 주요 추가 기능 (v1.1) ### 주요 추가 기능 (v1.1)
@ -83,7 +83,6 @@
| 03 | 회의예약 | UFR-MEET-010 | 높음 | 회의 생성 | X | O | | | 03 | 회의예약 | UFR-MEET-010 | 높음 | 회의 생성 | X | O | |
| 04 | 템플릿선택 | UFR-MEET-020 | 중간 | 회의록 템플릿 선택 | X | O | | | 04 | 템플릿선택 | UFR-MEET-020 | 중간 | 회의록 템플릿 선택 | X | O | |
| 05 | 회의진행 | UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-COLLAB-010 | 높음 | 실시간 회의 진행 및 회의록 작성 | X | X | | | 05 | 회의진행 | UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-COLLAB-010 | 높음 | 실시간 회의 진행 및 회의록 작성 | X | X | |
| 06 | 검증완료 | UFR-COLLAB-030 | 중간 | 섹션별 검증 | X | X | |
| 07 | 회의종료 | UFR-MEET-040, UFR-MEET-050 | 높음 | 회의 통계 및 최종 확정 | X | X | | | 07 | 회의종료 | UFR-MEET-040, UFR-MEET-050 | 높음 | 회의 통계 및 최종 확정 | X | X | |
| 09 | Todo관리 | UFR-TODO-010, UFR-TODO-030 | 높음 | Todo 목록 및 진행 관리 | O | X | | | 09 | Todo관리 | UFR-TODO-010, UFR-TODO-030 | 높음 | Todo 목록 및 진행 관리 | O | X | |
| 10 | 회의록상세조회 | UFR-MEET-047 | 중간 | 회의록 상세 보기 | X | O | | | 10 | 회의록상세조회 | UFR-MEET-047 | 중간 | 회의록 상세 보기 | X | O | |
@ -477,6 +476,7 @@ graph TD
- **관련 유저스토리**: UFR-MEET-010 - **관련 유저스토리**: UFR-MEET-010
- **비즈니스 중요도**: 높음 - **비즈니스 중요도**: 높음
- **접근 경로**: 대시보드 → "회의 예약" 버튼 - **접근 경로**: 대시보드 → "회의 예약" 버튼
- **권한**: 모든 사용자 (예약 생성 시 자동으로 회의 생성자가 됨)
#### 주요 기능 #### 주요 기능
1. 회의 기본 정보 입력 (제목, 날짜/시간, 장소) 1. 회의 기본 정보 입력 (제목, 날짜/시간, 장소)
@ -565,6 +565,7 @@ graph TD
- **관련 유저스토리**: UFR-MEET-020 - **관련 유저스토리**: UFR-MEET-020
- **비즈니스 중요도**: 중간 - **비즈니스 중요도**: 중간
- **접근 경로**: 대시보드 → "새 회의 시작" 또는 회의예약 → "회의 시작" - **접근 경로**: 대시보드 → "새 회의 시작" 또는 회의예약 → "회의 시작"
- **권한**: 회의 생성자 전용
#### 주요 기능 #### 주요 기능
1. 사전 정의된 템플릿 선택 (일반, 스크럼, 킥오프, 주간) 1. 사전 정의된 템플릿 선택 (일반, 스크럼, 킥오프, 주간)
@ -630,6 +631,9 @@ graph TD
- **관련 유저스토리**: UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-AI-040, UFR-COLLAB-010, UFR-RAG-010/020 - **관련 유저스토리**: UFR-MEET-030, UFR-STT-010/020, UFR-AI-010, UFR-AI-040, UFR-COLLAB-010, UFR-RAG-010/020
- **비즈니스 중요도**: 높음 (핵심 화면) - **비즈니스 중요도**: 높음 (핵심 화면)
- **접근 경로**: 템플릿선택 → "이 템플릿으로 시작" - **접근 경로**: 템플릿선택 → "이 템플릿으로 시작"
- **권한**:
- 회의 시작/종료: 회의 생성자 전용
- 회의록 편집: 모든 참석자
#### 주요 기능 #### 주요 기능
1. 음성 녹음 및 실시간 텍스트 변환 (STT) 1. 음성 녹음 및 실시간 텍스트 변환 (STT)
@ -935,94 +939,31 @@ graph TD
--- ---
### 06-검증완료
#### 개요
- **목적**: 회의록 섹션별 내용 검증 및 완료 표시
- **관련 유저스토리**: UFR-COLLAB-030
- **비즈니스 중요도**: 중간
- **접근 경로**: 회의진행 화면 내 또는 회의종료 전
#### 주요 기능
1. 섹션별 검증 상태 표시
2. 검증 완료 체크 (참석자별)
3. 미검증 섹션 안내
4. 섹션 잠금 (회의 생성자만)
#### UI 구성요소
**Mobile (320px~768px)**
- **헤더**
- "검증 완료" 타이틀
- 진행률 바 (전체 섹션 대비 검증 완료 비율)
- **섹션 리스트**
- 각 섹션 카드:
- 섹션 이름
- 검증 상태 아이콘 (✓ 완료 / ○ 미완료)
- 검증자 아바타 (여러 명 가능)
- "검증 완료" 버튼
- 잠금 아이콘 (회의 생성자가 잠근 경우)
- **하단 액션**
- "모두 검증 완료" 버튼 (모든 섹션 검증 시 활성화)
- "나중에 하기" 버튼
**Tablet/Desktop (768px+)**
#### 인터랙션
1. **섹션 검증**
- "검증 완료" 버튼 클릭 → 확인 다이얼로그
- 검증 완료 시: 체크 아이콘 표시, 검증자 아바타 추가
- 실시간 동기화: 다른 참석자에게 즉시 반영
2. **섹션 잠금**
- 검증 완료된 섹션에 잠금 아이콘 표시
- 잠긴 섹션은 수정 불가
- 잠금 해제 가능(회의생성자만)
3. **진행률 표시**
- 상단 진행률 바: 실시간 업데이트
- 100% 완료 시: "모두 검증 완료" 버튼 활성화
4. **내용 수정**
- 회의 개요 : 보기 레이어 내에서 편집 가능(회의생성자만)
- 개요 외 항목: 편집시도시 회의록수정화면으로 이동
5. **나중에 하기**
- "나중에 하기" 버튼 클릭 → 확인 다이얼로그
- 확인 시:
- 회의록 상태를 '작성중'으로 임시 저장
- "회의록이 임시 저장되었습니다" 토스트 메시지 표시
- 1초 후 02-대시보드 화면으로 이동
- 이후 12-회의록목록조회에서 '작성중' 상태로 조회 가능
- 언제든지 회의록 수정 화면에서 검증 재개 가능
#### 데이터 요구사항
- **입력**: 회의 ID, 섹션 목록
- **출력**: 섹션별 검증 상태, 검증자 정보
- **연동**: Collaboration 서비스
#### 에러 처리
- **검증 실패**: "검증 처리에 실패했습니다. 다시 시도해주세요"
- **동기화 실패**: "다른 참석자의 검증 상태를 불러올 수 없습니다"
---
### 07-회의종료 ### 07-회의종료
#### 개요 #### 개요
- **목적**: 회의 통계 표시 및 최종 회의록 확정 - **목적**: 회의 종료 후 AI 요약 내용 확인 및 다음 단계 선택
- **관련 유저스토리**: UFR-MEET-040, UFR-MEET-050, UFR-AI-020 - **관련 유저스토리**: UFR-MEET-040, UFR-MEET-050, UFR-AI-010, UFR-AI-020, UFR-AI-036
- **비즈니스 중요도**: 높음 - **비즈니스 중요도**: 높음
- **접근 경로**: 회의진행 → "회의 종료" 버튼 - **접근 경로**: 회의진행 → "회의 종료" 버튼
- **권한**: 회의 생성자 전용
- **화면 정책**: **확인 전용 화면 (편집 불가)**
- 모든 내용은 읽기 전용
- 안건 내용 수정 불가
- Todo 수정 불가
- 확인 후 다음 단계 선택만 가능
#### 주요 기능 #### 주요 기능
1. 회의 통계 표시 (시간, 참석자, 발언 횟수 등) 1. 회의 통계 표시 (시간, 참석자, 발언 횟수 등)
2. 주요 키워드 클라우드 2. 주요 키워드 클라우드
3. AI 자동 추출된 Todo 항목 확인 3. **안건별 AI 요약 전체 표시** (신규)
4. 최종 회의록 확정 - 안건별 AI 한줄 요약 (30자 이내, 편집 불가)
5. 다음 액션 선택 (공유, 수정, 대시보드 복귀) - 안건별 상세 요약 정리
- 안건별 Todo 자동 추출 결과
4. **3가지 선택 옵션 제공** (신규)
- 옵션 1: 회의록 수정 화면으로 이동
- 옵션 2: 바로 최종 확정
- 옵션 3: 대시보드로 이동
#### UI 구성요소 #### UI 구성요소
@ -1037,62 +978,93 @@ graph TD
- 주요 키워드 (태그 클라우드) - 주요 키워드 (태그 클라우드)
- 발언 통계 (화자별 발언 횟수 및 시간 - 바 차트) - 발언 통계 (화자별 발언 횟수 및 시간 - 바 차트)
- **AI Todo 추출 결과** - **안건별 AI 요약 섹션** (신규)
- "AI가 추출한 Todo" 섹션 - **안건 카드** (안건 개수만큼 반복):
- Todo 항목 리스트: - **안건 제목** (H4, Bold)
- Todo 내용 - **AI 한줄 요약** (읽기 전용, 회색 배경 박스)
- 담당자 (자동 식별 또는 수동 지정) - 30자 이내 간결한 표현
- 마감일 (있는 경우) - 🔒 "편집 불가" 아이콘 표시
- "Todo 수정" 버튼 - 민트 그린 좌측 액센트 라인
- **상세 요약 정리** (읽기 전용)
- 논의 주제
- 발언자별 의견
- 결정 사항
- 보류 사항
- **Todo 자동 추출 결과** (있는 경우)
- Todo 항목 리스트
- 담당자, 마감일, 우선순위 표시
- 읽기 전용 (체크박스 비활성화)
- **최종 확정 섹션** - **3가지 선택 옵션** (하단 액션 바)
- "최종 회의록 확정" 버튼 (Primary) - **옵션 1**: "회의록 수정" 버튼 (Secondary)
- 필수 항목 체크리스트: - 회의록 수정 화면(11-회의록수정)으로 이동
- ✓ 회의 제목 작성 - 회의록 상태: 작성중
- ✓ 참석자 목록 작성 - **옵션 2**: "바로 최종 확정" 버튼 (Primary, 강조)
- ✓ 주요 논의 내용 작성 - 확인 다이얼로그: "AI가 정리한 내용 그대로 최종 확정하시겠습니까?"
- ✓ 결정 사항 작성 - 모든 안건 자동 검증 완료 처리
- 회의록 상태: 확정완료
- **하단 액션** - 참석자에게 확정 알림 발송
- "회의록 공유하기" 버튼 - **옵션 3**: "대시보드로 이동" 버튼 (Ghost)
- "회의록 수정하기" 버튼 - 회의록 상태: 작성중 (추후 편집 가능)
- "대시보드로 돌아가기" 버튼 - 대시보드로 이동
**Tablet/Desktop (768px+)** **Tablet/Desktop (768px+)**
- 상단: 통계 카드 (Grid Layout) - 상단: 통계 카드 (Grid Layout)
- 중앙: AI Todo 추출 결과 - 중앙: 안건별 AI 요약 섹션 (2열 그리드)
- 하단: 최종 확정 및 액션 버튼 - 하단: 3가지 선택 옵션 버튼 (가로 배치)
#### 인터랙션 #### 인터랙션
1. **통계 표시** 1. **통계 표시**
- 애니메이션 효과로 숫자 카운트업 - 애니메이션 효과로 숫자 카운트업
- 차트는 페이드인 효과 - 차트는 페이드인 효과
2. **Todo 확인 및 수정** 2. **안건별 AI 요약 확인** (읽기 전용)
- Todo 항목 클릭: 상세 편집 모달 - **안건 카드 확장/축소**:
- 담당자 변경, 마감일 설정 가능 - 초기: 안건 제목 + AI 한줄 요약만 표시
- "Todo 추가" 버튼으로 수동 추가 - 클릭 시: 상세 요약 + Todo 전체 펼침
- **편집 불가 안내**:
- AI 한줄 요약 영역에 🔒 아이콘 표시
- 호버 시: "이 내용은 편집할 수 없습니다" 툴팁
- **Todo 확인**:
- 체크박스 비활성화 (disabled)
- 읽기 전용 표시
3. **최종 확정** 3. **다음 단계 선택**
- "최종 회의록 확정" 클릭: - **옵션 1: 회의록 수정**
- 필수 항목 검사 - 11-회의록수정.html로 이동
- 누락 시: 해당 섹션으로 이동 안내 - URL 파라미터: meetingId
- 완료 시: 확정 확인 다이얼로그 - 회의록 상태: 작성중
- 확정 후: Todo 자동 할당, 캘린더 연동 - **옵션 2: 바로 최종 확정**
- 확인 다이얼로그 표시
- 확인 시:
- 모든 안건 검증률 100% 자동 설정
- 회의록 상태: 확정완료
- 확정 시간 기록
- 참석자에게 확정 알림 발송
- 성공 토스트: "회의록이 최종 확정되었습니다"
- 02-대시보드.html로 이동
- **옵션 3: 대시보드로 이동**
- 회의록 상태: 작성중
- 02-대시보드.html로 이동
- 추후 회의록 목록에서 편집 가능
#### 데이터 요구사항 #### 데이터 요구사항
- **입력**: 회의 ID - **입력**: 회의 ID
- **출력**: - **출력**:
- 회의 통계 (시간, 참석자 수, 발언 통계, 키워드) - 회의 통계 (시간, 참석자 수, 발언 통계, 키워드)
- AI 추출 Todo 목록 - **안건별 AI 요약 데이터**:
- 확정 회의록 버전 ID - 안건 제목
- AI 한줄 요약 (30자 이내)
- 상세 요약 정리 (논의 주제, 발언자별 의견, 결정 사항, 보류 사항)
- 안건별 Todo 목록 (제목, 담당자, 마감일, 우선순위)
- 회의록 상태 (작성중/확정완료)
- **연동**: Meeting 서비스, AI 서비스, Todo 서비스 - **연동**: Meeting 서비스, AI 서비스, Todo 서비스
#### 에러 처리 #### 에러 처리
- **통계 생성 실패**: "통계를 생성할 수 없습니다" + 건너뛰기 옵션 - **통계 생성 실패**: "통계를 생성할 수 없습니다" + 건너뛰기 옵션
- **Todo 추출 실패**: "AI Todo 추출에 실패했습니다. 수동으로 추가해주세요" - **AI 요약 생성 실패**: "AI 요약을 생성할 수 없습니다. 회의록 수정 화면에서 직접 작성해주세요"
- **필수 항목 누락**: "필수 항목을 작성해주세요" + 해당 섹션으로 이동 - **바로 확정 실패**: "회의록 확정에 실패했습니다. 다시 시도해주세요"
- **확정 실패**: "회의록 확정에 실패했습니다. 다시 시도해주세요" - **네트워크 오류**: 자동 재시도 3회, 실패 시 재시도 버튼 제공
--- ---
@ -1103,6 +1075,7 @@ graph TD
- **관련 유저스토리**: UFR-TODO-040 (Todo 관리) - **관련 유저스토리**: UFR-TODO-040 (Todo 관리)
- **비즈니스 중요도**: 높음 - **비즈니스 중요도**: 높음
- **접근 경로**: 대시보드 → 하단 네비게이션 "Todo" 또는 대시보드 "내 Todo" 카드 → "전체 보기" - **접근 경로**: 대시보드 → 하단 네비게이션 "Todo" 또는 대시보드 "내 Todo" 카드 → "전체 보기"
- **권한**: 모든 회의 참석자 (본인이 담당자인 Todo만 조회/수정 가능)
- **대전제**: - **대전제**:
- Todo의 상태는 완료/미완료만 존재 - Todo의 상태는 완료/미완료만 존재
- 09-Todo관리 화면에서는 나의 Todo(내가 담당자인 Todo)만 표시 - 09-Todo관리 화면에서는 나의 Todo(내가 담당자인 Todo)만 표시
@ -1260,6 +1233,7 @@ graph TD
- **관련 유저스토리**: UFR-MEET-047, UFR-AI-040 - **관련 유저스토리**: UFR-MEET-047, UFR-AI-040
- **비즈니스 중요도**: 중간 - **비즈니스 중요도**: 중간
- **접근 경로**: 대시보드 → "내 회의록" 항목 클릭 또는 Todo관리 → 회의록 링크 - **접근 경로**: 대시보드 → "내 회의록" 항목 클릭 또는 Todo관리 → 회의록 링크
- **권한**: 모든 회의 참석자 (조회 전용)
#### 주요 기능 #### 주요 기능
1. 회의 기본 정보 표시 1. 회의 기본 정보 표시
@ -1453,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 구성요소
@ -1482,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 항목:
- 체크박스 (완료 상태) - 체크박스 (완료 상태)
@ -1505,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 고도화 예정)
- 미리보기 - 미리보기
@ -1528,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. **참고자료 편집**
- "참고자료 추가" 버튼 클릭: - "참고자료 추가" 버튼 클릭:
- 회의록 검색 모달 표시 - 회의록 검색 모달 표시
- 제목, 날짜, 키워드로 검색 - 제목, 날짜, 키워드로 검색
@ -1548,7 +1567,7 @@ graph TD
- 제거 버튼 (X): 참고자료 목록에서 제거 - 제거 버튼 (X): 참고자료 목록에서 제거
- 순서 변경: 드래그하여 순서 조정 (선택) - 순서 변경: 드래그하여 순서 조정 (선택)
6. **Todo 섹션 편집 (UFR-TODO-040)** - 신규 추가 (회의 생성자만) 7. **Todo 섹션 편집 (UFR-TODO-040)** (회의 생성자만)
- **권한 제어**: - **권한 제어**:
- 회의 생성자만 Todo 섹션 편집 가능 - 회의 생성자만 Todo 섹션 편집 가능
- 일반 참석자는 조회만 가능 (편집 버튼 숨김) - 일반 참석자는 조회만 가능 (편집 버튼 숨김)
@ -1576,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)
#### 에러 처리 #### 에러 처리
- **권한 없음**: "본인이 작성한 회의록만 수정할 수 있습니다" - **권한 없음**: "본인이 작성한 회의록만 수정할 수 있습니다"
@ -1614,6 +1637,7 @@ graph TD
- **접근 경로**: - **접근 경로**:
- 대시보드 → "내 회의록" 전체 보기 - 대시보드 → "내 회의록" 전체 보기
- 하단 네비게이션 → "회의록" 메뉴 - 하단 네비게이션 → "회의록" 메뉴
- **권한**: 모든 회의 참석자 (본인이 참석한 회의록만 조회)
#### 데이터 아키텍처 #### 데이터 아키텍처
- **데이터 레이어**: common.js의 SAMPLE_MINUTES 배열 - **데이터 레이어**: common.js의 SAMPLE_MINUTES 배열
@ -2104,6 +2128,8 @@ graph TD
| 1.4.12 | 2025-10-23 | 강지수 | 05-회의진행 화면 Todo 카드 스타일 10-회의록상세조회와 완전 통일<br>- **Todo 카드 HTML 구조 통일**:<br> - 기존: inline-flex 기반 간소화 구조<br> - 변경: `.todo-card` > `.todo-top` > (`.todo-checkbox-wrapper` + `.todo-content-wrapper` + `.todo-actions`) 구조<br> - 10-회의록상세조회.html과 100% 동일한 HTML 구조 적용<br>- **CSS 스타일 추가**: 페이지 하단 `<style>` 블록에 완전한 Todo 카드 스타일 추가<br> - `.todo-card`: 카드 기본 스타일 (padding, border, shadow, hover 효과)<br> - `.todo-checkbox`: 24px 체크박스 (border-radius 6px, checked 시 success 색상)<br> - `.todo-badges`: D-day 배지 + 우선순위 배지 컨테이너<br> - `.todo-title`: font-body, regular 스타일 제목<br> - `.todo-meta-row`: 담당자 + 마감일 메타 정보<br> - `.todo-actions`: 절대 위치 (top-right) 편집 버튼<br> - `.icon-btn`: 32px 아이콘 버튼, 호버 시 scale(1.1) 효과<br> - `.completed` 상태: opacity 0.5, 취소선, gray 배경<br>- **JavaScript 함수 추가**: `toggleTodoComplete(todoId, isChecked)` 구현<br> - 완료 처리: 확인 다이얼로그 → .completed 클래스 추가 → 성공 토스트<br> - 미완료 처리: 확인 다이얼로그 → .completed 클래스 제거 → 정보 토스트<br> - 사용자 취소 시: 체크박스 상태 원복<br>- **샘플 데이터 업데이트**: 3개 Todo 카드에 D-day 배지 추가<br> - Todo 1: D-2 (badge-warning) + 높음<br> - Todo 2: D-7 (badge-primary) + 보통<br> - Todo 3: D-day (badge-error) + 높음<br>- **프로토타입**: design/uiux/prototype/05-회의진행.html 수정 (~120줄 추가)<br>- **스타일 가이드**: design/uiux/style-guide.md v1.2.2 (변경 이력 추가)<br>- **완전한 일관성**: 05-회의진행 ≡ 10-회의록상세조회 ≡ 09-Todo관리 (3개 화면 Todo 카드 100% 통일) | | 1.4.12 | 2025-10-23 | 강지수 | 05-회의진행 화면 Todo 카드 스타일 10-회의록상세조회와 완전 통일<br>- **Todo 카드 HTML 구조 통일**:<br> - 기존: inline-flex 기반 간소화 구조<br> - 변경: `.todo-card` > `.todo-top` > (`.todo-checkbox-wrapper` + `.todo-content-wrapper` + `.todo-actions`) 구조<br> - 10-회의록상세조회.html과 100% 동일한 HTML 구조 적용<br>- **CSS 스타일 추가**: 페이지 하단 `<style>` 블록에 완전한 Todo 카드 스타일 추가<br> - `.todo-card`: 카드 기본 스타일 (padding, border, shadow, hover 효과)<br> - `.todo-checkbox`: 24px 체크박스 (border-radius 6px, checked 시 success 색상)<br> - `.todo-badges`: D-day 배지 + 우선순위 배지 컨테이너<br> - `.todo-title`: font-body, regular 스타일 제목<br> - `.todo-meta-row`: 담당자 + 마감일 메타 정보<br> - `.todo-actions`: 절대 위치 (top-right) 편집 버튼<br> - `.icon-btn`: 32px 아이콘 버튼, 호버 시 scale(1.1) 효과<br> - `.completed` 상태: opacity 0.5, 취소선, gray 배경<br>- **JavaScript 함수 추가**: `toggleTodoComplete(todoId, isChecked)` 구현<br> - 완료 처리: 확인 다이얼로그 → .completed 클래스 추가 → 성공 토스트<br> - 미완료 처리: 확인 다이얼로그 → .completed 클래스 제거 → 정보 토스트<br> - 사용자 취소 시: 체크박스 상태 원복<br>- **샘플 데이터 업데이트**: 3개 Todo 카드에 D-day 배지 추가<br> - Todo 1: D-2 (badge-warning) + 높음<br> - Todo 2: D-7 (badge-primary) + 보통<br> - Todo 3: D-day (badge-error) + 높음<br>- **프로토타입**: design/uiux/prototype/05-회의진행.html 수정 (~120줄 추가)<br>- **스타일 가이드**: design/uiux/style-guide.md v1.2.2 (변경 이력 추가)<br>- **완전한 일관성**: 05-회의진행 ≡ 10-회의록상세조회 ≡ 09-Todo관리 (3개 화면 Todo 카드 100% 통일) |
| 1.4.13 | 2025-10-23 | 강지수 | 05-회의진행 화면 D-day 배지 제거 (회의 중 Todo는 마감일 미확정)<br>- **정책 변경**: 회의 진행 중 Todo는 마감일이 확정되지 않았으므로 D-day 배지 숨김<br> - 회의 중 작성되는 Todo의 마감일은 임시 값<br> - 회의 종료 후 회의록 확정 시 마감일도 함께 확정<br>- **Todo 카드 배지 수정**: 우선순위 배지만 표시<br> - Todo 1: 높음 (D-day 배지 제거)<br> - Todo 2: 보통 (D-day 배지 제거)<br> - Todo 3: 높음 (D-day 배지 제거)<br>- **마감일 표시 간소화**: "2025-10-23 마감" → "마감: 10/23"<br> - 연도 제거로 가독성 향상<br> - 짧은 형식으로 카드 공간 효율 개선<br>- **다른 화면 비교**:<br> - 09-Todo관리: D-day 배지 표시 (확정된 회의록의 Todo)<br> - 10-회의록상세조회: D-day 배지 표시 (확정 완료된 회의록)<br> - 05-회의진행: D-day 배지 숨김 (진행 중, 마감일 미확정)<br>- **프로토타입**: design/uiux/prototype/05-회의진행.html 수정<br>- **스타일 가이드**: design/uiux/style-guide.md v1.2.3 (변경 이력 추가) | | 1.4.13 | 2025-10-23 | 강지수 | 05-회의진행 화면 D-day 배지 제거 (회의 중 Todo는 마감일 미확정)<br>- **정책 변경**: 회의 진행 중 Todo는 마감일이 확정되지 않았으므로 D-day 배지 숨김<br> - 회의 중 작성되는 Todo의 마감일은 임시 값<br> - 회의 종료 후 회의록 확정 시 마감일도 함께 확정<br>- **Todo 카드 배지 수정**: 우선순위 배지만 표시<br> - Todo 1: 높음 (D-day 배지 제거)<br> - Todo 2: 보통 (D-day 배지 제거)<br> - Todo 3: 높음 (D-day 배지 제거)<br>- **마감일 표시 간소화**: "2025-10-23 마감" → "마감: 10/23"<br> - 연도 제거로 가독성 향상<br> - 짧은 형식으로 카드 공간 효율 개선<br>- **다른 화면 비교**:<br> - 09-Todo관리: D-day 배지 표시 (확정된 회의록의 Todo)<br> - 10-회의록상세조회: D-day 배지 표시 (확정 완료된 회의록)<br> - 05-회의진행: D-day 배지 숨김 (진행 중, 마감일 미확정)<br>- **프로토타입**: design/uiux/prototype/05-회의진행.html 수정<br>- **스타일 가이드**: design/uiux/style-guide.md v1.2.3 (변경 이력 추가) |
| 1.4.14 | 2025-10-24 | 이미준 | 12-회의록목록조회 화면 데이터 아키텍처 문서화<br>- **데이터 아키텍처 섹션 추가**: 데이터/뷰 레이어 분리 구조 설명<br> - 데이터 레이어: common.js → SAMPLE_MINUTES 배열 (30개 샘플)<br> - 뷰 레이어: 12-회의록목록조회.html → renderMeetings(), createMeetingCard() 함수<br> - 렌더링 방식: 동적 렌더링, 초기 10개 표시, "10개 더보기" 버튼으로 추가 로딩<br>- **정렬 옵션 레이블 변경**: "최신순" → "최근수정순", "회의일시순" → "최근회의순"<br>- **페이지네이션 기능 문서화**: 초기 10개 표시, "10개 더보기" 버튼 기능 설명<br>- **샘플 데이터 분포 명시**: 총 30개 (작성중 13개, 확정완료 17개)<br>- **프로토타입 파일 경로 추가**: design/uiux/prototype/12-회의록목록조회.html<br>- **스타일 가이드 버전 동기화**: v1.2.4 | | 1.4.14 | 2025-10-24 | 이미준 | 12-회의록목록조회 화면 데이터 아키텍처 문서화<br>- **데이터 아키텍처 섹션 추가**: 데이터/뷰 레이어 분리 구조 설명<br> - 데이터 레이어: common.js → SAMPLE_MINUTES 배열 (30개 샘플)<br> - 뷰 레이어: 12-회의록목록조회.html → renderMeetings(), createMeetingCard() 함수<br> - 렌더링 방식: 동적 렌더링, 초기 10개 표시, "10개 더보기" 버튼으로 추가 로딩<br>- **정렬 옵션 레이블 변경**: "최신순" → "최근수정순", "회의일시순" → "최근회의순"<br>- **페이지네이션 기능 문서화**: 초기 10개 표시, "10개 더보기" 버튼 기능 설명<br>- **샘플 데이터 분포 명시**: 총 30개 (작성중 13개, 확정완료 17개)<br>- **프로토타입 파일 경로 추가**: design/uiux/prototype/12-회의록목록조회.html<br>- **스타일 가이드 버전 동기화**: v1.2.4 |
| 1.4.15 | 2025-10-24 | 이미준 | 06-검증완료 화면 삭제 (유저스토리 v2.1.2 변경사항 반영)<br>- **화면 삭제**: 06-검증완료 화면 전체 삭제<br> - 안건별 검증 기능이 11-회의록수정 화면으로 통합됨<br> - 섹션별 검증 방식에서 안건별 검증 방식으로 변경 (유저스토리 UFR-COLLAB-030 → 안건 기반 구조로 전환)<br>- **유저스토리 매핑 업데이트**:<br> - Collaboration 서비스: UFR-COLLAB-010 ~ UFR-COLLAB-030 → UFR-COLLAB-010 ~ UFR-COLLAB-020로 변경<br> - 프로토타입 화면 목록 테이블에서 06-검증완료 행 제거<br>- **화면 번호 유지**: 다른 화면 번호는 변경하지 않음 (프로토타입 파일명 유지)<br> - 07-회의종료, 09-Todo관리, 10-회의록상세조회, 11-회의록수정, 12-회의록목록조회 번호 유지<br>- **변경 이력**: 과거 버전의 UFR-COLLAB-030 언급은 역사적 맥락으로 유지 |
| 1.4.16 | 2025-10-24 | 이미준 | 사용자 역할 용어 통일 (유저스토리 v2.1.2 반영)<br>- **용어 정의 명확화**: "회의 생성자"와 "회의 참석자" 용어로 통일<br> - 설계 목표: "회의록 작성자" → "회의 참석자"로 수정<br>- **화면별 권한 정보 추가**:<br> - 03-회의예약: 모든 사용자 (예약 생성 시 자동으로 회의 생성자가 됨)<br> - 04-템플릿선택: 회의 생성자 전용<br> - 05-회의진행: 회의 시작/종료는 회의 생성자 전용, 회의록 편집은 모든 참석자<br> - 07-회의종료: 회의 생성자 전용<br> - 09-Todo관리: 모든 회의 참석자 (본인이 담당자인 Todo만 조회/수정 가능)<br> - 10-회의록상세조회: 모든 회의 참석자 (조회 전용)<br> - 11-회의록수정: 검증완료 전(모든 참석자), 검증완료 후(회의 생성자만) - 기존 권한 제어 유지<br> - 12-회의록목록조회: 모든 회의 참석자 (본인이 참석한 회의록만 조회)<br>- **스타일 가이드 동기화**: design/uiux/style-guide.md v1.2.5 (용어 정의 섹션 추가)<br>- **통일성 달성**: 유저스토리, 화면설계서, 스타일 가이드 간 용어 완전 통일 |
--- ---

View File

@ -1,462 +0,0 @@
# 요구사항 설계 검토 보고서
**작성자**: 강지수 (Product Designer)
**작성일**: 2025-10-23
**검토 범위**: 유저스토리, UI/UX 설계서, 프로토타입 HTML
**검토 목적**: 세 문서 간 일관성 및 완결성 확인, 보완 필요 사항 도출
---
## 📊 검토 요약
### 전체 평가
- **일관성 수준**: ⭐⭐⭐⭐☆ (4/5)
- **완성도**: ⭐⭐⭐⭐☆ (4/5)
- **주요 이슈**: 유저스토리와 설계서 간 일부 항목 불일치, 프로토타입 구현 누락
### 주요 발견사항
✅ **잘된 점**
- 대시보드, 회의예약, 회의진행 등 핵심 화면은 세 문서가 잘 정렬됨
- Mobile-first 설계 철학이 일관되게 적용됨
- 반응형 네비게이션 구조가 명확하게 정의됨
⚠️ **보완 필요**
- 유저스토리 UFR-MEET-046/047과 프로토타입 간 매핑 불완전
- 일부 프로토타입 파일 누락 (회의록 상세조회 등)
- UI/UX 설계서의 화면 번호와 실제 프로토타입 파일명 불일치
---
## 📋 상세 검토 결과
### 1. 유저스토리 vs UI/UX 설계서
#### 1.1 잘 매핑된 항목 ✅
| 유저스토리 ID | 화면 | 설계서 섹션 | 상태 |
|--------------|------|------------|------|
| UFR-USER-010 | 로그인 | 01-로그인 | ✅ 완료 |
| AFR-USER-020 | 대시보드 | 02-대시보드 | ✅ 완료 |
| UFR-MEET-010 | 회의예약 | 03-회의예약 | ✅ 완료 |
| UFR-MEET-020 | 템플릿선택 | 04-템플릿선택 | ✅ 완료 |
| UFR-MEET-030 | 회의시작 | 05-회의진행 | ✅ 완료 |
| UFR-COLLAB-030 | 검증완료 | 06-검증완료 | ✅ 완료 |
| UFR-MEET-040/050 | 회의종료 | 07-회의종료 | ✅ 완료 |
| UFR-TODO-010/030 | Todo관리 | 09-Todo관리 | ✅ 완료 (화면번호 08→09) |
| UFR-MEET-055 | 회의록수정 | 11-회의록수정 | ✅ 완료 (화면번호 10→11) |
#### 1.2 불일치 또는 누락 항목 ⚠️
**[이슈 1] 회의록 목록조회 화면 매핑 불완전**
**유저스토리**: UFR-MEET-046 (회의록목록조회)
```
- 설명: 회의록 작성자로서, 작성한 회의록들을 효율적으로 관리하기 위해,
회의록 목록을 조회하고 필터링하고 싶다
- 주요 기능:
- 상태별 필터링 (전체/작성중/확정완료)
- 정렬 옵션 (최신순/회의일시순/제목순)
- 카테고리 필터 (전체/공유받은 회의/참석한 회의/생성한 회의)
- 검색 기능
```
**UI/UX 설계서**: 11-회의록목록조회 (존재)
- 화면번호 불일치: 유저스토리 작성 시점에는 없었으나, v1.6에서 추가됨
- 카테고리 필터 변경: "공유받은 회의" 제거됨 (v1.6 회의록 공유 기능 제거)
**프로토타입**: `12-회의록목록조회.html` (존재)
- 파일명과 설계서 화면번호 불일치 (12 vs 11)
**보완 방안**:
1. 유저스토리 UFR-MEET-046에 화면번호 "11-회의록목록조회" 추가
2. 프로토타입 파일명을 `11-회의록목록조회.html`로 변경 (또는 설계서를 12로 수정)
3. 카테고리 필터에서 "공유받은 회의" 제거 명시
---
**[이슈 2] 회의록 상세조회 화면 프로토타입 누락**
**유저스토리**: UFR-MEET-047 (회의록상세조회)
```
- 설명: 회의록 작성자로서, 지난 회의록의 상세 정보와 전체 내용을 한눈에 확인하고 싶다
- 주요 기능:
- 회의 기본 정보 표시
- 섹션별 상세 내용 (AI 요약, 논의사항, 결정사항)
- 관련 회의록 섹션 (최대 3개)
- 수정/공유 버튼
```
**UI/UX 설계서**: 09-회의록상세조회 (존재, v1.6에서 화면번호 10→09로 변경)
- 탭 구조: 회의록/대시보드 (2개 탭)
- 관련 회의록 자동 표시 (UFR-AI-040 반영)
**프로토타입**: `10-회의록상세조회.html` ⚠️ **발견됨**
- 파일명과 설계서 화면번호 불일치 (10 vs 09)
**보완 방안**:
1. 프로토타입 파일명을 `09-회의록상세조회.html`로 변경 (또는 설계서를 10으로 수정)
2. 탭 구조 (회의록/대시보드) 구현 확인
3. 관련 회의록 섹션 UI 구현 여부 확인
---
**[이슈 3] 회의록수정 화면 매핑**
**유저스토리**: UFR-MEET-055 (회의록수정)
```
- 설명: 검증이 완료되지 않았거나 수정이 필요한 지난 회의록을 수정하고 싶다
- 주요 기능:
- 회의 제목 수정
- 섹션별 AI 요약 수정
- AI 재생성 버튼
- 참고자료 추가/삭제
```
**UI/UX 설계서**: 11-회의록수정 (v1.6에서 화면번호 10→11로 변경)
**프로토타입**: `11-회의록수정.html` (존재)
- 화면번호와 일치 ✅
**보완 방안**: 없음 (정상)
---
### 2. UI/UX 설계서 vs 프로토타입
#### 2.1 파일명과 화면번호 불일치 매트릭스
| 설계서 화면 | 설계서 번호 | 프로토타입 파일 | 파일 번호 | 상태 |
|-----------|-----------|---------------|----------|------|
| 로그인 | 01 | 01-로그인.html | 01 | ✅ 일치 |
| 대시보드 | 02 | 02-대시보드.html | 02 | ✅ 일치 |
| 회의예약 | 03 | 03-회의예약.html | 03 | ✅ 일치 |
| 템플릿선택 | 04 | 04-템플릿선택.html | 04 | ✅ 일치 |
| 회의진행 | 05 | 05-회의진행.html | 05 | ✅ 일치 |
| 검증완료 | 06 | 06-검증완료.html | 06 | ✅ 일치 |
| 회의종료 | 07 | 07-회의종료.html | 07 | ✅ 일치 |
| Todo관리 | 09 | 09-Todo관리.html | 09 | ✅ 일치 (08→09 변경) |
| 회의록상세조회 | 09 | 10-회의록상세조회.html | 10 | ⚠️ **불일치** |
| 회의록수정 | 11 | 11-회의록수정.html | 11 | ✅ 일치 (10→11 변경) |
| 회의록목록조회 | 11 | 12-회의록목록조회.html | 12 | ⚠️ **불일치** |
#### 2.2 설계서에 정의되었으나 프로토타입 누락 ❌
- 없음 (모든 주요 화면 구현됨)
#### 2.3 프로토타입에 있으나 설계서 미반영 ⚠️
- `02-대시보드 copy.html`: 중복 파일, 삭제 필요
---
### 3. 네비게이션 일관성 검토
#### 3.1 Mobile 하단 네비게이션
**UI/UX 설계서 (v1.4)**: 4개 메뉴 (홈/회의록/Todo/프로필)
**프로토타입 구현**:
- ✅ `02-대시보드.html`: 3개 메뉴 (홈/회의록/Todo)
- ✅ `09-Todo관리.html`: 3개 메뉴 (홈/회의록/Todo)
- ✅ `12-회의록목록조회.html`: 3개 메뉴 (홈/회의록/Todo)
**현황**:
- 모든 프로토타입이 **3개 메뉴**로 통일되어 구현됨
- 설계서에 명시된 "프로필" 메뉴는 프로토타입에 미구현
**보완 방안**:
- 설계서를 프로토타입 구현 기준(3개 메뉴)으로 업데이트 필요
- 또는 프로필 메뉴가 필요한 경우 모든 프로토타입에 추가 구현 필요
#### 3.2 Desktop 좌측 사이드바
**UI/UX 설계서**: 로고 + 회의 목록/Todo 관리 + 사용자 정보
**프로토타입 구현**:
- ✅ `02-대시보드.html`: 로고 + 회의 목록/Todo 관리 (사용자 정보 없음)
**보완 방안**: 사이드바 하단에 사용자 정보 영역 추가
---
### 4. 주요 기능별 구현 완성도
#### 4.1 대시보드 (02-대시보드.html) ⭐⭐⭐⭐⭐
**유저스토리 AFR-USER-020 반영도**: 95%
**구현 완료**:
- ✅ 통계 카드 (예정된 회의/진행 중 Todo/완료율)
- ✅ 예정된/진행중 회의 목록 (진행중 우선, 최대 3개)
- ✅ 내 Todo (우선순위 정렬, 최대 5개)
- ✅ 내 회의록 (최근 3개, 상태 배지)
- ✅ FAB 버튼 (회의예약/바로시작)
- ✅ 반응형 네비게이션 (Mobile 하단 / Desktop 사이드바)
**미구현**:
- ⚠️ "공유받은 회의록" 섹션 (v1.6에서 제거됨, 유저스토리 업데이트 필요)
**설계서 대비 구현률**: 100% (공유 기능 제거 반영)
#### 4.2 회의예약 (03-회의예약.html) ⭐⭐⭐⭐⭐
**유저스토리 UFR-MEET-010 반영도**: 100%
**구현 완료**:
- ✅ 회의 기본 정보 입력 (제목/날짜/시간)
- ✅ 커스텀 시간 선택 팝업 (시/분 선택)
- ✅ 종일 회의 토글
- ✅ 온라인/오프라인 토글
- ✅ 참석자 추가 (칩 UI, 검색 모달)
- ✅ 안건 입력
- ✅ 임시저장/예약완료
**설계서 대비 구현률**: 100%
#### 4.3 회의록목록조회 (12-회의록목록조회.html) ⭐⭐⭐⭐☆
**유저스토리 UFR-MEET-046 반영도**: 90%
**구현 완료**:
- ✅ 상태별 필터 (전체/작성중/확정완료)
- ✅ 정렬 옵션 (최신순/회의일시순/제목순)
- ✅ 참여 유형 탭 (전체/참석한 회의/생성한 회의)
- ✅ 검색 기능
- ✅ 통계 표시 (전체/작성중/확정완료 개수)
**설계서 대비 누락**:
- ⚠️ 카테고리 필터 "공유받은 회의" (v1.6 제거됨, 반영 완료)
**설계서 대비 구현률**: 95%
#### 4.4 Todo관리 (09-Todo관리.html) ⭐⭐⭐⭐⭐
**유저스토리 UFR-TODO-010/030 반영도**: 100%
**구현 완료**:
- ✅ 통계 카드 (전체/진행중/지연중/완료, 완료율 원형 차트)
- ✅ 필터 탭 (전체/진행중/미진행/완료/지연중)
- ✅ Todo 카드 (체크박스, 제목, 배지, 메타정보)
- ✅ 진행률 표시 (프로그레스 바)
- ✅ 우선순위/마감일/상태 표시
**설계서 대비 구현률**: 100%
---
## 🔧 보완 필요 사항
### 우선순위 HIGH (필수)
#### 1. 파일명과 화면번호 통일 (소요: 30분)
**현재 상태**:
- 설계서: 09-회의록상세조회, 11-회의록목록조회
- 프로토타입: 10-회의록상세조회.html, 12-회의록목록조회.html
**권장 방안 A (설계서 수정)**:
```
09-회의록상세조회 → 10-회의록상세조회
11-회의록목록조회 → 12-회의록목록조회
```
- 장점: 프로토타입 파일 변경 불필요, 기존 링크 유지
- 단점: 화면번호 연속성 깨짐 (08→09→10→11→12)
**권장 방안 B (프로토타입 파일명 수정)** ⭐ **추천**:
```
10-회의록상세조회.html → 09-회의록상세조회.html
12-회의록목록조회.html → 11-회의록목록조회.html
```
- 장점: 화면번호 연속성 유지, 설계서와 완벽 일치
- 단점: HTML 내부 링크 및 JavaScript 파일 경로 수정 필요
**실행 계획**:
1. 프로토타입 파일명 변경
2. 모든 HTML 파일에서 링크 경로 수정 (`navigateTo()` 함수 호출 부분)
3. 설계서 "프로토타입 화면 목록" 테이블 업데이트
---
#### 2. 유저스토리 업데이트 (소요: 1시간)
**UFR-MEET-046 (회의록목록조회)** 수정:
```markdown
- 화면번호: 11-회의록목록조회 (추가)
- 카테고리 필터:
- 변경 전: 전체/공유받은 회의/참석한 회의/생성한 회의
- 변경 후: 전체/참석한 회의/생성한 회의
- 사유: v1.6 회의록 공유 기능 제거
```
**AFR-USER-020 (대시보드)** 수정:
```markdown
- 공유받은 회의록 섹션 제거
- 사유: v1.6 회의록 공유 기능 제거
- 변경사항: "내 회의록" 섹션만 유지 (참여자/생성자 기준)
```
**UFR-MEET-047 (회의록상세조회)** 수정:
```markdown
- 화면번호: 09-회의록상세조회 (추가)
- 부가 기능:
- 변경 전: 회의록 수정 버튼, 회의록 공유 버튼
- 변경 후: 회의록 수정 버튼, 더보기 메뉴 (다운로드/삭제)
- 사유: v1.6 회의록 공유 기능 제거
```
---
#### 3. Mobile 하단 네비게이션 통일 (소요: 30분)
**현재 상태**:
- `02-대시보드.html`, `09-Todo관리.html`: 3개 메뉴 (홈/회의록/Todo)
- `12-회의록목록조회.html`: 4개 메뉴 (홈/회의록/Todo/프로필)
**권장 방안**: 3개 메뉴로 통일 ⭐
- 사유: 프로필 기능이 현재 구현되지 않음, 불필요한 복잡도 제거
- 실행: `12-회의록목록조회.html`에서 프로필 메뉴 제거
- 설계서 업데이트: v1.7에서 Mobile 하단 네비게이션을 3개로 표준화
---
### 우선순위 MEDIUM (권장)
#### 4. Desktop 사이드바 사용자 정보 영역 추가 (소요: 1시간)
**현재 상태**: 로고 + 메뉴만 존재
**설계서 스펙**:
```
- 위치: 사이드바 하단
- 구성:
- 사용자 아바타 (32px 원형)
- 이름 (Medium)
- 이메일 (Small, 회색)
- 설정 아이콘 (톱니바퀴)
```
**구현 예시**:
```html
<div class="sidebar-user">
<div class="sidebar-user-avatar">
<img src="img/user-avatar.png" alt="김민준">
</div>
<div class="sidebar-user-info">
<div class="sidebar-user-name">김민준</div>
<div class="sidebar-user-email">kim.minjun@company.com</div>
</div>
<button class="sidebar-user-settings">⚙️</button>
</div>
```
---
#### 5. 회의록상세조회 프로토타입 검증 (소요: 2시간)
**검증 항목**:
- [ ] 탭 구조 (회의록/대시보드) 구현 여부
- [ ] 관련 회의록 섹션 UI 구현 여부 (UFR-AI-040)
- [ ] 관련도 점수 표시 (백분율 + 색상 코딩)
- [ ] 공유 버튼 제거 확인 (v1.6 변경사항)
**실행 계획**:
1. `10-회의록상세조회.html` 파일 상세 검토
2. 누락된 UI 요소 구현
3. 설계서와 비교하여 일치 여부 확인
---
### 우선순위 LOW (선택)
#### 6. 중복 파일 정리 (소요: 5분)
**삭제 대상**:
- `02-대시보드 copy.html`: 백업 파일로 추정, 삭제 권장
---
## 📈 통일성 개선 로드맵
### Phase 1: 긴급 조치 (1일 이내)
1. ✅ 파일명과 화면번호 통일 (권장 방안 B)
2. ✅ 유저스토리 업데이트 (UFR-MEET-046, AFR-USER-020, UFR-MEET-047)
3. ✅ Mobile 하단 네비게이션 통일 (3개 메뉴)
**예상 소요 시간**: 2시간
**담당**: Frontend Developer + Product Designer
---
### Phase 2: 품질 개선 (3일 이내)
4. ✅ Desktop 사이드바 사용자 정보 영역 추가
5. ✅ 회의록상세조회 프로토타입 검증 및 보완
6. ✅ 중복 파일 정리
**예상 소요 시간**: 3시간
**담당**: Frontend Developer
---
### Phase 3: 문서화 (1주일 이내)
7. ✅ UI/UX 설계서 v1.7 업데이트
- Mobile 하단 네비게이션 3개로 표준화
- 회의록 공유 기능 제거 반영
- 화면 번호 및 파일명 매핑 테이블 업데이트
8. ✅ 유저스토리 v2.1 업데이트
- 화면번호 추가
- 회의록 공유 관련 항목 제거
- 카테고리 필터 업데이트
**예상 소요 시간**: 2시간
**담당**: Product Designer + Service Planner
---
## 🎯 최종 권고사항
### 즉시 조치 필요 (HIGH)
1. **파일명 통일**: 프로토타입 파일명을 설계서 화면번호와 일치시키기
2. **유저스토리 업데이트**: 공유 기능 제거 및 화면번호 추가
3. **네비게이션 표준화**: Mobile 하단 네비게이션 3개 메뉴로 통일
### 단기 개선 권장 (MEDIUM)
4. **사이드바 완성**: Desktop 사이드바 사용자 정보 영역 추가
5. **프로토타입 검증**: 회의록상세조회 화면 구현 완성도 확인
### 장기 개선 고려 (LOW)
6. **문서 버전 관리**: 설계서와 유저스토리 버전 동기화 프로세스 수립
7. **자동화 검증**: 파일명/화면번호 일치 여부 자동 검증 스크립트 개발
---
## 📝 검토 결론
**전체 평가**: 세 문서(유저스토리, UI/UX 설계서, 프로토타입) 간 일관성은 **양호**한 수준입니다. 대부분의 핵심 기능은 잘 정렬되어 있으며, 프로토타입 구현 완성도도 높습니다.
**주요 개선점**:
- 파일명과 화면번호 통일 (30분 소요)
- 유저스토리 업데이트 (1시간 소요)
- 네비게이션 표준화 (30분 소요)
**예상 총 작업 시간**: 약 5~7시간 (Phase 1+2 기준)
**추천 실행 순서**:
1. Phase 1 긴급 조치 (2시간) → 즉시 실행
2. Phase 2 품질 개선 (3시간) → 3일 이내
3. Phase 3 문서화 (2시간) → 1주일 이내
위 권고사항을 반영하면 **일관성 수준 5/5**, **완성도 5/5**를 달성할 수 있을 것으로 예상됩니다.
---
**다음 단계**: 개발팀 회의를 통해 Phase 1 긴급 조치 일정 확정 및 역할 분담
**검토자**: 강지수 (Product Designer)
**승인 필요**: 이미준 (Service Planner), 최유진 (Frontend Developer)

View File

@ -1,334 +0,0 @@
# 유저스토리·화면설계서·프로토타입 교차 검증 보고서 (v1.1)
**작성자**: 이미준 (도그냥, 서비스 기획자), 강지수 (Product Designer)
**검증 일시**: 2025-10-24
**문서 버전**:
- 유저스토리: v2.0.5
- 화면설계서: v1.4.14
- 프로토타입: 최종 수정 2025-10-23
---
## 📋 검증 개요
### 검증 대상
1. **유저스토리** (`design/userstory.md`)
2. **화면설계서** (`design/uiux/uiux.md`)
3. **프로토타입 HTML** (`design/uiux/prototype/*.html`)
### 검증 범위
- 02-대시보드 (AFR-USER-020)
- 09-Todo관리 (UFR-TODO-040)
- 10-회의록상세조회 (UFR-MEET-047)
- 11-회의록수정 (UFR-MEET-055)
- 12-회의록목록조회 (UFR-MEET-046)
### 전체 일관성 평가
```
✅ 일관성 지수: 90% (양호)
⚠️ 긴급 수정 필요: 2건 (P0)
🟡 중요 개선 사항: 3건 (P1)
📊 설계 개선 권장: 1건 (P2)
```
---
## 🎯 주요 발견사항 요약
### ✅ 우수 사항
1. **화면번호 완전 통일**: 유저스토리-설계서-프로토타입 간 화면번호 100% 일치
2. **Todo 카드 스타일 통일**: common.css 기반 중앙 관리로 02/09/10 화면 간 일관성 확보
3. **데이터 아키텍처 명확화**: common.js SAMPLE_MINUTES 기반 구조가 유저스토리에 문서화됨
4. **권한 정책 일관성**: 회의록 수정/검증완료 권한 정책이 세 문서 간 100% 일치
### ⚠️ 긴급 수정 필요 (P0)
#### 1. **10-회의록상세조회.html: 기본 노출 탭 불일치** 🔴
- **유저스토리 (UFR-MEET-047)**:
```
- **탭 구성**: 대시보드 / 회의록 (2개 탭)
- **기본 노출**: 대시보드 탭 우선 노출
```
- **화면설계서**: 대시보드 탭 기본 노출 명시
- **프로토타입 (10-회의록상세조회.html, line 952)**:
```html
<div id="dashboard-content" class="tab-content active">
```
**실제로는 "대시보드" 탭이 기본 노출됨** (HTML 구조 상 active 클래스가 dashboard-content에 있음)
- **JavaScript (line 1438-1441)**:
```javascript
// 선택된 탭 활성화
tab.classList.add('active');
document.getElementById(`${targetTab}-content`).classList.add('active');
```
→ 탭 전환 로직은 정상
**실제 검증 결과**: ✅ **일치함** (코드 재확인 결과 dashboard-content가 기본 active)
**권장 사항**: 초기 탭 활성화 상태를 더 명확하게 표시하기 위해 주석 추가 권장
#### 2. **12-회의록목록조회: 검증완료율 미표시** 🔴
- **유저스토리 (UFR-MEET-046)**:
```
- 목록 표시 정보:
- 검증 완료율 (작성중인 경우, %)
```
- **화면설계서**: 검증완료율 표시 명시
- **프로토타입 (12-회의록목록조회.html)**: **미구현** (코드 확인 필요)
**수정 필요**: 작성중 상태 회의록에 검증완료율 표시 추가 구현
**예상 공수**: 1시간
---
### 🟡 중요 개선 사항 (P1)
#### 3. **11-회의록수정: 상태 자동 변경 로직 미구현** 🟡
- **유저스토리 (UFR-MEET-055)**:
```
- 🔄 **회의록 상태**: 수정 시 자동으로 '작성중'으로 변경 (사용자 직접 변경 불가)
- 확정완료 상태였던 경우 → 작성중 상태로 변경
```
- **화면설계서**: 수정 시 상태 자동 변경 명시
- **프로토타입 (11-회의록수정.html)**: 상태 자동 변경 로직 **미구현** (확인 필요)
**개선 필요**: 저장 시 회의록 상태를 '작성중'으로 자동 변경하는 로직 추가
**예상 공수**: 30분
#### 4. **09-Todo관리: 담당자 변경 권한 제어 미흡** 🟡
- **유저스토리 (UFR-TODO-040)**:
```
- **Todo 담당자**: 본인에게 할당된 Todo만 편집 가능
- 수정 가능 항목: 제목, 마감일, 우선순위
- 담당자 변경 불가
```
- **화면설계서**: 담당자 변경 권한 제어 명시
- **프로토타입 (09-Todo관리.html, line 865-873)**:
```javascript
if (isCreator) {
// 회의 생성자: 담당자 변경 가능
assigneeGroup.style.display = 'block';
} else {
// 일반 담당자: 담당자 변경 불가
assigneeGroup.style.display = 'none';
}
```
**회의 생성자 여부만 체크**, 담당자 본인 여부는 미체크
**개선 필요**: 담당자 본인인 경우에도 담당자 변경 불가 로직 추가
**예상 공수**: 30분
#### 5. **common.js: 진행중(ongoing) 회의 상태 샘플 데이터 부재** 🟡
- **유저스토리 (AFR-USER-020)**:
```
- **진행중 회의** (우선 표시)
- 상태: 회의 시작됨, 아직 종료 안 됨, 참여 가능
- 긴급 표시: "진행중" 배지 (빨강/주황색, 애니메이션)
```
- **화면설계서**: 진행중 회의 표시 명시
- **프로토타입 (common.js)**: `status: 'ongoing'` 샘플 데이터 **부재**
**개선 필요**: SAMPLE_MEETINGS에 ongoing 상태 회의 1-2개 추가
**예상 공수**: 20분
---
### 📊 설계 개선 권장 (P2)
#### 6. **10-회의록상세조회: Todo 진행률 표시 위치 개선** 📊
- **유저스토리**: Todo 진행상황 섹션에 전체 진행률 표시 명시
- **화면설계서**: 전체 진행률 표시 명시
- **프로토타입 (10-회의록상세조회.html, line 1042-1053)**:
```html
<div style="margin-bottom: var(--space-lg);">
<div style="display: flex; justify-content: space-between;">
<span>전체 진행률</span>
<span>40%</span>
</div>
<div style="width: 100%; height: 8px;">...</div>
</div>
```
→ 구현됨
**권장 사항**: 진행률 바 시각적 개선 (색상 구간별 차등 적용 권장)
**우선순위**: 낮음 (v2.0 고도화 시 고려)
---
## 📑 상세 검증 결과
### 1. 유저스토리 → 화면설계서 반영 검증
| 유저스토리 ID | 주요 요구사항 | 화면설계서 반영 | 비고 |
|--------------|-------------|---------------|------|
| AFR-USER-020 | 대시보드 구성 | ✅ 완전 반영 | 통계 카드, 최근 회의, Todo, 회의록 섹션 모두 명시 |
| UFR-MEET-046 | 회의록목록조회 | ⚠️ 부분 반영 | 검증완료율 표시 명시되어 있으나 프로토타입 미구현 |
| UFR-MEET-047 | 회의록상세조회 | ✅ 완전 반영 | 탭 구조, 기본 노출 탭, Todo 진행상황 모두 반영 |
| UFR-MEET-055 | 회의록수정 | ⚠️ 부분 반영 | 권한 제어는 반영, 상태 자동 변경 로직 미명시 |
| UFR-TODO-040 | Todo관리 | ✅ 완전 반영 | 통계 블록, 필터, 편집 모달, 권한 제어 모두 명시 |
| UFR-COLLAB-030 | 검증완료 | ✅ 완전 반영 | 섹션 잠금 정책 명확히 반영 |
### 2. 화면설계서 → 프로토타입 반영 검증
| 화면번호 | 화면명 | 주요 UI 요소 | 프로토타입 구현 | 비고 |
|---------|-------|------------|---------------|------|
| 02 | 대시보드 | 통계 카드 (2개) | ✅ 구현 | stat-box 스타일 적용 |
| 02 | 대시보드 | 최근 회의 (진행중 우선) | ✅ 구현 | 정렬 로직 정상 (line 688-701) |
| 02 | 대시보드 | 내 Todo (우선순위순 5개) | ✅ 구현 | 정렬 로직 정상 (line 753-761) |
| 02 | 대시보드 | 내 회의록 (최근 4개) | ✅ 구현 | 필터 및 정렬 정상 (line 853-856) |
| 09 | Todo관리 | 통계 블록 (전체/마감임박/지연) | ✅ 구현 | stat-box 스타일 (line 524-537) |
| 09 | Todo관리 | 필터 탭 (전체/지연/마감임박/완료) | ✅ 구현 | filter-tab 스타일 (line 540-553) |
| 09 | Todo관리 | 편집 모달 (담당자 필드 조건부 표시) | ⚠️ 부분 구현 | 회의 생성자 체크만, 담당자 본인 체크 미흡 |
| 10 | 회의록상세조회 | 탭 네비게이션 (대시보드/회의록) | ✅ 구현 | 탭 전환 로직 정상 (line 1429-1441) |
| 10 | 회의록상세조회 | 대시보드 탭 기본 노출 | ✅ 구현 | active 클래스 정상 (line 952) |
| 10 | 회의록상세조회 | Todo 진행상황 (필터, 전체 진행률) | ✅ 구현 | 필터 및 진행률 바 정상 |
| 12 | 회의록목록조회 | 필터/정렬/검색 | ✅ 구현 (추정) | 파일 미확인, 설계서 기준 |
| 12 | 회의록목록조회 | 검증완료율 표시 | ❌ 미구현 | 작성중 상태 회의록에 % 미표시 |
### 3. 상호 일관성 검증
#### 3.1 데이터 구조 일관성
| 항목 | 유저스토리 | 화면설계서 | 프로토타입 (common.js) | 일치 여부 |
|-----|----------|-----------|---------------------|----------|
| 회의 상태 | scheduled, ongoing, completed | scheduled, ongoing, completed | scheduled, completed (ongoing 샘플 부재) | ⚠️ 부분 일치 |
| 회의록 상태 | draft, complete | draft, complete | draft, complete | ✅ 일치 |
| Todo 상태 | incomplete, completed | incomplete, completed | incomplete, completed | ✅ 일치 |
| 우선순위 | high, medium, low | high, medium, low | high, medium, low | ✅ 일치 |
#### 3.2 권한 정책 일관성
| 권한 항목 | 유저스토리 | 화면설계서 | 프로토타입 | 일치 여부 |
|---------|----------|-----------|-----------|----------|
| 회의록 수정 (검증완료 전) | 모든 참석자 | 모든 참석자 | ✅ 일치 | ✅ 일치 |
| 회의록 수정 (검증완료 후) | 회의 생성자만 | 회의 생성자만 | ✅ 일치 | ✅ 일치 |
| 검증완료 섹션 잠금 해제 | 회의 생성자만 | 회의 생성자만 | ✅ 일치 | ✅ 일치 |
| Todo 편집 (담당자 본인) | 제목, 마감일, 우선순위 변경 가능 | 제목, 마감일, 우선순위 변경 가능 | ⚠️ 부분 일치 | ⚠️ 부분 일치 |
| Todo 편집 (회의 생성자) | 모든 항목 변경 가능 | 모든 항목 변경 가능 | ✅ 일치 | ✅ 일치 |
---
## 🔴 미반영 항목 목록
### 1. 프로토타입 미구현 항목
| 우선순위 | 화면 | 항목 | 설명 | 예상 공수 |
|---------|-----|-----|------|----------|
| P0 | 12-회의록목록조회 | 검증완료율 표시 | 작성중 상태 회의록에 % 표시 | 1시간 |
| P1 | 11-회의록수정 | 상태 자동 변경 로직 | 저장 시 '작성중'으로 자동 변경 | 30분 |
| P1 | 09-Todo관리 | 담당자 본인 체크 로직 | 담당자 본인은 담당자 변경 불가 | 30분 |
| P1 | common.js | ongoing 샘플 데이터 | 진행중 회의 샘플 1-2개 추가 | 20분 |
### 2. 화면설계서 보완 필요 항목
| 우선순위 | 항목 | 설명 | 예상 공수 |
|---------|-----|------|----------|
| - | 없음 | - | - |
---
## ⚠️ 불일치 항목 목록
### 높음 (P0)
1. **10-회의록상세조회: 기본 노출 탭** (재확인 결과 일치)
- ~~현재: "회의록" 탭 기본 노출~~
- ~~요구사항: "대시보드" 탭 기본 노출~~
- **실제**: "대시보드" 탭 기본 노출 (HTML 구조 확인)
- **조치**: 없음 (일치 확인)
2. **12-회의록목록조회: 검증완료율 미표시**
- 현재: 표시 안 됨
- 요구사항: 작성중 상태 회의록에 % 표시
- **조치**: 프로토타입 구현 필요
### 중간 (P1)
3. **11-회의록수정: 상태 자동 변경**
- 현재: 상태 변경 로직 미구현
- 요구사항: 수정 시 자동으로 '작성중'으로 변경
- **조치**: 저장 로직에 상태 변경 추가
4. **09-Todo관리: 담당자 변경 권한 제어**
- 현재: 회의 생성자 여부만 체크
- 요구사항: 담당자 본인도 담당자 변경 불가
- **조치**: 권한 체크 로직 보완
5. **common.js: ongoing 샘플 데이터**
- 현재: ongoing 상태 회의 없음
- 요구사항: 진행중 회의 표시
- **조치**: 샘플 데이터 추가
### 낮음 (P2)
6. **10-회의록상세조회: Todo 진행률 바 시각적 개선**
- 현재: 단일 색상 진행률 바
- 권장: 색상 구간별 차등 적용
- **조치**: v2.0 고도화 시 고려
---
## ✅ 개선 권장사항
### 1. 즉시 조치 (P0)
- [x] ~~10-회의록상세조회.html: 기본 노출 탭을 "대시보드"로 변경~~ → **일치 확인됨**
- [ ] 12-회의록목록조회.html: 검증완료율 표시 구현
### 2. 단기 조치 (P1, 1주일 내)
- [ ] 11-회의록수정.html: 저장 시 상태 자동 변경 로직 추가
- [ ] 09-Todo관리.html: 담당자 본인 체크 로직 추가
- [ ] common.js: ongoing 상태 회의 샘플 데이터 1-2개 추가
### 3. 중기 조치 (P2, v2.0 고도화)
- [ ] 10-회의록상세조회.html: Todo 진행률 바 시각적 개선 (색상 구간 차등)
- [ ] 회의록 버전 관리 기능 추가 (유저스토리 v2.0.2 언급)
---
## 📊 검증 통계
### 문서별 완성도
- **유저스토리**: 100% (변경 불필요)
- **화면설계서**: 100% (변경 불필요)
- **프로토타입**: 90% (4건 수정 필요)
### 항목별 일치도
- **화면 구조**: 95% (1건 미구현)
- **데이터 구조**: 90% (1건 샘플 데이터 부재)
- **권한 정책**: 90% (1건 로직 보완 필요)
- **UI 스타일**: 100% (common.css 통일)
### 예상 수정 공수
```
P0 항목: 1시간
P1 항목: 1시간 20분
P2 항목: (v2.0 고도화 시)
━━━━━━━━━━━━━━━━━
총 예상 공수: 약 2시간 20분
```
---
## 🎓 결론 및 제언
### 전체 평가
**90점 / 100점** (양호)
### 주요 성과
1. ✅ **화면번호 체계 완벽 통일**: 유저스토리-설계서-프로토타입 간 100% 일치
2. ✅ **스타일 통일성 확보**: common.css 기반 Todo 카드 스타일 중앙 관리
3. ✅ **권한 정책 일관성**: 회의록 수정/검증완료 권한 정책 100% 일치
4. ✅ **데이터 아키텍처 명확화**: common.js 기반 구조 문서화
### 긴급 조치 필요
- ~~10-회의록상세조회.html: 기본 노출 탭 변경~~ → **일치 확인됨**
- 12-회의록목록조회.html: 검증완료율 표시 구현 (1시간)
### 단기 조치 필요
- 11-회의록수정.html: 상태 자동 변경 로직 추가 (30분)
- 09-Todo관리.html: 담당자 본인 체크 로직 추가 (30분)
- common.js: ongoing 샘플 데이터 추가 (20분)
### 종합 의견
**도그냥 (서비스 기획자)**: 전체적으로 유저스토리 요구사항이 화면설계서와 프로토타입에 충실하게 반영되었습니다. 몇 가지 누락된 구현 사항이 있으나, 약 2-3시간 내에 수정 가능한 수준입니다. 특히 검증완료율 표시는 사용자 경험에 중요한 요소이므로 우선 구현이 필요합니다.
**강지수 (Product Designer)**: UI/UX 설계 의도가 프로토타입에 잘 구현되었습니다. common.css 기반 스타일 통일로 일관성이 확보되었으며, 반응형 디자인도 잘 적용되었습니다. 검증완료율 표시와 진행중 회의 샘플 데이터 추가만 보완하면 완성도 높은 프로토타입이 될 것입니다.
---
**작성 완료**: 2025-10-24
**다음 검토 예정**: 수정 사항 반영 후 (약 1주일 후)

View File

@ -1,6 +1,6 @@
# AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.0.5) # AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.1.2)
- [AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.0.5)](#ai기반-회의록-작성-및-이력-관리-개선-서비스---유저스토리-v205) - [AI기반 회의록 작성 및 이력 관리 개선 서비스 - 유저스토리 (v2.1.2)](#ai기반-회의록-작성-및-이력-관리-개선-서비스---유저스토리-v212)
- [차별화 전략](#차별화-전략) - [차별화 전략](#차별화-전략)
- [1. 기본 기능 (Hygiene Factors)](#1-기본-기능-hygiene-factors) - [1. 기본 기능 (Hygiene Factors)](#1-기본-기능-hygiene-factors)
- [2. 핵심 차별화 포인트 (Differentiators)](#2-핵심-차별화-포인트-differentiators) - [2. 핵심 차별화 포인트 (Differentiators)](#2-핵심-차별화-포인트-differentiators)
@ -138,7 +138,7 @@ AFR-USER-020: [대시보드] 사용자로서 | 나는, 회의록 서비스의
2. Meeting 서비스 (회의, 회의록, Todo, 실시간 협업 통합) 2. Meeting 서비스 (회의, 회의록, Todo, 실시간 협업 통합)
1) 회의 준비 및 관리 1) 회의 준비 및 관리
UFR-MEET-010: [회의예약] 회의록 작성자로서 | 나는, 회의를 효율적으로 준비하기 위해 | 회의를 예약하고 참석자를 초대하고 싶다. UFR-MEET-010: [회의예약] 회의성자로서 | 나는, 회의를 효율적으로 준비하기 위해 | 회의를 예약하고 참석자를 초대하고 싶다.
- 시나리오: 회의 예약 및 참석자 초대 - 시나리오: 회의 예약 및 참석자 초대
회의 예약 화면에 접근한 상황에서 | 회의 제목, 날짜/시간, 장소, 참석자 목록을 입력하고 예약 버튼을 클릭하면 | 회의가 예약되고 참석자에게 초대 이메일이 자동 발송된다. 회의 예약 화면에 접근한 상황에서 | 회의 제목, 날짜/시간, 장소, 참석자 목록을 입력하고 예약 버튼을 클릭하면 | 회의가 예약되고 참석자에게 초대 이메일이 자동 발송된다.
@ -158,7 +158,7 @@ UFR-MEET-010: [회의예약] 회의록 작성자로서 | 나는, 회의를 효
--- ---
UFR-MEET-020: [템플릿선택] 회의록 작성자로서 | 나는, 회의록을 효율적으로 작성하기 위해 | 회의 유형에 맞는 템플릿을 선택하고 싶다. UFR-MEET-020: [템플릿선택] 회의성자로서 | 나는, 회의록을 효율적으로 작성하기 위해 | 회의 유형에 맞는 템플릿을 선택하고 싶다.
- 시나리오: 회의록 템플릿 선택 - 시나리오: 회의록 템플릿 선택
회의 시작 전 템플릿 선택 화면에 접근한 상황에서 | 제공되는 템플릿 중 하나를 선택하고 커스터마이징하면 | 회의록 도구가 준비된다. 회의 시작 전 템플릿 선택 화면에 접근한 상황에서 | 제공되는 템플릿 중 하나를 선택하고 커스터마이징하면 | 회의록 도구가 준비된다.
@ -180,14 +180,14 @@ UFR-MEET-020: [템플릿선택] 회의록 작성자로서 | 나는, 회의록을
--- ---
UFR-MEET-030: [회의시작] 회의록 작성자로서 | 나는, 회의를 시작하고 회의록을 작성하기 위해 | 회의를 시작하고 음성 녹음을 준비하고 싶다. UFR-MEET-030: [회의시작] 회의성자로서 | 나는, 회의를 시작하고 회의록을 작성하기 위해 | 회의를 시작하고 음성 녹음을 준비하고 싶다.
- 시나리오: 회의 시작 - 시나리오: 회의 시작
예약된 회의 시간에 회의 시작 버튼을 클릭한 상황에서 | 회의 ID를 확인하고 시작하면 | 회의 세션이 생성되고 음성 녹음이 준비된다. 예약된 회의 시간에 회의 시작 버튼을 클릭한 상황에서 | 회의 ID를 확인하고 시작하면 | 회의 세션이 생성되고 음성 녹음이 준비된다.
[회의 시작 조건] [회의 시작 조건]
- 예약된 회의가 존재함 - 예약된 회의가 존재함
- 회의 시작 시간 10분 전부터 회의 시작 버튼 활성화 - 회의 시작 시간 10분 전부터 회의 시작 버튼 활성화
- 회의록 작성자가 시작 권한을 가짐 - 회의성자가 시작 권한을 가짐
- 이미 시작된 회의일 경우, 진행중으로 표시 - 이미 시작된 회의일 경우, 진행중으로 표시
[처리 결과] [처리 결과]
@ -202,13 +202,17 @@ UFR-MEET-030: [회의시작] 회의록 작성자로서 | 나는, 회의를 시
--- ---
2) 회의 종료 및 완료 2) 회의 종료 및 완료
UFR-MEET-040: [회의종료] 회의록 작성자로서 | 나는, 회의를 종료하고 회의록을 정리하기 위해 | 회의를 종료하고 통계를 확인하고 싶다. UFR-MEET-040: [회의종료] 회의성자로서 | 나는, 회의를 종료하고 회의록을 정리하기 위해 | 회의를 종료하고 요약 내용을 확인한 후 다음 단계를 선택하고 싶다.
- 시나리오: 회의 종료 - 시나리오: 회의 종료
회의가 진행 중인 상황에서 | 회의 종료 버튼을 클릭하면 | 음성 녹음이 중지되고 회의 통계가 생성된다. 회의가 진행 중인 상황에서 | 회의 종료 버튼을 클릭하면 | 음성 녹음이 중지되고 AI가 회의 전체 내용을 요약 정리한다.
[회의 종료 처리] [회의 종료 처리]
- 음성 녹음 즉시 중지 - 음성 녹음 즉시 중지
- 회의 종료 시간 기록 - 회의 종료 시간 기록
- AI가 회의 전체 내용 처리
- STT로 텍스트화된 회의 전체 내용을 주요 안건으로 요약 정리
- 회의 예약 시 선택한 템플릿 반영
- 회의 진행 시 저장한 주요 메모 항목 반영
- 회의 통계 자동 생성 - 회의 통계 자동 생성
- 회의 총 시간 - 회의 총 시간
- 참석자 수 - 참석자 수
@ -217,41 +221,104 @@ UFR-MEET-040: [회의종료] 회의록 작성자로서 | 나는, 회의를 종
[처리 결과] [처리 결과]
- 회의가 종료됨 - 회의가 종료됨
- AI 요약 내용 전체 표시
- 안건별 AI 한줄 요약
- 안건별 상세 요약 정리
- Todo 자동 추출 결과
- 회의 통계 표시 - 회의 통계 표시
- 검증 완료 시 최종 회의록 확정 단계로 이동 - 회의 종료 화면은 확인 전용 (편집 불가)
- 안건 내용 수정 불가
- Todo 수정 불가
- 확인만 가능
- 사용자에게 다음 단계 선택 옵션 제공
- 옵션 1: 회의록 수정 화면으로 이동 (회의록 확정을 위한 편집)
- 옵션 2: 바로 최종 확정 (AI가 잘 정리한 경우)
- 옵션 3: 대시보드로 이동 (회의록 상태: 작성중)
[검증 미완료 시] [회의록 상태]
- 검증이 안된 항목이 있다면 회의록 히스토리 페이지에서 추후 수정 가능 - 옵션 1 선택 시: 작성중 상태에서 수정 화면으로 이동
- 옵션 2 선택 시:
- 모든 안건 자동 검증 완료 처리
- 회의록 상태: 확정완료
- 확정 시간 기록
- 참석자에게 확정 알림 발송
- 옵션 3 선택 시: 작성중 상태로 저장되며, 추후 회의록 목록에서 편집 가능
[Policy/Rule]
- 회의 종료 화면에서는 내용을 확인만 가능하며 편집 불가
- 바로 최종 확정 시 모든 안건이 자동으로 검증 완료 처리됨
- M/8 - M/8
--- ---
UFR-MEET-050: [최종확정] 회의록 작성자로서 | 나는, 회의록을 완성하기 위해 | 최종 회의록을 확정하고 버전을 생성하고 싶다. UFR-MEET-050: [최종확정] 회의 생성자로서 | 나는, 회의록을 완성하기 위해 | 모든 안건을 검증하고 최종 회의록을 확정하고 싶다.
- 시나리오: 최종 회의록 확정
회의가 종료된 상황에서 | 회의록 내용을 최종 검토하고 확정 버튼을 클릭하면 | 필수 항목이 검사되고 최종 버전이 생성된다. - 시나리오 1: 회의록 수정 화면에서 최종 확정
회의록 수정 화면에서 | 모든 안건을 검증하고 확정 버튼을 클릭하면 | 필수 항목과 안건 검증 상태가 검사되고 최종 버전이 생성된다.
[필수 항목 검사] [필수 항목 검사]
- 회의 제목 입력 여부 - 회의 제목 입력 여부
- 참석자 목록 작성 여부 - 참석자 목록 작성 여부
- 주요 논의 내용 작성 여부 - 주요 논의 내용 작성 여부 (안건별)
- 결정 사항 작성 여부 - 결정 사항 작성 여부
- 모든 안건 검증 완료 여부
[안건 검증 요구사항]
- 각 안건별로 검증 완료 처리 필요
- 검증률 = 검증 완료된 안건 수 / 전체 안건 수
- 검증률이 100%가 되어야 최종 확정 가능
- 검증되지 않은 안건이 있으면 확정 불가
[처리 결과] [처리 결과]
- 최종 회의록 확정됨 (확정 버전 번호) - 최종 회의록 확정됨 (확정 버전 번호)
- 확정 시간 기록 - 확정 시간 기록
- AI가 자동으로 Todo 항목 추출 (UFR-AI-020 연동)
- 회의록 확정 상태로 전환 - 회의록 확정 상태로 전환
- 참석자에게 확정 알림 발송
- Todo 항목은 이미 추출되어 있음 (UFR-AI-020에서 처리)
[필수 항목 미작성 시] [필수 항목 미작성 시]
- 누락된 항목 안내 메시지 표시 - 누락된 항목 안내 메시지 표시
- 해당 섹션으로 자동 이동 - 해당 섹션으로 자동 이동
[안건 미검증 시]
- 검증되지 않은 안건 목록 표시
- 검증률 표시 (예: 70% - 7개 중 5개 검증 완료)
- 미검증 안건으로 자동 이동
- 시나리오 2: 회의 종료 화면에서 바로 최종 확정
회의 종료 화면에서 | AI가 정리한 내용을 확인하고 "바로 최종 확정" 버튼을 클릭하면 | 모든 안건이 자동으로 검증 완료 처리되고 회의록이 확정된다.
[바로 확정 처리]
- 필수 항목 자동 충족 (AI가 이미 생성)
- 회의 제목: 회의 예약 정보
- 참석자 목록: 회의 참석자 정보
- 주요 논의 내용: AI가 안건별로 생성
- 결정 사항: AI가 안건별로 추출
- 모든 안건 자동 검증 완료 처리
- 검증률 100% 자동 설정
- 각 안건별 검증 완료 상태로 변경
- 검증자: 회의록 생성자
- 검증 시간: 확정 시간
[처리 결과]
- 최종 회의록 확정됨 (확정 버전 번호)
- 확정 시간 기록
- 모든 안건 검증 완료 상태
- 회의록 확정 상태로 전환
- 참석자에게 확정 알림 발송
- 회의록 수정 화면을 거치지 않고 바로 확정 완료
[Policy/Rule]
- 회의 종료 화면에서 바로 확정 시 AI 생성 내용 그대로 사용
- 모든 안건 자동 검증 완료 처리
- 추후 회의록 수정 필요 시 회의록 목록에서 편집 가능
- M/13 - M/13
--- ---
UFR-MEET-046: [회의록목록조회] 회의록 작성자로서 | 나는, 작성한 회의록들을 효율적으로 관리하기 위해 | 회의록 목록을 조회하고 필터링하고 싶다. UFR-MEET-046: [회의록목록조회] 회의 참석자로서 | 나는, 참여한 회의록들을 효율적으로 관리하기 위해 | 회의록 목록을 조회하고 필터링하고 싶다.
- 시나리오: 회의록 목록 조회 및 필터링 - 시나리오: 회의록 목록 조회 및 필터링
대시보드에서 "회의록" 메뉴를 클릭하면 | 회의록 목록이 표시되고 | 다양한 필터와 검색으로 원하는 회의록을 찾을 수 있다. 대시보드에서 "회의록" 메뉴를 클릭하면 | 회의록 목록이 표시되고 | 다양한 필터와 검색으로 원하는 회의록을 찾을 수 있다.
@ -292,7 +359,7 @@ UFR-MEET-046: [회의록목록조회] 회의록 작성자로서 | 나는, 작성
--- ---
UFR-MEET-047: [회의록상세조회] 회의록 작성자로서 | 나는, 지난 회의록의 상세 정보와 전체 내용을 | 한눈에 확인하고 싶다. UFR-MEET-047: [회의록상세조회] 회의 참석자로서 | 나는, 지난 회의록의 상세 정보와 전체 내용을 | 한눈에 확인하고 싶다.
- 시나리오: 회의록 상세 정보 조회 - 시나리오: 회의록 상세 정보 조회
회의록 목록에서 특정 회의록을 클릭하면 | 해당 회의의 기본 정보와 섹션별 상세 내용이 표시되고 | 필요한 경우 수정작업을 수행할 수 있다. 회의록 목록에서 특정 회의록을 클릭하면 | 해당 회의의 기본 정보와 섹션별 상세 내용이 표시되고 | 필요한 경우 수정작업을 수행할 수 있다.
@ -303,10 +370,10 @@ UFR-MEET-047: [회의록상세조회] 회의록 작성자로서 | 나는, 지난
[회의 기본 정보 표시] [회의 기본 정보 표시]
- 회의 제목 - 회의 제목
- 회의 일시 (날짜 및 시간, 소요 시간) - 회의 일시 (날짜 및 시간, 소요 시간)
- 참석자 목록 (아바타 표시, 역할 구분: 성자/참석자) - 참석자 목록 (아바타 표시, 역할 구분: 성자/참석자)
- 회의 장소 (온라인/오프라인) - 회의 장소 (온라인/오프라인)
- 회의록 상태 (작성중/확정완료) - 회의록 상태 (작성중/확정완료)
- 성자 및 최종 수정 시간 - 성자 및 최종 수정 시간
[섹션별 상세 내용 표시] [섹션별 상세 내용 표시]
- 각 섹션 구분 표시 (번호, 제목) - 각 섹션 구분 표시 (번호, 제목)
@ -474,50 +541,69 @@ UFR-STT-020: [텍스트변환] 회의록 시스템으로서 | 나는, 인식된
4. AI 서비스 (AI 기반 회의록 자동화, Todo 추출, 지능형 검색 - RAG 통합) 4. AI 서비스 (AI 기반 회의록 자동화, Todo 추출, 지능형 검색 - RAG 통합)
1) AI 회의록 작성 1) AI 회의록 작성
UFR-AI-010: [회의록자동작성] 회의록 작성자로서 | 나는, 회의록 작성 부담을 줄이기 위해 | AI가 발언 내용을 자동으로 정리하여 회의록을 작성하기를 원한다. UFR-AI-010: [회의록자동작성] 회의 참석자로서 | 나는, 회의록 작성 부담을 줄이기 위해 | AI가 발언 내용을 실시간으로 정리하고 회의 종료 시 전체 안건을 요약하기를 원한다.
- 시나리오: AI 회의록 자동 작성
텍스트가 변환된 상황에서 | LLM에 회의록 자동 작성을 요청하면 | 회의 맥락을 이해하고 구조화된 회의록 초안이 생성된다.
[AI 처리 과정] - 시나리오 1: 실시간 AI 주요 메모 작성 (회의 진행 중)
- 변환된 텍스트와 회의 맥락(제목, 참석자, 이전 내용) 분석 텍스트가 변환된 상황에서 | LLM에 실시간 회의록 작성을 요청하면 | AI가 주요 메모 항목을 실시간으로 추천한다.
[실시간 AI 처리 과정]
- 변환된 텍스트와 회의 맥락(제목, 참석자) 분석
- 회의 내용 이해 - 회의 내용 이해
- 주제별 분류
- 발언자별 의견 정리
- 중요 키워드 추출 - 중요 키워드 추출
- 문장 다듬기 - 주요 발언 식별
- 주요 메모 항목 추천
- 구어체 → 문어체 변환 - 구어체 → 문어체 변환
- 불필요한 표현 제거 - 불필요한 표현 제거
- 문법 교정 - 문법 교정
- 구조화
- 회의록 템플릿에 맞춰 정리
- 주제, 발언자, 내용 구조화
- 요약문 생성
[처리 결과] [실시간 처리 결과]
- 회의록 초안이 생성됨 (회의록 버전) - AI 주요 메모 항목 추천 (실시간)
- 생성 시간 기록 - 회의 참석자가 필요한 항목만 선택하여 저장
- 구조화된 내용 - 참석자에게 실시간 동기화 (UFR-COLLAB-010 연동)
[Policy/Rule]
- 텍스트 변환되면 자동으로 주요 메모 항목 추천
- 실시간 업데이트 (3-5초 간격)
- 회의 진행 중에는 주요 메모 항목만 표시하여 회의 집중도 향상
- 시나리오 2: 회의 종료 시 전체 안건 요약
회의가 종료된 상황에서 | LLM에 전체 회의록 요약을 요청하면 | AI가 회의 전체 내용을 주요 안건으로 요약 정리한다.
[회의 종료 시 AI 처리 과정]
- STT로 텍스트화된 회의 전체 내용 분석
- 회의 예약 시 선택한 템플릿 정보 반영
- 회의 진행 시 저장한 주요 메모 항목 반영
- 회의 내용을 주요 안건으로 분류 및 요약
- 안건별 주제 식별
- 안건별 핵심 내용 정리
- 발언자별 의견 정리
- 결정 사항 및 보류 사항 구분
- 안건별 구조화
- 편집 불가능한 AI 한줄 요약 생성
- 편집 가능한 상세 요약 정리 생성
[회의 종료 시 처리 결과]
- 주요 안건별 회의록 초안 생성
- 각 안건별 구조화된 내용
- AI 한줄 요약 (편집 불가)
- 상세 요약 정리 (편집 가능)
- 논의 주제 - 논의 주제
- 발언자별 의견 - 발언자별 의견
- 결정 사항 - 결정 사항
- 보류 사항 - 보류 사항
- 참석자에게 실시간 동기화 (UFR-COLLAB-010 연동) - 회의록 수정 화면에서 안건별 편집 및 검증 가능
[Policy/Rule]
- 텍스트 변환되면 자동으로 회의록 구조에 맞춰 정리
- 실시간 업데이트 (3-5초 간격)
- M/34 - M/34
--- ---
2) Todo 자동 추출 2) Todo 자동 추출
UFR-AI-020: [Todo자동추출] 회의록 작성자로서 | 나는, 회의 후 실행 사항을 명확히 하기 위해 | AI가 회의록에서 Todo 항목을 자동으로 추출하고 담당자를 식별하기를 원한다. UFR-AI-020: [Todo자동추출] 회의 참석자로서 | 나는, 회의 후 실행 사항을 명확히 하기 위해 | AI가 안건별 내용에서 Todo 항목을 자동으로 추출하고 기본값을 설정하기를 원한다.
- 시나리오: AI Todo 자동 추출 - 시나리오: AI Todo 자동 추출
회의가 종료된 상황에서 | 최종 회의록을 분석하여 Todo 자동 추출을 요청하면 | 액션 아이템이 식별되고 담당자가 자동으로 지정된다. 회의록 수정 화면에서 | 각 안건의 내용을 분석하여 Todo 자동 추출을 요청하면 | 액션 아이템이 식별되고 기본값이 자동으로 설정된다.
[AI 분석 과정] [AI 분석 과정]
- 회의록 전체 내용 분석 - 안건별 상세 내용 분석
- 액션 아이템 식별 - 액션 아이템 식별
- "~하기로 함", "~까지 완료", "~담당" 등 키워드 탐지 - "~하기로 함", "~까지 완료", "~담당" 등 키워드 탐지
- 명령형 문장 분석 - 명령형 문장 분석
@ -532,22 +618,36 @@ UFR-AI-020: [Todo자동추출] 회의록 작성자로서 | 나는, 회의 후
- 추출된 항목 수 - 추출된 항목 수
- 각 Todo별 정보 - 각 Todo별 정보
- Todo 내용 - Todo 내용
- 담당자 (자동 식별) - 담당자 (기본값: 회의록 생성자)
- 마감일 (언급된 경우) - 마감일 (기본값: 다음 회의 날짜 또는 오늘)
- 우선순위 (언급된 경우) - 우선순위 (기본값: 보통)
- 관련 회의록 섹션 링크 - 관련 안건 링크
- Todo 서비스에 자동 전달 (UFR-TODO-010 연동) - Todo 서비스에 자동 전달 (UFR-TODO-010 연동)
- 회의록 수정 화면에서 Todo 편집 가능
[담당자 식별 실패 시] [기본값 설정 규칙]
- 미지정 상태로 Todo 생성 - 담당자
- 수동 할당 요청 알림 - AI가 식별한 담당자가 있으면 해당 담당자
- 식별 실패 시: 회의록 생성자
- 마감일
- 회의록에 마감일이 언급된 경우: 해당 날짜
- 언급되지 않았지만 다음 회의 날짜가 있는 경우: 다음 회의 날짜
- 둘 다 없는 경우: 오늘 날짜
- 우선순위
- 회의록에 우선순위가 언급된 경우: 해당 우선순위
- 언급되지 않은 경우: 보통
[Todo 독립성]
- Todo는 회의록 확정 상태와 무관하게 완료 처리 가능
- 회의록이 작성중 상태여도 Todo 진행 가능
- Todo 완료 상태는 회의록에 실시간 반영
- M/21 - M/21
--- ---
3) 섹션 AI 요약 재생성 (신규, 차별화 포인트) 3) 섹션 AI 요약 재생성 (신규, 차별화 포인트)
UFR-AI-035: [섹션AI요약] 회의록 작성자로서 | 나는, 작성한 섹션 내용을 쉽게 요약하기 위해 | 버튼 클릭으로 AI가 섹션 내용을 요약해주기를 원한다. UFR-AI-035: [섹션AI요약] 회의 참석자로서 | 나는, 작성한 섹션 내용을 쉽게 요약하기 위해 | 버튼 클릭으로 AI가 섹션 내용을 요약해주기를 원한다.
- 시나리오: 섹션 AI 요약 재생성 - 시나리오: 섹션 AI 요약 재생성
회의록 작성/수정 중에 | 특정 섹션의 "AI 재생성" 버튼을 클릭하면 | AI가 해당 섹션 내용을 분석하여 2-3문장의 요약을 자동 생성한다. 회의록 작성/수정 중에 | 특정 섹션의 "AI 재생성" 버튼을 클릭하면 | AI가 해당 섹션 내용을 분석하여 2-3문장의 요약을 자동 생성한다.
@ -586,8 +686,43 @@ UFR-AI-035: [섹션AI요약] 회의록 작성자로서 | 나는, 작성한 섹
--- ---
UFR-AI-036: [AI한줄요약] 회의 참석자로서 | 나는, 각 안건의 핵심을 빠르게 파악하기 위해 | AI가 생성한 편집 불가능한 한줄 요약을 확인하고 싶다.
- 시나리오: AI 한줄 요약 제공
회의 종료 시 | AI가 안건별 전체 내용을 요약하면 | 각 안건마다 편집 불가능한 한줄 요약과 편집 가능한 상세 요약이 함께 생성된다.
[AI 처리 과정]
- 안건별 전체 내용 분석
- 핵심 메시지 추출
- 가장 중요한 논의 사항
- 최종 결정 또는 결론
- 핵심 키워드
- 한 문장 요약 생성
- 30자 이내 간결한 표현
- 논의→결정 핵심 반영
- 명확하고 이해하기 쉬운 문장
[처리 결과]
- AI 한줄 요약 (편집 불가)
- 각 안건의 최상단에 표시
- 읽기 전용으로 고정
- 안건의 핵심을 한눈에 파악 가능
- 상세 요약 정리 (편집 가능)
- AI 한줄 요약 하단에 표시
- 사용자가 자유롭게 편집 가능
- 논의 주제, 발언자별 의견, 결정 사항 포함
[Policy/Rule]
- AI 한줄 요약은 회의 종료 시 1회 생성
- 생성 후에는 편집 불가 (원본 보존)
- 상세 요약 정리는 사용자가 자유롭게 수정 가능
- 회의록 수정 화면(11-회의록수정)에서 표시
- M/21
---
4) 관련 회의록 자동 연결 (신규, 차별화 포인트) 4) 관련 회의록 자동 연결 (신규, 차별화 포인트)
UFR-AI-040: [관련회의록연결] 회의록 작성자로서 | 나는, 이전 회의 내용을 쉽게 참조하기 위해 | AI가 같은 폴더 내 관련 있는 과거 회의록을 자동으로 찾아 연결해주기를 원한다. UFR-AI-040: [관련회의록연결] 회의 참석자로서 | 나는, 이전 회의 내용을 쉽게 참조하기 위해 | AI가 같은 폴더 내 관련 있는 과거 회의록을 자동으로 찾아 연결해주기를 원한다.
- 시나리오: 관련 회의록 자동 연결 - 시나리오: 관련 회의록 자동 연결
회의록이 작성되는 상황에서 | AI가 회의 주제와 내용을 분석하면 | 같은 폴더 내 유사한 주제의 과거 회의록을 찾아 자동으로 연결한다. 회의록이 작성되는 상황에서 | AI가 회의 주제와 내용을 분석하면 | 같은 폴더 내 유사한 주제의 과거 회의록을 찾아 자동으로 연결한다.
@ -626,7 +761,7 @@ UFR-AI-040: [관련회의록연결] 회의록 작성자로서 | 나는, 이전
5. AI 서비스 (지능형 검색 - RAG 기능, AI Service에 통합됨) 5. AI 서비스 (지능형 검색 - RAG 기능, AI Service에 통합됨)
1) 맥락 기반 용어 설명 (강화) 1) 맥락 기반 용어 설명 (강화)
UFR-RAG-010: [전문용어감지] 회의록 작성자로서 | 나는, 업무 지식이 없어도 회의록을 정확히 작성하기 위해 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명을 제공받고 싶다. UFR-RAG-010: [전문용어감지] 회의 참석자로서 | 나는, 업무 지식이 없어도 회의록을 정확히 작성하기 위해 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명을 제공받고 싶다.
- 시나리오: 맥락 기반 전문용어 자동 감지 - 시나리오: 맥락 기반 전문용어 자동 감지
회의록이 작성되는 상황에서 | 시스템이 회의록 텍스트를 분석하면 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명이 준비된다. 회의록이 작성되는 상황에서 | 시스템이 회의록 텍스트를 분석하면 | 전문용어가 자동으로 감지되고 맥락에 맞는 설명이 준비된다.
@ -664,7 +799,7 @@ UFR-RAG-010: [전문용어감지] 회의록 작성자로서 | 나는, 업무 지
--- ---
UFR-RAG-020: [맥락기반용어설명] 회의록 작성자로서 | 나는, 전문용어를 맥락에 맞게 이해하기 위해 | 관련 회의록과 업무 이력을 바탕으로 실용적인 설명을 제공받고 싶다. UFR-RAG-020: [맥락기반용어설명] 회의 참석자로서 | 나는, 전문용어를 맥락에 맞게 이해하기 위해 | 관련 회의록과 업무 이력을 바탕으로 실용적인 설명을 제공받고 싶다.
- 시나리오: 맥락 기반 용어 설명 자동 제공 - 시나리오: 맥락 기반 용어 설명 자동 제공
전문용어가 감지된 상황에서 | RAG 시스템이 관련 문서를 검색하면 | 과거 회의록 및 업무 이력에서 맥락에 맞는 실용적인 설명이 생성되어 제공된다. 전문용어가 감지된 상황에서 | RAG 시스템이 관련 문서를 검색하면 | 과거 회의록 및 업무 이력에서 맥락에 맞는 실용적인 설명이 생성되어 제공된다.
@ -757,72 +892,100 @@ UFR-COLLAB-010: [회의록수정동기화] 회의 참석자로서 | 나는, 회
--- ---
UFR-COLLAB-020: [충돌해결] 회의 참석자로서 | 나는, 동시 수정 상황에서도 내용을 잃지 않기 위해 | 충돌을 감지하고 해결하고 싶다. UFR-COLLAB-020: [충돌해결] 회의 참석자로서 | 나는, 동시 수정 상황에서도 내용을 잃지 않기 위해 | 안건별로 충돌 없이 편집하고 싶다.
- 시나리오: 동시 수정 충돌 해결 - 시나리오: 안건별 동시 편집 충돌 방지
두 명의 참석자가 동일한 위치를 동시에 수정한 상황에서 | 시스템이 충돌을 감지하면 | 충돌 알림이 표시되고 해결 방법을 선택할 수 있다. 여러 참석자가 회의록을 동시에 수정하는 상황에서 | 각자 다른 안건을 편집하면 | 충돌 없이 실시간으로 저장되고 동기화된다.
[충돌 감지] [안건 기반 충돌 방지]
- 동일 위치 동시 수정 탐지 - 안건 단위 잠금 메커니즘
- 라인 단위 비교 - 각 안건은 독립적인 편집 단위
- 참석자 A가 안건 1 편집 시, 다른 참석자는 안건 2, 3 등 편집 가능
- 동일 안건 동시 편집 시에만 충돌 처리
- 편집 중 안건 표시
- 다른 참석자가 현재 편집 중인 안건 실시간 표시
- 편집자 이름과 프로필 아이콘 표시
- "○○○님이 편집 중" 메시지
[동일 안건 동시 편집 시 충돌 감지]
- 동일 안건 동시 수정 탐지
- 필드 단위 비교 (제목, 상세 내용, Todo 등)
- 버전 기반 충돌 확인 - 버전 기반 충돌 확인
- 충돌 정보 생성 - 충돌 정보 생성
- 충돌 위치 - 충돌 안건
- 관련 수정자 2명 - 관련 수정자 2명
- 각자의 수정 내용 - 각자의 수정 내용
[충돌 해결 방식] [충돌 해결 방식]
- Last Write Wins (기본) - 필드별 자동 병합 (기본)
- 가장 최근 수정이 우선 - 다른 필드 편집 시: 자동 병합 (충돌 없음)
- 예: A가 제목 수정, B가 상세 내용 수정 → 둘 다 반영
- Last Write Wins (동일 필드 수정 시)
- 동일 필드 동시 수정 시: 가장 최근 수정이 우선
- 이전 수정은 버전 이력에 보관 - 이전 수정은 버전 이력에 보관
- 덮어쓰인 사용자에게 알림
- 수동 병합 (선택) - 수동 병합 (선택)
- 충돌 내용 비교 UI 표시 - 충돌 내용 비교 UI 표시
- 사용자가 최종 내용 선택 - 사용자가 최종 내용 선택
- A 선택 / B 선택 / 직접 작성 - A 선택 / B 선택 / 직접 작성
[처리 결과] [처리 결과]
- 안건별 독립 편집으로 충돌 최소화
- 충돌 발생 시:
- 충돌이 감지됨 (충돌 ID) - 충돌이 감지됨 (충돌 ID)
- 충돌 위치 - 충돌 안건 및 필드
- 관련 수정자 - 관련 수정자
- 충돌이 해결됨 - 충돌이 해결됨
- 해결 방법 (Last Write Wins / 수동 병합) - 해결 방법 (자동 병합 / Last Write Wins / 수동 병합)
- 최종 내용 - 최종 내용
- 해결된 내용 실시간 동기화 - 해결된 내용 실시간 동기화
[Policy/Rule] [Policy/Rule]
- 동시 수정 발생 시 최종 수정이 우선 (Last Write Wins) 또는 충돌 알림 - 안건 단위 독립 편집으로 충돌 최소화
- 동일 안건 내 다른 필드 수정 시 자동 병합
- 동일 필드 동시 수정 시 Last Write Wins 적용
- M/21 - M/21
--- ---
UFR-COLLAB-030: [검증완료] 회의 참석자로서 | 나는, 회의록의 정확성을 보장하기 위해 | 주요 섹션을 검증하고 완료 표시를 하고 싶다. UFR-COLLAB-030: [검증완료] 회의 참석자로서 | 나는, 회의록의 정확성을 보장하기 위해 | 각 안건을 검증하고 완료 표시를 하고 싶다.
- 시나리오: 회의록 검증 완료 - 시나리오: 안건별 회의록 검증 완료
회의록 내용을 확인한 상황에서 | 참석자가 검증 완료 버튼을 클릭하면 | 검증 상태가 업데이트되고 다른 참석자에게 동기화된다. 회의록 수정 화면에서 안건 내용을 확인한 상황에서 | 참석자가 안건별 검증 완료 버튼을 클릭하면 | 검증 상태가 업데이트되고 다른 참석자에게 동기화된다.
[검증 처리] [검증 처리]
- 검증자 정보 기록 - 검증자 정보 기록
- 검증 시간 기록 - 검증 시간 기록
- 검증 대상 섹션 기록 - 검증 대상 안건 기록
- 검증 상태 업데이트 - 안건별 검증 상태 업데이트
- 미검증 → 검증 중 → 검증 완료 - 미검증 → 검증 완료
- 전체 검증률 계산
- 검증률 = 검증 완료된 안건 수 / 전체 안건 수
- 회의록 목록에서 검증률 표시 (예: 70%)
[섹션 잠금 기능] [안건 잠금 기능]
- 회의 생성자만 잠금/해제 가능 - 회의 생성자만 잠금/해제 가능
- 주요 섹션 검증 완료 시 잠금 가능 (선택) - 안건 검증 완료 시 잠금 가능 (선택)
- 잠긴 섹션은 회의 생성자만 잠금 해제 후 수정 가능 - 잠긴 안건은 회의 생성자만 잠금 해제 후 수정 가능
- 참석자는 검증완료된 섹션을 읽기 전용으로만 확인 가능 - 참석자는 검증완료된 안건을 읽기 전용으로만 확인 가능
[처리 결과] [처리 결과]
- 검증이 완료됨 - 안건 검증이 완료됨
- 검증자 정보 - 검증자 정보
- 검증 상태 (검증 완료) - 검증 상태 (검증 완료)
- 완료 시간 - 완료 시간
- 전체 검증률 업데이트
- 검증 완료 상태 실시간 동기화 - 검증 완료 상태 실시간 동기화
- 검증 배지 표시 (체크 아이콘) - 검증 배지 표시 (체크 아이콘)
- 검증 완료 시 전체 메일로 알림이 발송된다. - 모든 안건 검증 완료 시 전체 메일로 알림 발송
[통합 화면]
- 11-회의록수정 화면에서 안건별 검증 처리
- 별도의 06-검증완료 화면 불필요
- 안건별 편집 영역에 검증 완료 버튼 제공
[Policy/Rule] [Policy/Rule]
- 주요 섹션 검증 완료 시 해당 섹션 잠금 가능 - 안건별 검증 완료 시 해당 안건 잠금 가능
- 모든 안건 검증 완료 시 회의록 최종 확정 가능 (UFR-MEET-050)
- M/8 - M/8
@ -1104,6 +1267,9 @@ UFR-TODO-040: [Todo관리] Todo 담당자로서 | 나는, 나의 Todo를 효율
| 2.0.2 | 2025-10-23 | 강지수, 도그냥 | Todo 수정 기능 추가 (UFR-TODO-040)<br>- 회의록 확정 전/후 Todo 수정 기능 추가<br>- 권한별 수정 범위: 담당자(본인 Todo만), 회의 생성자(모든 Todo)<br>- 수정 항목: 제목, 담당자, 마감일, 우선순위<br>- 09-Todo관리, 11-회의록수정 화면에서 수정 가능 | | 2.0.2 | 2025-10-23 | 강지수, 도그냥 | Todo 수정 기능 추가 (UFR-TODO-040)<br>- 회의록 확정 전/후 Todo 수정 기능 추가<br>- 권한별 수정 범위: 담당자(본인 Todo만), 회의 생성자(모든 Todo)<br>- 수정 항목: 제목, 담당자, 마감일, 우선순위<br>- 09-Todo관리, 11-회의록수정 화면에서 수정 가능 |
| 2.0.3 | 2025-10-23 | 강지수 (Product Designer) | 회의록 수정 항목 정책 명확화 (UFR-MEET-055)<br>- 회의 일시/장소: readonly 처리 (회의 예약 화면에서만 변경 가능)<br>- 참석자 관리: 회의 생성자만 추가/삭제 가능 (11-회의록수정 화면에서 직접 관리)<br>- 참석자 UI: 05-회의진행 화면과 동일한 방식으로 구현<br>- 프로토타입: 11-회의록수정.html에 참석자 관리 섹션 추가 | | 2.0.3 | 2025-10-23 | 강지수 (Product Designer) | 회의록 수정 항목 정책 명확화 (UFR-MEET-055)<br>- 회의 일시/장소: readonly 처리 (회의 예약 화면에서만 변경 가능)<br>- 참석자 관리: 회의 생성자만 추가/삭제 가능 (11-회의록수정 화면에서 직접 관리)<br>- 참석자 UI: 05-회의진행 화면과 동일한 방식으로 구현<br>- 프로토타입: 11-회의록수정.html에 참석자 관리 섹션 추가 |
| 2.0.4 | 2025-10-23 | 강지수 (Product Designer) | 검증완료 섹션 잠금해제 정책 단순화<br>- **정책 변경**: 검증완료 섹션은 회의 생성자만 잠금 해제 후 수정 가능 (참석자는 수정 불가)<br>- **제거**: 참석자용 잠금해제 요청 기능 완전 제거 (공수 절감)<br>- UFR-MEET-055: 권한 제어 명확화 (생성자만 잠금 해제 가능)<br>- UFR-COLLAB-030: 섹션 잠금 기능 설명 업데이트<br>- 프로토타입 11-회의록수정.html: 잠금해제요청 버튼 제거, 검증완료 섹션 읽기 전용 표시 | | 2.0.4 | 2025-10-23 | 강지수 (Product Designer) | 검증완료 섹션 잠금해제 정책 단순화<br>- **정책 변경**: 검증완료 섹션은 회의 생성자만 잠금 해제 후 수정 가능 (참석자는 수정 불가)<br>- **제거**: 참석자용 잠금해제 요청 기능 완전 제거 (공수 절감)<br>- UFR-MEET-055: 권한 제어 명확화 (생성자만 잠금 해제 가능)<br>- UFR-COLLAB-030: 섹션 잠금 기능 설명 업데이트<br>- 프로토타입 11-회의록수정.html: 잠금해제요청 버튼 제거, 검증완료 섹션 읽기 전용 표시 |
| 2.0.5 | 2025-10-23 | 강지수 (Product Designer), 도그냥 (Service Planner) | Todo 및 회의록 관련 요구사항 재정의<br>- **UFR-TODO-040 (09-Todo관리)**: "Todo수정" → "Todo관리" 기능 확장<br> - 통계 블록 재정의: 전체(미완료), 마감임박(3일 이내), 지연(기한 경과)<br> - 필터링: 전체, 지연, 마감임박, 완료 (각 필터에 개수 표시)<br> - 체크박스 확인 모달: 완료/미완료 전환 시 확인<br> - 권한: 담당자 본인 OR 회의록 작성자만 편집 가능<br>- **UFR-MEET-047 (10-회의록상세조회)**: 탭 순서 및 기본 노출 변경<br> - 탭 구성: 대시보드 / 회의록<br> - 기본 노출: 대시보드 탭 우선 노출 (기존: 회의록 우선)<br>- **UFR-MEET-055 (11-회의록수정)**: 진입 경로 및 권한 제어 명확화<br> - 진입 경로: 10-회의록상세조회 → "수정" 버튼 클릭<br> - 권한 제어: 검증완료 전(모든 참석자), 검증완료 후(회의 생성자만)<br> - 회의 일시/장소: 읽기 전용 표시 명시 | | 2.0.5 | 2025-10-23 | 강지수 (Product Designer), 도그냥 (Service Planner) | Todo 및 회의록 관련 요구사항 재정의<br>- **UFR-TODO-040 (09-Todo관리)**: "Todo수정" → "Todo관리" 기능 확장<br> - 통계 블록 재정의: 전체(미완료), 마감임박(3일 이내), 지연(기한 경과)<br> - 필터링: 전체, 지연, 마감임박, 완료 (각 필터에 개수 표시)<br> - 체크박스 확인 모달: 완료/미완료 전환 시 확인<br> - 권한: 담당자 본인 OR 회의 생성자만 편집 가능<br>- **UFR-MEET-047 (10-회의록상세조회)**: 탭 순서 및 기본 노출 변경<br> - 탭 구성: 대시보드 / 회의록<br> - 기본 노출: 대시보드 탭 우선 노출 (기존: 회의록 우선)<br>- **UFR-MEET-055 (11-회의록수정)**: 진입 경로 및 권한 제어 명확화<br> - 진입 경로: 10-회의록상세조회 → "수정" 버튼 클릭<br> - 권한 제어: 검증완료 전(모든 참석자), 검증완료 후(회의 생성자만)<br> - 회의 일시/장소: 읽기 전용 표시 명시 |
| 2.1.0 | 2025-10-24 | 강지수 (Product Designer) | 회의 종료 후 워크플로우 개선 및 안건 기반 회의록 구조 도입<br>- **UFR-MEET-040 (회의종료)**: 회의 종료 시 사용자 선택 옵션 제공<br> - AI가 STT 텍스트를 주요 안건으로 요약 정리 (템플릿 및 메모 항목 반영)<br> - 종료 후 선택: 회의록 수정 화면 이동 OR 대시보드 이동<br> - 회의록 상태: 작성중으로 저장<br>- **UFR-AI-010 (회의록자동작성)**: 실시간 + 종료 시 이중 처리 방식<br> - 시나리오 1: 실시간 AI 주요 메모 작성 (회의 진행 중)<br> - 시나리오 2: 회의 종료 시 전체 안건 요약 (AI 한줄 요약 + 상세 요약)<br>- **UFR-AI-020 (Todo자동추출)**: Todo 기본값 정책 추가<br> - 담당자 기본값: 회의록 생성자<br> - 마감일 기본값: 다음 회의 날짜 OR 오늘<br> - 우선순위 기본값: 보통<br> - Todo 독립성: 회의록 확정 상태와 무관하게 완료 처리 가능<br>- **UFR-AI-036 (AI한줄요약)**: 신규 유저스토리 추가<br> - 각 안건별 편집 불가능한 AI 한줄 요약 (30자 이내)<br> - 편집 가능한 상세 요약과 함께 제공<br>- **UFR-MEET-050 (최종확정)**: 안건 검증 요구사항 추가<br> - 모든 안건 검증 완료 시 최종 확정 가능<br> - 검증률 = 검증 완료된 안건 수 / 전체 안건 수<br>- **UFR-COLLAB-030 (검증완료)**: 안건별 검증으로 변경<br> - 섹션 검증 → 안건별 검증<br> - 11-회의록수정 화면에서 안건별 검증 처리<br> - 06-검증완료 화면 불필요 (11-회의록수정에 통합) |
| 2.1.1 | 2025-10-24 | 강지수 (Product Designer) | 회의 종료 화면 정책 명확화 및 실시간 협업 충돌 방지 개선<br>- **UFR-MEET-040 (회의종료)**: 회의 종료 화면 정책 및 옵션 추가<br> - 회의 종료 화면은 확인 전용 (편집 불가) 명시<br> - 안건별 AI 요약 전체 표시 (한줄 요약 + 상세 요약 + Todo)<br> - 옵션 추가: "바로 최종 확정" (옵션 2)<br> - 3가지 선택 옵션: 회의록 수정 / 바로 최종 확정 / 대시보드 이동<br>- **UFR-COLLAB-020 (충돌해결)**: 안건 기반 충돌 방지 메커니즘 강화<br> - 안건 단위 독립 편집으로 충돌 최소화<br> - 다른 안건 동시 편집 시 충돌 없음<br> - 동일 안건 내 다른 필드 편집 시 자동 병합<br> - 동일 필드 동시 수정 시에만 Last Write Wins 적용<br> - 편집 중 안건 실시간 표시 (편집자 이름 및 아이콘)<br>- **UFR-MEET-050 (최종확정)**: 회의 종료 화면 바로 확정 시나리오 추가<br> - 시나리오 2: 회의 종료 화면에서 바로 최종 확정<br> - 바로 확정 시 모든 안건 자동 검증 완료 처리<br> - 필수 항목 자동 충족 (AI 생성 내용 활용)<br> - 회의록 수정 화면 거치지 않고 바로 확정 완료 |
| 2.1.2 | 2025-10-24 | 강지수 (Product Designer) | 역할 용어 통일 및 권한 체계 명확화<br>- **용어 통일**: "회의록 작성자" → "회의 생성자" 또는 "회의 참석자"로 명확히 구분<br> - 생성자 권한 필요: UFR-MEET-010 (회의예약), UFR-MEET-020 (템플릿선택), UFR-MEET-030 (회의시작), UFR-MEET-040 (회의종료), UFR-MEET-050 (최종확정)<br> - 참석자 권한: UFR-MEET-046 (목록조회), UFR-MEET-047 (상세조회), UFR-AI-010~040 (AI 기능), UFR-RAG-010~020 (RAG 기능)<br>- **역할 정의**:<br> - 생성자: 회의 예약을 생성한 사람 (특별 권한: 참석자 관리, 회의 시작/종료, 최종 확정)<br> - 참석자: 회의에 참여하는 전체 인원 (생성자 포함, 기본 권한: 안건 편집, 검증, Todo 관리)<br>- **권한 체계 명확화**:<br> - 회의록 상세 조회 화면: 역할 표시 "생성자/참석자"로 변경<br> - Todo 편집 권한: 담당자 본인 OR 회의 생성자 |
--- ---