事業目標管理パターン
:LiTarget: 用途
会社・部署・個人のOKR階層を型安全に管理するパターン。
:LiSparkle: 特徴
- 階層的目標管理
- 達成率計算
- 期間別進捗
- 担当者割当
:LiCode: 実コード(SCALE Base より自動抽出)
:LiInfo:
lib/business-goals-data.tsの中身そのもの。コピペ即可。
export interface FiscalRevenueGoal {
period: number;
label: string;
revenue: number;
revenueLabel: string;
}
export interface KPIBreakdown {
label: string;
annual?: number;
monthly?: number;
unit?: string;
note?: string;
}
export interface KPINode {
id: string;
label: string;
annual?: number;
monthly?: number;
unit: string;
emoji?: string;
color?: string;
breakdown?: KPIBreakdown[];
note?: string;
}
export interface KPICategory {
id: string;
name: string;
icon: string;
color: string;
nodes: KPINode[];
}
export interface BusinessGoal {
id: string;
name: string;
description: string;
fiscalPeriod: string;
revenueTargetAnnual: number;
revenueTargetMonthly: number;
revenueBreakdown?: KPIBreakdown[];
categories: KPICategory[];
}
export const ROADMAP: FiscalRevenueGoal[] = [
{ period: 4, label: '4期目', revenue: 100_000_000, revenueLabel: '1億円' },
{ period: 5, label: '5期目', revenue: 300_000_000, revenueLabel: '3億円' },
{ period: 6, label: '6期目', revenue: 900_000_000, revenueLabel: '9億円' },
{ period: 7, label: '7期目', revenue: 1_800_000_000, revenueLabel: '18億円' },
{ period: 8, label: '8期目', revenue: 3_600_000_000, revenueLabel: '36億円' },
{ period: 9, label: '9期目', revenue: 7_200_000_000, revenueLabel: '72億円' },
{ period: 10, label: '10期目', revenue: 10_000_000_000, revenueLabel: '100億円' },
];
export const BUSINESS_GOALS: BusinessGoal[] = [
{
id: 'scale-lead',
name: 'SCALE Lead',
description: 'BDRアウトバウンド/インバウンド支援事業',
fiscalPeriod: '4期目',
revenueTargetAnnual: 85_000_000,
revenueTargetMonthly: 7_100_000,
revenueBreakdown: [
{ label: '固定報酬', annual: 30_000_000, monthly: 2_500_000, unit: '円' },
{ label: '成果報酬', annual: 55_000_000, monthly: 4_600_000, unit: '円' },
],
categories: [
{
id: 'outbound',
name: 'アウトバウンド集客',
icon: 'send',
color: 'blue',
nodes: [
{
id: 'linkedin-out',
label: 'LinkedIn',
annual: 180,
monthly: 15,
unit: '件',
breakdown: [],
},
],
},
{
id: 'inbound',
name: 'インバウンド集客',
icon: 'magnet',
color: 'cyan',
nodes: [
{
id: 'hp',
label: 'HP',
annual: 5,
unit: '件',
},
{
id: 'x',
label: 'X',
annual: 5,
unit: '件',
},
],
},
{
id: 'fs',
name: 'FS(フィールドセールス)',
icon: 'handshake',
color: 'purple',
nodes: [
{
id: 'fs-total',
label: '受注',
annual: 30,
monthly: 3,
unit: '件',
breakdown: [
{ label: '月間受注数', monthly: 3, unit: '件' },
{ label: '商談後受注率', monthly: 20, unit: '%' },
],
},
],
},
{
id: 'pm',
name: 'PM(プロジェクト運用)',
icon: 'folderkanban',
color: 'orange',
nodes: [
{
id: 'pm-apo',
label: 'アポ総数',
annual: 2160,
monthly: 180,
unit: '件',
breakdown: [
{ label: '継続案件数', monthly: 18, unit: '件' },
{ label: '各案件の月間アポ数', monthly: 10, unit: '件' },
{ label: '案件の継続率', monthly: 90, unit: '%' },
],
},
],
},
{
id: 'recruit',
name: '採用',
icon: 'userplus',
color: 'green',
nodes: [
{
id: 'recruit-fixed',
label: '固定報酬メンバー',
annual: 3,
unit: '名',
note: '月間0〜1名',
},
{
id: 'recruit-performance',
label: '成果報酬メンバー',
annual: 60,
monthly: 5,
unit: '名',
},
],
},
],
},
{
id: 'terasu',
name: 'TERASU',
description: 'マーケティング支援事業',
fiscalPeriod: '4期目',
revenueTargetAnnual: 15_000_000,
revenueTargetMonthly: 1_250_000,
categories: [
{
id: 'acquisition',
name: '集客',
icon: 'send',
color: 'blue',
nodes: [
{
id: 'linkedin',
label: 'LinkedIn',
annual: 180,
monthly: 15,
unit: '件',
},
{
id: 'x',
label: 'X運用',
annual: 36,
monthly: 3,
unit: '件',
},
{
id: 'facebook',
label: 'Facebook運用',
annual: 24,
monthly: 2,
unit: '件',
},
],
},
{
id: 'fs',
name: 'FS(フィールドセールス)',
icon: 'handshake',
color: 'purple',
nodes: [
{
id: 'fs-total',
label: '受注',
annual: 36,
monthly: 6,
unit: '件',
breakdown: [
{ label: '月間受注数', monthly: 6, unit: '件' },
{ label: '商談後受注率', monthly: 20, unit: '%' },
],
},
],
},
],
},
];
export function formatYen(n: number): string {
if (n >= 100_000_000) return `${(n / 100_000_000).toFixed(n % 100_000_000 === 0 ? 0 : 1)}億円`;
if (n >= 10_000) return `${(n / 10_000).toLocaleString('ja-JP')}万円`;
return `${n.toLocaleString('ja-JP')}円`;
}
:LiFolder: ソースファイルのパス
/Users/oogushiyuuki/Library/CloudStorage/GoogleDrive-y-ogushi@scale-group.co.jp/マイドライブ/AI/scale-base/lib/business-goals-data.ts
:LiHandPointer: 使い方
対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。
:LiAlertCircle: 注意事項
- 依存パッケージを忘れず追加