mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 11:26:25 +00:00
Merge branch 'main' of https://github.com/hwanny1128/HGZero into feat/meeting-reservation
This commit is contained in:
commit
75feb8493a
@ -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 {
|
||||||
|
flex: 0 1 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-bar .btn-primary {
|
||||||
|
flex: 0 1 250px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 날짜 입력 필드 래퍼 - 달력 아이콘 보호 */
|
.readonly-notice {
|
||||||
.date-input-wrapper {
|
background: var(--warning-light);
|
||||||
position: relative;
|
border: 1px solid var(--warning);
|
||||||
}
|
border-radius: var(--radius-md);
|
||||||
|
padding: var(--space-md);
|
||||||
.date-input-wrapper input[type="date"] {
|
margin-bottom: var(--space-lg);
|
||||||
position: relative;
|
font-size: var(--font-small);
|
||||||
z-index: 1;
|
color: var(--warning-dark);
|
||||||
}
|
text-align: center;
|
||||||
|
|
||||||
/* 달력 아이콘을 별도 요소로 표시 */
|
|
||||||
.date-input-wrapper::after {
|
|
||||||
content: '📅';
|
|
||||||
position: absolute;
|
|
||||||
right: 12px;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
pointer-events: none;
|
|
||||||
font-size: 18px;
|
|
||||||
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 class="action-bar">
|
|
||||||
<button class="btn btn-secondary" onclick="navigateTo('11-회의록수정.html')">
|
|
||||||
수정
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-primary" onclick="navigateTo('02-대시보드.html')">
|
|
||||||
대시보드로 이동
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Todo 편집 모달 -->
|
<!-- 하단 액션 바 (3가지 선택 옵션) -->
|
||||||
<div class="modal-overlay" id="todoEditModal">
|
<div class="action-bar">
|
||||||
<div class="modal">
|
<button class="btn btn-ghost" onclick="navigateTo('02-대시보드.html')">
|
||||||
<div class="modal-header">
|
대시보드
|
||||||
<h3 class="modal-title">Todo 편집</h3>
|
</button>
|
||||||
<button class="modal-close">×</button>
|
<button class="btn btn-secondary" onclick="navigateTo('11-회의록수정.html')">
|
||||||
</div>
|
회의록 수정
|
||||||
<div class="modal-body">
|
</button>
|
||||||
<div class="form-group">
|
<button class="btn btn-primary" onclick="confirmMeetingDirectly()">
|
||||||
<label class="form-label">Todo 내용</label>
|
바로 최종 확정
|
||||||
<input type="text" class="form-control" value="API 명세서 작성">
|
</button>
|
||||||
</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>
|
||||||
</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,42 +518,117 @@
|
|||||||
}, 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', {
|
||||||
<div class="todo-header">
|
className: 'agenda-card',
|
||||||
<div class="todo-content">${todo.title}</div>
|
id: `agenda-${agenda.id}`,
|
||||||
${createBadge(todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음',
|
onclick: `toggleAgenda('${agenda.id}')`
|
||||||
`priority-${todo.priority}`)}
|
});
|
||||||
</div>
|
|
||||||
<div class="todo-meta">
|
// 헤더
|
||||||
${createAvatar(todo.assignee, 'sm')}
|
const header = createElement('div', { className: 'agenda-header' }, `
|
||||||
<span>${todo.assignee.name}</span>
|
<div>
|
||||||
<span>•</span>
|
<div class="agenda-title">${agenda.title}</div>
|
||||||
<span>${formatDate(todo.dueDate)}</span>
|
<div class="ai-summary-short">
|
||||||
|
<span class="lock-icon">🔒</span>
|
||||||
|
<span>${agenda.aiSummaryShort}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="expand-icon">▼</div>
|
||||||
`);
|
`);
|
||||||
container.appendChild(item);
|
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">
|
||||||
|
<input type="checkbox" class="todo-checkbox" disabled>
|
||||||
|
<div class="todo-content">${todo.title}</div>
|
||||||
|
${createBadge(todo.priority === 'high' ? '높음' : todo.priority === 'medium' ? '보통' : '낮음',
|
||||||
|
`priority-${todo.priority}`)}
|
||||||
|
</div>
|
||||||
|
<div class="todo-meta">
|
||||||
|
${createAvatar(todo.assignee, 'sm')}
|
||||||
|
<span>${todo.assignee.name}</span>
|
||||||
|
<span>•</span>
|
||||||
|
<span>${formatDate(todo.dueDate)}</span>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 페이지 로드 시 초기화
|
// 페이지 로드 시 초기화
|
||||||
|
|||||||
@ -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');
|
||||||
|
|||||||
@ -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>- **통일성 달성**: 유저스토리, 화면설계서, 스타일 가이드 간 용어 완전 통일 |
|
||||||
|
|||||||
@ -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)
|
||||||
@ -80,10 +80,9 @@
|
|||||||
|------|--------|----------------|-------------------|-----------|------------------------|-------|
|
|------|--------|----------------|-------------------|-----------|------------------------|-------|
|
||||||
| 01 | 로그인 | UFR-USER-010 | 필수 | 사용자 인증 | X | X | |
|
| 01 | 로그인 | UFR-USER-010 | 필수 | 사용자 인증 | X | X | |
|
||||||
| 02 | 대시보드 | - | 필수 | 메인 랜딩 페이지 | O | X | |
|
| 02 | 대시보드 | - | 필수 | 메인 랜딩 페이지 | O | X | |
|
||||||
| 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>- **통일성 달성**: 유저스토리, 화면설계서, 스타일 가이드 간 용어 완전 통일 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
|
||||||
@ -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주일 후)
|
|
||||||
@ -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 회의 생성자 |
|
||||||
|
|
||||||
---
|
---
|
||||||
Loading…
x
Reference in New Issue
Block a user