import React from 'react'; import { t } from '@/i18n/locales'; /** * D8.4 IPO准备度检查清单 - 独立页面 * * 法律/财务/合规/治理/保险 五大类别 * Gantt时间线、依赖管理、阻塞项跟踪 */ interface CheckItem { id: string; item: string; category: string; status: 'done' | 'progress' | 'blocked' | 'pending'; owner: string; deadline: string; dependency?: string; note?: string; } const categories = [ { key: 'legal', label: t('ipo_cat_legal'), icon: '§', color: 'var(--color-primary)' }, { key: 'financial', label: t('ipo_cat_financial'), icon: '$', color: 'var(--color-success)' }, { key: 'sox', label: t('ipo_cat_sox'), icon: '✓', color: 'var(--color-info)' }, { key: 'governance', label: t('ipo_cat_governance'), icon: '◆', color: 'var(--color-warning)' }, { key: 'insurance', label: t('ipo_cat_insurance'), icon: '☂', color: '#FF6B6B' }, ]; const overallProgress = { total: 28, done: 16, inProgress: 7, blocked: 2, pending: 3, percent: 72, }; const milestones: { name: string; date: string; status: 'done' | 'progress' | 'pending' }[] = [ { name: 'S-1初稿提交', date: '2026-Q2', status: 'progress' }, { name: 'SEC审核期', date: '2026-Q3', status: 'pending' }, { name: '路演 (Roadshow)', date: '2026-Q3', status: 'pending' }, { name: '定价 & 上市', date: '2026-Q4', status: 'pending' }, ]; const checklistItems: CheckItem[] = [ // Legal { id: 'L1', item: 'FinCEN MSB牌照', category: 'legal', status: 'done', owner: 'Legal', deadline: '2026-01-15' }, { id: 'L2', item: 'NY BitLicense申请', category: 'legal', status: 'progress', owner: 'Legal', deadline: '2026-06-30', note: '材料已提交,等待审核' }, { id: 'L3', item: '各州MTL注册 (48州)', category: 'legal', status: 'progress', owner: 'Legal', deadline: '2026-05-31', note: '已完成38/48州' }, { id: 'L4', item: 'SEC法律顾问意见书', category: 'legal', status: 'progress', owner: 'External Counsel', deadline: '2026-04-30' }, { id: 'L5', item: '知识产权审计 (IP Audit)', category: 'legal', status: 'done', owner: 'Legal', deadline: '2026-02-01' }, { id: 'L6', item: '商标注册 (USPTO)', category: 'legal', status: 'done', owner: 'Legal', deadline: '2026-01-20' }, // Financial { id: 'F1', item: '独立审计报告 (Deloitte)', category: 'financial', status: 'progress', owner: 'Finance', deadline: '2026-05-15', dependency: 'F2' }, { id: 'F2', item: 'GAAP财务报表 (3年)', category: 'financial', status: 'done', owner: 'Finance', deadline: '2026-03-01' }, { id: 'F3', item: '税务合规证明', category: 'financial', status: 'done', owner: 'Finance', deadline: '2026-02-28' }, { id: 'F4', item: '收入确认政策 (ASC 606)', category: 'financial', status: 'done', owner: 'Finance', deadline: '2026-02-15' }, { id: 'F5', item: '估值模型 & 定价区间', category: 'financial', status: 'pending', owner: 'Finance + IB', deadline: '2026-07-31' }, // SOX { id: 'S1', item: 'ICFR内部控制框架', category: 'sox', status: 'done', owner: 'Compliance', deadline: '2026-01-31' }, { id: 'S2', item: 'IT通用控制 (ITGC)', category: 'sox', status: 'done', owner: 'Engineering', deadline: '2026-02-15' }, { id: 'S3', item: '访问控制审计', category: 'sox', status: 'done', owner: 'Security', deadline: '2026-02-10' }, { id: 'S4', item: '变更管理流程', category: 'sox', status: 'done', owner: 'Engineering', deadline: '2026-02-01' }, { id: 'S5', item: 'SOX 404管理层评估', category: 'sox', status: 'progress', owner: 'Compliance', deadline: '2026-05-31', dependency: 'S1' }, // Governance { id: 'G1', item: '独立董事会组建 (3+)', category: 'governance', status: 'done', owner: 'Board', deadline: '2026-03-01', note: '4名独立董事已任命' }, { id: 'G2', item: '审计委员会', category: 'governance', status: 'done', owner: 'Board', deadline: '2026-03-15' }, { id: 'G3', item: '薪酬委员会', category: 'governance', status: 'done', owner: 'Board', deadline: '2026-03-15' }, { id: 'G4', item: '公司章程 & 治理政策', category: 'governance', status: 'done', owner: 'Legal', deadline: '2026-02-28' }, { id: 'G5', item: 'D&O保险', category: 'governance', status: 'blocked', owner: 'Legal', deadline: '2026-04-30', note: '等待承保方最终报价' }, { id: 'G6', item: 'Insider Trading Policy', category: 'governance', status: 'done', owner: 'Legal', deadline: '2026-03-01' }, // Insurance { id: 'I1', item: '消费者保护基金 ≥$2M', category: 'insurance', status: 'done', owner: 'Finance', deadline: '2026-02-01' }, { id: 'I2', item: 'AML/KYC体系', category: 'insurance', status: 'done', owner: 'Compliance', deadline: '2026-01-15' }, { id: 'I3', item: '赔付机制运行报告', category: 'insurance', status: 'progress', owner: 'Operations', deadline: '2026-05-01' }, { id: 'I4', item: 'Cyber保险', category: 'insurance', status: 'blocked', owner: 'Legal', deadline: '2026-04-15', note: '正在比价3家承保方' }, { id: 'I5', item: '做市商协议签署', category: 'insurance', status: 'pending', owner: 'Finance + IB', deadline: '2026-07-15' }, { id: 'I6', item: '承销商尽职调查', category: 'insurance', status: 'pending', owner: 'External', deadline: '2026-08-01' }, ]; const statusConfig: Record = { done: { label: t('completed'), bg: 'var(--color-success-light)', fg: 'var(--color-success)' }, progress: { label: t('in_progress'), bg: 'var(--color-warning-light)', fg: 'var(--color-warning)' }, blocked: { label: t('blocked'), bg: 'var(--color-error-light)', fg: 'var(--color-error)' }, pending: { label: t('pending'), bg: 'var(--color-gray-100)', fg: 'var(--color-text-tertiary)' }, }; export const IpoReadinessPage: React.FC = () => { return (

{t('ipo_title')}

{t('ipo_subtitle')}

{/* Summary Stats */}
{[ { label: t('ipo_total_items'), value: overallProgress.total, color: 'var(--color-text-primary)' }, { label: t('completed'), value: overallProgress.done, color: 'var(--color-success)' }, { label: t('in_progress'), value: overallProgress.inProgress, color: 'var(--color-warning)' }, { label: t('blocked'), value: overallProgress.blocked, color: 'var(--color-error)' }, { label: t('pending'), value: overallProgress.pending, color: 'var(--color-text-tertiary)' }, ].map(s => (
{s.label}
{s.value}
))}
{/* Overall Progress Bar */}
{t('ipo_overall_progress')} {overallProgress.percent}%
{[ { label: t('completed'), color: 'var(--color-success)' }, { label: t('in_progress'), color: 'var(--color-warning)' }, { label: t('blocked'), color: 'var(--color-error)' }, { label: t('pending'), color: 'var(--color-gray-200)' }, ].map(l => (
{l.label}
))}
{/* Left: Checklist by Category */}
{categories.map(cat => { const items = checklistItems.filter(i => i.category === cat.key); const catDone = items.filter(i => i.status === 'done').length; return (
{cat.icon}
{cat.label}
{catDone}/{items.length} {t('ipo_unit_done')}
{[t('ipo_th_id'), t('ipo_th_item'), t('ipo_th_owner'), t('ipo_th_deadline'), t('ipo_th_status')].map(h => ( ))} {items.map(item => { const st = statusConfig[item.status]; return ( ); })}
{h}
{item.id}
{item.item}
{item.note &&
{item.note}
} {item.dependency && (
{t('ipo_dependency')}: {item.dependency}
)}
{item.owner} {item.deadline} {st.label}
); })}
{/* Right: Timeline & Blockers */}
{/* IPO Timeline */}

{t('ipo_timeline')}

{milestones.map((m, i) => (
{i < milestones.length - 1 && (
)}
{m.name}
{m.date}
))}
{/* Blockers */}

{t('ipo_blockers')}

{checklistItems.filter(i => i.status === 'blocked').map(item => (
{item.id}: {item.item}
{t('ipo_owner')}: {item.owner} · {t('ipo_deadline')}: {item.deadline}
{item.note && (
{item.note}
)}
))}
{/* Category Progress */}

{t('ipo_category_progress')}

{categories.map(cat => { const items = checklistItems.filter(i => i.category === cat.key); const catDone = items.filter(i => i.status === 'done').length; const pct = Math.round(catDone / items.length * 100); return (
{cat.label} {pct}%
); })}
{/* Key Contacts */}

{t('ipo_key_contacts')}

{[ { role: '承销商 (Lead)', name: 'Goldman Sachs', status: '已签约' }, { role: '审计师', name: 'Deloitte', status: '审计中' }, { role: '法律顾问', name: 'Skadden, Arps', status: '已签约' }, { role: 'SEC联络', name: 'SEC Division of Corp Finance', status: '对接中' }, ].map(c => (
{c.role}
{c.name}
{c.status}
))}
); };