Technical Architecture
System architecture, deployment model, and integration landscape.
Solution Architecture
┌─────────────────────────────────────────────────────────────────────────────────┐
│ AI ENABLEMENT & TAX TECHNOLOGY HUB │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Next.js App │ │ Content (MD) │ │ Search Index │ │
│ │ (Frontend) │ │ (13 Sections) │ │ (Fuse.js) │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └────────────────────┼────────────────────┘ │
│ │ │
│ ┌─────────────────────────────┴───────────────────────────────────┐ │
│ │ Docker Container (Node 20) │ │
│ │ Port 3000 → Nginx Reverse Proxy │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────────────────────┤
│ INTEGRATION LANDSCAPE │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Microsoft │ │SharePoint│ │ Oracle │ │ IDF │ │ Custom │ │
│ │ Copilot │ │ Sites │ │ R12/EPM │ │Data Lake │ │ Agent │ │
│ │Pro/Chat │ │ │ │ │ │ │ │(Copilot │ │
│ │ │ │ │ │ │ │ │ │ Studio) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │ │ │
│ └──────────────┼──────────────┼──────────────┼──────────────┘ │
│ │ │ │ │
│ ┌───────┴──────────────┴──────────────┴───────┐ │
│ │ Microsoft Graph API / Connectors │ │
│ └──────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
Custom AI Agent Architecture (Copilot Studio)
┌────────────────────────────────────────────────────────────────────────────┐
│ CANON TAX & FINANCE AI AGENT │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ COPILOT STUDIO AGENT │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ Topics │ │ Actions │ │ Knowledge │ │ Plugins │ │ │
│ │ │(Triggers) │ │ (Flows) │ │ Sources │ │(Connectors│ │ │
│ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────┴──────────────────────────────────┐ │
│ │ KNOWLEDGE LAYER │ │
│ ├─────────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ SharePoint │ │ Dataverse │ │ Data Lake │ │ │
│ │ │ Documents │ │ (Structured │ │ (IDF/ │ │ │
│ │ │ - Tax memos │ │ Knowledge) │ │ Analytics) │ │ │
│ │ │ - Policies │ │ - Decisions │ │ - Invoices │ │ │
│ │ │ - Guides │ │ - Q&A pairs │ │ - Patterns │ │ │
│ │ │ - Minutes │ │ - Rulings │ │ - Metrics │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Outlook │ │ Meeting │ │ External │ │ │
│ │ │ (Email │ │ Transcripts │ │ Sources │ │ │
│ │ │ context) │ │ (History) │ │ (Legislation │ │ │
│ │ │ │ │ │ │ databases) │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────┴──────────────────────────────────┐ │
│ │ OUTPUT LAYER │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │Advisory │ │ Risk │ │Research │ │Project │ │Compliance│ │ │
│ │ │ Memos │ │Analyses │ │Summaries│ │Updates │ │ Checks │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────┘
Project Structure
ai-tax-hub/
├── docker-compose.yml
├── Dockerfile
├── .env.example
├── package.json
├── tsconfig.json
├── tailwind.config.ts
├── next.config.js
├── content/
│ ├── sections/
│ │ ├── copilot-pro-guide.md
│ │ ├── researcher-agent.md
│ │ ├── team-enablement.md
│ │ ├── sharepoint-intelligence.md
│ │ ├── email-intelligence.md
│ │ ├── meeting-intelligence.md
│ │ ├── vat-indirect-tax.md
│ │ ├── corporate-tax.md
│ │ ├── e-invoicing.md
│ │ ├── oracle-erp-epm.md
│ │ ├── ai-adoption-framework.md
│ │ ├── business-case-roi.md
│ │ └── future-roadmap.md
│ └── prompts/
│ └── (organized by category)
├── src/
│ ├── app/
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ ├── globals.css
│ │ ├── sections/
│ │ │ ├── page.tsx
│ │ │ └── [slug]/page.tsx
│ │ ├── prompts/page.tsx
│ │ └── architecture/page.tsx
│ ├── components/
│ │ ├── Navigation.tsx
│ │ └── Footer.tsx
│ └── lib/
│ └── content.ts
└── public/
└── (static assets)Deployment Architecture
Docker Stack
- Node.js 20 Alpine (application)
- Nginx (reverse proxy, SSL)
- Volume mounts for content updates
- Health checks configured
Quick Start
git clone → docker compose up -dSingle command deployment. Add content via markdown files.
Suggested Database Structure (Future Enhancement)
-- For future: tracking usage, feedback, and custom prompts
-- SQLite or PostgreSQL
CREATE TABLE sections (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
category TEXT NOT NULL,
order_num INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE prompts (
id TEXT PRIMARY KEY,
section_id TEXT REFERENCES sections(id),
category TEXT NOT NULL,
content TEXT NOT NULL,
usage_count INTEGER DEFAULT 0,
rating REAL,
tags TEXT[], -- JSON array
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE feedback (
id TEXT PRIMARY KEY,
prompt_id TEXT REFERENCES prompts(id),
rating INTEGER CHECK (rating BETWEEN 1 AND 5),
comment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE usage_log (
id TEXT PRIMARY KEY,
prompt_id TEXT REFERENCES prompts(id),
user_role TEXT,
outcome TEXT, -- 'useful', 'modified', 'not_useful'
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);