構築例一覧へ戻る
構築例 05 / Build Example
Example 05 / 05

中小企業AI事務員システム

中小企業のバックオフィス業務(経理・人事・営業事務・一般事務)を一体化するシステム。請求書の発行から入金消込・仕訳、打刻・勤怠締め・給与計算、見積から受注への変換、多段承認ワークフローまで、72機能を同一の操作体系で提供します。

フロントエンド
React + TypeScript + Vite
バックエンド
Express REST API(インメモリ)
設計トレース
業務シナリオ → ユースケース図 / クラス図 / 状態マシン図 → 実装
72機能 請求・入金消込 勤怠・給与計算 見積→受注変換 多段承認ワークフロー OCR・AI支援
設計モデル / Design Models

72クラスを、9つの領域に分けて設計する。

本アプリの実装は、業務シナリオから導出したユースケース図(UC-01〜33)・クラス図・状態マシン図に基づきます。規模が大きいためクラス図は業務領域ごとに分割し、俯瞰図で全体の関係を保っています。16機能が状態マシンを持ち、定義外の遷移はサーバー側で拒否されます(BR-018)。

ユースケース図 Use Case Diagram
中小企業AI事務員システム ユースケース図
経理担当・人事担当・営業事務・一般事務・承認者・システム管理者の6アクターと UC-01〜UC-33 の関係を表現。 原寸で開く ↗
クラス図 俯瞰(72クラス) Overview
クラス図 俯瞰(72クラス)
72クラスを9つの業務領域にグルーピングし、集約ルート(aggregate root)と値オブジェクト(value object)を区別して配置。 原寸で開く ↗
領域別クラス図 / By Domain

各領域の詳細なクラス図です。クリックすると原寸で開きます(数字はメニュー数)。

本書は、本アプリケーションの操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。

  • 対象アプリ: 中小企業AI事務員システム(Office Clerk)
  • 構成: フロントエンド(React + TypeScript + Vite)+ バックエンド(Express REST API / インメモリ)
  • 設計トレース: 業務シナリオ → ユースケース図 / クラス図 / 状態マシン図 → 実装

01はじめに

本アプリは、中小企業のバックオフィス業務(経理・人事・営業事務・一般事務)をデジタル化するためのシステムです。主な機能は次のとおりです。

区分機能
経理請求書の発行・入金消込・支払予定・仕訳・振込データ
人事・総務従業員・打刻・勤怠・休暇申請・給与計算・労務書類
営業事務顧客/仕入先/商品マスタ・見積・受注・発注・契約
一般事務文書管理・メール・予定
ワークフロー申請・承認ステップ・タスク・通知
自動化・AI定期処理・条件トリガー・OCR処理・AI支援
管理部門・ユーザー・ロール・権限・各種ログ

代表的なアクター(利用者像):経理担当 / 人事担当 / 営業事務 / 一般事務 / 承認者(管理職)/ システム管理者。

本アプリはログイン認証を実装していないため、すべての画面に誰でもアクセスできます。権限は「ユーザー」「ロール」「権限」データ上の属性として管理します。

02起動と終了

2.1 必要環境

  • Node.js 20.x 以降

2.2 起動手順

2つのサーバーを起動します。ターミナルを2つ使います。

# ① バックエンド(REST API / ポート 4000)
cd app/backend
npm install        # 初回のみ
npm run dev

# ② フロントエンド(画面 / ポート 5173)
cd app/frontend
npm install        # 初回のみ
npm run dev

ブラウザで http://localhost:5173/ を開きます。

フロントエンドは /api へのアクセスを自動的にバックエンド(4000番)へ転送します。先にバックエンドを起動してください。起動時にデモデータ(請求書48件・見積36件など)が自動投入されます。
ヘルスチェック: GET http://localhost:4000/api/health{"success":true}
⚠️ OSを移行した場合の注意node_modules にはOS固有のバイナリ(esbuild / rollup)が含まれます。Windowsでビルドしたものを macOS・Linux で動かす場合、node_modules を削除して npm install をやり直してください。
rm -rf node_modules && npm install   # backend / frontend の両方で実行

2.3 終了手順

各ターミナルで Ctrl + C。または以下で停止します。

lsof -ti:4000,5173 | xargs kill

03画面構成

画面左のサイドバーから各機能へ移動します。先頭が「ダッシュボード」、以下は業務グループごとにメニューが並びます。

グループ件数代表的なメニュー
経理11請求書 / 入金 / 支払予定 / 仕訳
人事・総務8従業員 / 勤怠 / 休暇申請 / 給与計算
営業事務16顧客マスタ / 見積 / 受注 / 発注
一般事務5文書 / メール / 予定
ワークフロー・タスク7申請 / 承認ステップ / タスク
自動化・AI7OCR処理 / 定期処理 / AI支援リクエスト
データ・分析4部門 / 操作ログ
セキュリティ3ユーザー / ロール / 権限
連携・カスタマイズ・導入11CSV入出力 / データ移行 / FAQ

各機能は共通して 一覧 → 詳細 → 新規/編集 の3画面で構成されます(全72機能が同じ操作体系です)。

  • 一覧画面 /{機能}: 検索・並び替え・ページ送り。行クリックで詳細へ。右上「新規作成」で新規登録。
  • 詳細画面 /{機能}/{id}: 内容表示・状態遷移操作・関連データへの移動。
  • 新規/編集画面 /{機能}/new/{機能}/{id}/edit: 入力フォーム。
サイドバーは画面幅が狭い(md未満)と非表示になります。PC画面での利用を推奨します。

04ダッシュボード

トップ画面(/)に表示されます。売上・未回収の状況を把握し、各機能への入り口として利用します(UC-27)。

  • 件数サマリカード(9種): 請求書・入金・契約・見積・受注・発注・勤怠・承認申請・顧客。カードをクリックするとその一覧画面へ移動します。
  • 最近の請求書: 請求日の新しい順に5件。行クリックで請求書詳細へ。
  • 滞留(未回収)請求書: 状態が「滞留(Overdue)」の請求書を5件。支払期日と金額を赤字で表示。行クリックで詳細へ。
ダッシュボード画面
ダッシュボード画面

05一覧画面の使い方

例として「請求書」一覧(サイドバー「経理」→「請求書」)で説明します。操作方法は全機能で共通です。

請求書一覧画面
請求書一覧画面
操作方法
検索上部の検索ボックスにキーワードを入力し「検索」を押す。機能ごとに決められたテキスト項目が対象(請求書なら請求番号・適格請求書番号)。
並び替え列見出しの「⇅」をクリック。既定は「登録日時」の降順。
ページ送り表の下部のページャ。1ページ20件。
詳細を開く行をクリック。
編集行右端の「編集」ボタン。
削除行右端の「削除」ボタン → 確認メッセージで再度押すと確定。
新規作成右上「新規作成」ボタン。
状態での絞り込みボタンはありません。 一覧に用意されているのはキーワード検索と並び替えのみです。状態で絞り込みたい場合は、ダッシュボードの「滞留(未回収)請求書」を使うか、API(/api/invoices?status=Overdue)を利用してください。

関連データによる絞り込み表示

詳細画面の「関連データ」から移動すると、一覧が関連レコードだけに絞り込まれ、画面上部に青い帯で「〜に関連する〇〇:N件」と表示されます。「絞り込み解除」を押すと通常の一覧に戻ります。

06詳細画面の使い方

請求書詳細画面(状態遷移ボタン)
請求書詳細画面(状態遷移ボタン)

詳細画面は上から順に次の要素で構成されます。

  1. タイトルと右上の操作ボタン: 「一覧へ」「編集」「削除」。
  2. 現在の状態: 状態を持つ機能のみ、日本語のバッジで表示(例: 作成中)。
  3. 操作(状態遷移): 状態を持つ機能のみ表示。→ 8章
  4. 詳細情報: 全項目と登録日時・更新日時。他データへの参照項目は青いリンクで表示され、クリックすると参照先の詳細へ移動します。
  5. 関連データ: この記録を参照している機能へのリンク。クリックすると絞り込み済みの一覧が開きます。
顧客マスタ詳細画面(関連データ)
顧客マスタ詳細画面(関連データ)

上図は顧客マスタの詳細です。「関連データ」から、この顧客の請求書・見積・受注・入金などへワンクリックで移動できます。

07新規作成・編集画面の使い方

一覧右上の「新規作成」、または詳細・一覧の「編集」から開きます。

請求書の新規作成画面
請求書の新規作成画面
  • 項目名の 赤い * は必須項目です。未入力のまま保存しようとするとブラウザの入力チェックで止まります。
  • 入力欄は項目の型に応じて自動的に切り替わります(テキスト / 数値 / 日付 / 日時 / チェックボックス / プルダウン / 参照先の選択)。
  • 状態などの選択項目は日本語のプルダウンで選びます。
  • 画面下部の「作成」(編集時は「更新」)で保存し、詳細画面へ移動します。「キャンセル」で破棄して戻ります。
  • 保存に失敗した場合は画面上部に赤いエラーメッセージが表示されます。
日付欄の表示形式について:日付入力欄はブラウザの言語設定に従うため、mm/dd/yyyy と表示される場合があります。カレンダーアイコンから選択するのが確実です。
状態は新規作成時に任意で選べますが、業務上は既定値(請求書なら「作成中」)のまま作成し、以降は状態遷移ボタンで進めてください。

08状態遷移(ワークフロー)操作

状態を持つ 16機能(請求書・見積・受注・発注・契約・入金・支払予定・仕訳・勤怠・休暇申請・給与計算・文書・申請・タスク・OCR処理・データ移行)では、詳細画面に「操作(状態遷移)」セクションが表示されます。

8.1 操作方法

ボタンを押すと、その操作が実行され、画面上部の「現在の状態」バッジが新しい状態に更新されます。

⚠️ 重要 — 本アプリの状態遷移ボタンの仕様
1. ボタンのラベルは英語のイベント名です(issue / receiveFullPayment など)。日本語訳は 10章の遷移表を参照してください。
2. 現在の状態で実行できない操作もボタンとして表示されます。 ボタンは状態に応じて出し分けされません。押せてしまいますが、実行するとエラーになるだけで、データは変更されません(BR-018 により保護)。
3. どのボタンが有効かは、10章の遷移表の「現在の状態」列で確認してください。

8.2 実行できない操作を押した場合

定義されていない遷移を実行すると、ボタンの上に赤いエラーメッセージが表示され、状態は変わりません

不正な状態遷移のエラー表示
不正な状態遷移のエラー表示

上図は「入金済(Paid)」の請求書に対して issue(発行)を押した例です。次のように表示されます。

不正な状態遷移です (現在: Paid, 操作: issue)。許可された操作: なし

メッセージの「許可された操作」に、その時点で実行可能なイベント名が列挙されます。どの操作が可能か分からないときは、いずれかのボタンを押してこのメッセージを確認するのが確実です(データは変更されません)。

09主要業務の操作手順

9.1 請求書の発行と入金消込(UC-01 / BR-001)

  1. サイドバー「経理」→「請求書」→ 右上「新規作成」。
  2. 請求番号・請求日・支払期限・適格請求書番号・小計・消費税額・合計金額・顧客マスタ などを入力し「作成」。状態は「作成中(Draft)」のままにします。
  3. 詳細画面で「issue」を押す → 発行済(Issued) になります。
  4. 入金があったら金額に応じて押します。全額入金 → 「receiveFullPayment」→ 入金済(Paid)/一部入金 → 「receivePartialPayment」→ 一部入金(PartiallyPaid)、残額入金時に「receiveRemainder」→ 入金済
  5. 支払期日を過ぎた未入金は「passDueDate」→ 滞留(Overdue)。ダッシュボードの「滞留(未回収)請求書」に表示されます。期日後の入金は「receivePaymentAfterDue」→ 入金済
  6. 取り消す場合は「cancel」(作成中 または 発行済 のときのみ)。
一度「入金済」「取消」になった請求書は、それ以上遷移できません(終了状態)。

9.2 見積から受注への変換(UC-14 / UC-15 / BR-011 / BR-012)

  1. サイドバー「営業事務」→「見積」→「新規作成」で見積を登録(状態: 作成中)。
  2. 詳細画面で「submit」→ 提出済(Submitted)
  3. 承認者が「approve」→ 承認済(Approved)。差し戻す場合は「returnToDraft」→ 作成中、失注は「reject」→ 失注(Rejected)
  4. 承認済の見積を「convert」→ 受注変換済(Converted)
  5. 有効期限切れは「expire」→ 期限切れ(Expired)(提出済・承認済から可能)。
見積詳細画面
見積詳細画面

9.3 申請と多段承認(UC-22 / BR-015〜017)

  1. サイドバー「ワークフロー・タスク」→「申請」→「新規作成」(状態: 申請中)。
  2. route」→ 承認中(InApproval)。ワークフロー定義に従って承認ステップへ回付されます。
  3. 承認者の操作:承認 → 「approveStep」→ 承認済(Approved)/差し戻し → 「returnRequest」→ 差戻し(Returned)(申請者が「resubmit」で再申請 → 申請中)/却下 → 「reject」→ 却下(Rejected)
  4. 承認済の申請を「finalize」→ 確定(Finalized)
申請詳細画面
申請詳細画面

9.4 勤怠の締め(UC-10 / BR-008)

  1. サイドバー「人事・総務」→「勤怠」。対象月・勤務日数・勤務時間・残業時間などを確認します。
  2. 従業員が「submit」→ 提出済(Submitted)
  3. 人事担当が「close」→ 確定(Closed)。修正が必要なら「reopen」→ 差戻し(Reopened)
  4. 差戻し後は「resubmit」→ 提出済に戻します。
勤怠一覧画面
勤怠一覧画面

10業務ルールと状態遷移表

10.1 請求書(Invoice)

        issue          receiveFullPayment
 作成中 ──────▶ 発行済 ──────────────────▶ 入金済
   │              │  │                       ▲
   │ cancel       │  │ receivePartialPayment │ receiveRemainder
   ▼              │  ▼                       │
 取消 ◀───────────┘ 一部入金 ────────────────┘
        cancel      │      │
                    │      │ passDueDate
          passDueDate      ▼
                    └──▶ 滞留 ──────────────▶ 入金済
                          receivePaymentAfterDue
現在の状態実行できる操作遷移先
作成中 Draftissue(発行)発行済 Issued
作成中 Draftcancel(取消)取消 Cancelled
発行済 IssuedreceiveFullPayment(全額入金)入金済 Paid
発行済 IssuedreceivePartialPayment(一部入金)一部入金 PartiallyPaid
発行済 IssuedpassDueDate(期日超過)滞留 Overdue
発行済 Issuedcancel(取消)取消 Cancelled
一部入金 PartiallyPaidreceiveRemainder(残額入金)入金済 Paid
一部入金 PartiallyPaidpassDueDate(期日超過)滞留 Overdue
滞留 OverduereceivePaymentAfterDue(期日後入金)入金済 Paid
入金済 Paid / 取消 Cancelled(終了状態・操作なし)

10.2 見積(Quotation)

現在の状態実行できる操作遷移先
作成中 Draftsubmit(提出)提出済 Submitted
提出済 Submittedapprove(承認)承認済 Approved
提出済 SubmittedreturnToDraft(差し戻し)作成中 Draft
提出済 Submittedreject(失注)失注 Rejected
提出済 Submittedexpire(期限切れ)期限切れ Expired
承認済 Approvedconvert(受注へ変換)受注変換済 Converted
承認済 Approvedexpire(期限切れ)期限切れ Expired
受注変換済 / 失注 / 期限切れ(終了状態・操作なし)

10.3 申請(ApprovalRequest)

現在の状態実行できる操作遷移先
申請中 Requestedroute(回付)承認中 InApproval
承認中 InApprovalapproveStep(承認)承認済 Approved
承認中 InApprovalreturnRequest(差し戻し)差戻し Returned
承認中 InApprovalreject(却下)却下 Rejected
差戻し Returnedresubmit(再申請)申請中 Requested
承認済 Approvedfinalize(確定)確定 Finalized
確定 Finalized / 却下 Rejected(終了状態・操作なし)

10.4 勤怠(Attendance)

現在の状態実行できる操作遷移先
記録中 Opensubmit(提出)提出済 Submitted
提出済 Submittedclose(締め確定)確定 Closed
提出済 Submittedreopen(差し戻し)差戻し Reopened
差戻し Reopenedresubmit(再提出)提出済 Submitted
確定 Closed(終了状態・操作なし)

10.5 主な業務ルール

ID内容アプリでの挙動
BR-001請求書はインボイス制度に対応した適格請求書とする請求書に「適格請求書番号」を必須項目として保持。税率別内訳を管理
BR-008勤怠は月次で締め、確定後は変更不可確定(Closed)は終了状態。修正には reopen が必要
BR-011/012見積は承認を経て受注へ変換する承認済(Approved)からのみ convert が可能
BR-015〜017申請は定義に従って多段承認・差し戻しを行う申請の状態マシンと「ワークフロー定義」「承認ステップ」で管理
BR-018定義外の状態遷移を禁止する不正な操作は 400 エラーとし、状態を変更しない(赤いエラー表示)
その他の状態を持つ機能(受注・発注・契約・入金・支払予定・仕訳・休暇申請・給与計算・文書・タスク・OCR処理・データ移行)も同じ仕組みです。実行可能な操作は、8.2 のエラーメッセージ「許可された操作」で確認できます。

11メニュー一覧(全72機能)

グループメニュー(パス)
経理(11)自社情報 /company-profiles / 請求書テンプレート /invoice-templates / 請求書 /invoices / 請求明細 /invoice-lines / 税率別内訳 /invoice-tax-summaries / 入金 /payments / 消込明細 /payment-allocations / 支払予定 /payables / 振込データ /bank-transfer-files / 仕訳 /journal-entries / 仕訳明細 /journal-lines
人事・総務(8)従業員 /employees / 打刻 /time-records / 勤怠 /attendances / 休暇申請 /leave-requests / 給与計算 /payroll-calculations / 給与項目 /payroll-items / 労務書類 /labor-documents / 更新期限 /compliance-deadlines
営業事務(16)顧客マスタ /customers / 顧客担当者 /contact-persons / 請求先情報 /billing-infos / 仕入先マスタ /suppliers / 商品・サービスマスタ /products / 価格マスタ /price-rules / 契約 /contracts / 契約明細 /contract-lines / 見積 /quotations / 見積明細 /quotation-lines / 受注 /sales-orders / 受注明細 /sales-order-lines / 発注 /purchase-orders / 発注明細 /purchase-order-lines / 仕入 /goods-receipts / 顧客履歴 /customer-activities
一般事務(5)文書 /documents / 文書バージョン /document-versions / メールテンプレート /mail-templates / メール /mail-messages / 予定 /calendar-events
ワークフロー・タスク(7)ワークフロー定義 /workflow-definitions / ワークフローステップ /workflow-nodes / 分岐条件 /branch-conditions / 申請 /approval-requests / 承認ステップ /approval-steps / タスク /tasks / 通知 /notifications
自動化・AI(7)定期処理 /scheduled-jobs / 条件トリガー /trigger-rules / OCR処理 /ocr-jobs / OCR抽出項目 /ocr-extracted-fields / AI利用ポリシー /ai-usage-policies / AI支援リクエスト /ai-assist-requests / AI監査ログ /ai-audit-logs
データ・分析(4)部門 /departments / 更新履歴 /change-histories / 操作ログ /audit-logs / ダッシュボード /dashboards
セキュリティ(3)ユーザー /users / ロール /security-roles / 権限 /permissions
連携・カスタマイズ・導入(11)カスタム項目 /custom-fields / 入力フォーム /form-layouts / 帳票レイアウト /report-layouts / 業種別テンプレート /industry-templates / 外部連携設定 /external-system-links / CSV入出力 /csv-jobs / RPA連携 /rpa-jobs / 初期設定ウィザード /setup-wizards / データ移行 /data-migration-jobs / FAQ /faq-articles / 操作ガイド /guide-contents

太字は状態遷移(ワークフロー)操作を持つ機能です(計16)。

12よくある質問・トラブルシュート

症状原因・対処
状態遷移ボタンを押すと赤いエラーが出る現在の状態では実行できない操作です。ボタンは状態に関係なく全て表示される仕様です。エラー文の「許可された操作」を確認してください(データは変更されていません)。
ボタン名が英語で意味が分からない仕様です。日本語訳は 10章の遷移表を参照してください。
一覧で状態を絞り込みたい一覧に状態フィルタはありません。ダッシュボードの滞留一覧、または API(?status=Overdue)を利用してください。
検索してもヒットしない検索対象は機能ごとに決められたテキスト項目のみです。数値・日付・状態は検索対象外です。
保存できない/入力チェックで止まる項目名に赤い * が付く必須項目が未入力です。
画面は出るがデータが空・読み込みに失敗するバックエンド未起動。app/backendnpm run dev を実行してください。
登録したデータが消えたインメモリ保持のため、バックエンド再起動で初期データに戻ります(13章)。
ポートが使用中で起動できない既存プロセスを停止:lsof -ti:4000,5173 | xargs kill他プロジェクトが4000番を使っている場合もあるため、停止前に lsof -nP -iTCP:4000 -sTCP:LISTEN で確認してください。
npm run dev が起動しない/esbuildのエラーが出る別OSでインストールした node_modules が残っています。rm -rf node_modules && npm install をやり直してください(2.2)。
サイドバーが表示されない画面幅が狭い(md未満)と非表示になります。ウィンドウを広げてください。
日付欄が mm/dd/yyyy 表示になるブラウザの言語設定によるものです。カレンダーアイコンから選択してください。

13制約事項

  • データはインメモリ保持です。バックエンドを再起動すると、登録したデータはシード(初期)状態に戻ります。
  • ログイン認証はありません。「ユーザー」「ロール」「権限」はデータとして管理するのみで、画面アクセス制御は行いません。
  • 状態遷移ボタンは現在の状態で出し分けされません。実行可否はサーバー側で検証されます(BR-018)。
  • 一覧画面に状態などの絞り込みUIはありません(検索・並び替え・ページ送りのみ)。API はフィールド絞り込みに対応しています。
  • 「OCR処理」「AI支援リクエスト」「CSV入出力」「RPA連携」「振込データ」などは、状態と項目の管理までを行う想定で、実際のOCR実行・AI推論・ファイル生成は本デモ範囲外です。
  • 金額項目は詳細画面では数値をそのまま表示します(ダッシュボードのみ ¥ 区切り表示)。
  • 本番運用では、永続化層を PostgreSQL(Prisma 等)へ差し替えることを想定しています。

本マニュアルは uml-workflow-v3 で生成したアプリケーションの実装に基づいています。