π Board Meeting Transcript Processing (Post-MVP Vision)¶
Scope: POST-MVP - AI-powered extraction of compliance decisions from board minutes
Status: Future feature - Requires AI infrastructure (see simplified-mvp-architecture.md)
Target Users: Company secretaries, compliance officers, directors
Value: Turn 50-page transcripts into actionable compliance items
Important Note¶
This is a POST-MVP feature. The MVP does NOT include AI-powered document processing. This document describes a potential future capability once we add AI infrastructure post-MVP.
MVP Alternative: Manual task creation from board minutes (directors/company secretaries manually enter board decisions as tasks)
The Problem We Solve¶
Board meetings discuss compliance, but decisions get buried in lengthy transcripts:
- "Did the board approve the new password policy?"
- "What cyber risks were discussed?"
- "Were there any compliance actions assigned?"
Our Solution: AI extracts compliance-relevant decisions automatically
How It Works¶
1. Upload Process¶
Supported Formats:
- PDF (most common for minutes)
- DOCX (draft minutes)
- TXT (pure transcripts)
- Audio (future - transcribe first)
Upload Methods:
- Web interface drag & drop
- Email attachment to minutes@[tenant].getcimple.com
- Direct from board portal (future integration)
2. AI Extraction Pipeline¶
interface TranscriptProcessor {
// Step 1: Parse document
parseDocument(file: File): Promise<string>
// Step 2: Extract compliance items
extractItems(text: string): Promise<ComplianceItem[]>
// Step 3: Categorize and link
categorizeItems(items: ComplianceItem[]): Promise<CategorizedItems>
// Step 4: Create tasks/evidence
createActions(items: CategorizedItems): Promise<ActionResult>
}
interface ComplianceItem {
type: 'decision' | 'risk' | 'action' | 'approval'
text: string
context: string // Surrounding paragraph
confidence: number // 0-1 score
page?: number
// Extracted details
details: {
what: string // "Approve password policy"
who?: string // "IT Manager"
when?: string // "By next meeting"
framework?: string // "Essential Eight"
}
}
3. Smart Extraction Rules¶
const EXTRACTION_PATTERNS = {
decisions: [
/board (approved|endorsed|ratified)/i,
/motion (passed|carried)/i,
/resolved that/i,
/agreed to/i,
],
risks: [
/cyber(security)? risk/i,
/compliance (risk|concern)/i,
/data breach/i,
/vulnerability/i,
],
actions: [
/action item/i,
/management to/i,
/requested? that/i,
/by next (meeting|quarter)/i,
],
approvals: [
/policy (approved|updated)/i,
/budget approved/i,
/expenditure authorized/i,
],
}
// Context-aware extraction
function extractWithContext(text: string, pattern: RegExp) {
const paragraphs = text.split(/\n\n+/)
const matches = []
for (const para of paragraphs) {
if (pattern.test(para)) {
matches.push({
text: para,
context: getPreviousParagraph(para) + getNextParagraph(para),
confidence: calculateConfidence(para, pattern),
})
}
}
return matches
}
User Interface¶
Upload & Process¶
<div class="transcript-processor">
<DropZone on:drop={processTranscript}>
<FileText size={48} />
<p>Drop board minutes here</p>
<p class="hint">PDF, DOCX, or TXT - up to 100MB</p>
</DropZone>
{#if processing}
<ProcessingStatus
steps={[
{ name: 'Parsing document', status: 'complete' },
{ name: 'Extracting compliance items', status: 'active' },
{ name: 'Creating tasks', status: 'pending' }
]}
/>
{/if}
</div>
Review & Confirm¶
<div class="extraction-results">
<h3>Found {items.length} Compliance Items</h3>
{#each items as item}
<ExtractionCard>
<div class="item-type">{item.type}</div>
<div class="item-text">{item.text}</div>
<div class="confidence">Confidence: {item.confidence}%</div>
<div class="actions">
<button on:click={() => createTask(item)}>Create Task</button>
<button on:click={() => dismiss(item)}>Dismiss</button>
<button on:click={() => edit(item)}>Edit</button>
</div>
</ExtractionCard>
{/each}
<div class="bulk-actions">
<button on:click={createAllTasks}>Create All Tasks</button>
<button on:click={exportToReport}>Add to Board Report</button>
</div>
</div>
AI Prompts¶
Extraction Prompt¶
const EXTRACTION_PROMPT = `
You are a governance expert reviewing board meeting minutes for
compliance-related items.
Extract the following from the transcript:
1. DECISIONS: Any formal board approvals or resolutions related to
compliance, security, or risk
2. RISKS: Cyber security or compliance risks discussed
3. ACTIONS: Tasks assigned to management regarding compliance
4. APPROVALS: Specific policies or procedures approved
For each item, extract:
- The specific decision/risk/action
- Who is responsible (if mentioned)
- Timeline (if mentioned)
- Related framework (E8, ISO27001, etc. if mentioned)
Focus only on technology, cyber security, and compliance items.
Ignore financial, HR, and operational matters unless they relate to compliance.
Format as JSON array of ComplianceItem objects.
`
Categorization Prompt¶
const CATEGORIZATION_PROMPT = `
Categorize this compliance item:
"${item.text}"
Determine:
1. Framework: E8, ISO27001, Privacy Act, General
2. Control Area: Access Control, Patching, Backup, etc.
3. Priority: Critical, High, Medium, Low
4. Task Type: Policy Update, Technical Implementation, Review, Approval
Consider the context and typical board-level discussions.
Return as structured JSON.
`
Data Model¶
CREATE TABLE board_transcripts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_date DATE NOT NULL,
file_name TEXT NOT NULL,
file_url TEXT NOT NULL,
processed_at TIMESTAMPTZ,
-- Extraction results
items_extracted INTEGER DEFAULT 0,
tasks_created INTEGER DEFAULT 0,
-- Metadata
uploaded_by UUID REFERENCES users(id),
tenant_id UUID NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE extracted_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
transcript_id UUID REFERENCES board_transcripts(id),
-- Extraction details
item_type TEXT CHECK (item_type IN ('decision', 'risk', 'action',
'approval')),
extracted_text TEXT NOT NULL,
context_text TEXT,
confidence DECIMAL(3,2),
page_number INTEGER,
-- Parsed details
what TEXT NOT NULL,
who TEXT,
when_due TEXT,
framework TEXT,
-- User actions
status TEXT DEFAULT 'pending', -- pending, accepted, dismissed
task_id UUID REFERENCES tasks(id),
tenant_id UUID NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
Integration with Core Platform¶
Auto-Task Creation¶
async function createTaskFromExtraction(item: ExtractedItem) {
// Map to task
const task = {
title: item.what,
description: `From board meeting ${item.meeting_date}:
${item.extracted_text}`,
assignee: findUserByName(item.who) || getDefaultAssignee(),
dueDate: parseDate(item.when_due) || getDefaultDueDate(),
priority: item.confidence > 0.8 ? 'high' : 'medium',
source: 'board_minutes',
evidence: [item.transcript_id],
tags: [item.framework, 'board-mandated'],
}
return await taskService.create(task)
}
Board Report Integration¶
// Include extracted items in next board report
function addToBoardReport(meetingDate: Date) {
const items = getExtractedItems(meetingDate)
return {
title: 'Actions from Previous Meeting',
items: items.map((item) => ({
decision: item.what,
assigned: item.who,
due: item.when_due,
status: item.task?.status || 'pending',
})),
}
}
Privacy & Security¶
Data Handling¶
- Transcripts encrypted at rest
- No storage of recordings (only text)
- Automatic deletion after 12 months
- Audit trail of all extractions
Access Control¶
- Board members: View all
- Executives: View assigned items
- Managers: View their tasks only
- Configurable per tenant
Success Metrics¶
Accuracy¶
- Extraction precision: > 80%
- False positive rate: < 20%
- User acceptance rate: > 70%
Efficiency¶
- Processing time: < 2 min per document
- Time saved vs manual: 45 minutes
- Actions captured: 95% of compliance items
Implementation Plan¶
- Week 1: Document parsing (PDF, DOCX)
- Week 2: AI extraction pipeline
- Week 3: Review interface
- Week 4: Task creation integration
- Week 5: Testing with real transcripts
Limitations (MVP)¶
- English language only
- Text documents only (no audio)
- No real-time processing
- No custom extraction rules
- No learning from corrections
Future Enhancements¶
- Audio transcription support
- Multi-language support
- Custom extraction patterns
- Learning from user feedback
- Integration with board portals
- Automated compliance tracking
Related Documents: