72クラスを、9つの領域に分けて設計する。
本アプリの実装は、業務シナリオから導出したユースケース図(UC-01〜33)・クラス図・状態マシン図に基づきます。規模が大きいためクラス図は業務領域ごとに分割し、俯瞰図で全体の関係を保っています。16機能が状態マシンを持ち、定義外の遷移はサーバー側で拒否されます(BR-018)。
各領域の詳細なクラス図です。クリックすると原寸で開きます(数字はメニュー数)。
本書は、本アプリケーションの操作手順をまとめた利用者向けマニュアルです。画面・ボタン名は実装に準拠しています。
- 対象アプリ: 中小企業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}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 | 申請 / 承認ステップ / タスク |
| 自動化・AI | 7 | OCR処理 / 定期処理 / AI支援リクエスト |
| データ・分析 | 4 | 部門 / 操作ログ |
| セキュリティ | 3 | ユーザー / ロール / 権限 |
| 連携・カスタマイズ・導入 | 11 | CSV入出力 / データ移行 / FAQ |
各機能は共通して 一覧 → 詳細 → 新規/編集 の3画面で構成されます(全72機能が同じ操作体系です)。
- 一覧画面
/{機能}: 検索・並び替え・ページ送り。行クリックで詳細へ。右上「新規作成」で新規登録。 - 詳細画面
/{機能}/{id}: 内容表示・状態遷移操作・関連データへの移動。 - 新規/編集画面
/{機能}/new、/{機能}/{id}/edit: 入力フォーム。
04ダッシュボード
トップ画面(/)に表示されます。売上・未回収の状況を把握し、各機能への入り口として利用します(UC-27)。
- 件数サマリカード(9種): 請求書・入金・契約・見積・受注・発注・勤怠・承認申請・顧客。カードをクリックするとその一覧画面へ移動します。
- 最近の請求書: 請求日の新しい順に5件。行クリックで請求書詳細へ。
- 滞留(未回収)請求書: 状態が「滞留(Overdue)」の請求書を5件。支払期日と金額を赤字で表示。行クリックで詳細へ。
05一覧画面の使い方
例として「請求書」一覧(サイドバー「経理」→「請求書」)で説明します。操作方法は全機能で共通です。
| 操作 | 方法 |
|---|---|
| 検索 | 上部の検索ボックスにキーワードを入力し「検索」を押す。機能ごとに決められたテキスト項目が対象(請求書なら請求番号・適格請求書番号)。 |
| 並び替え | 列見出しの「⇅」をクリック。既定は「登録日時」の降順。 |
| ページ送り | 表の下部のページャ。1ページ20件。 |
| 詳細を開く | 行をクリック。 |
| 編集 | 行右端の「編集」ボタン。 |
| 削除 | 行右端の「削除」ボタン → 確認メッセージで再度押すと確定。 |
| 新規作成 | 右上「新規作成」ボタン。 |
/api/invoices?status=Overdue)を利用してください。関連データによる絞り込み表示
詳細画面の「関連データ」から移動すると、一覧が関連レコードだけに絞り込まれ、画面上部に青い帯で「〜に関連する〇〇:N件」と表示されます。「絞り込み解除」を押すと通常の一覧に戻ります。
06詳細画面の使い方
詳細画面は上から順に次の要素で構成されます。
- タイトルと右上の操作ボタン: 「一覧へ」「編集」「削除」。
- 現在の状態: 状態を持つ機能のみ、日本語のバッジで表示(例:
作成中)。 - 操作(状態遷移): 状態を持つ機能のみ表示。→ 8章
- 詳細情報: 全項目と登録日時・更新日時。他データへの参照項目は青いリンクで表示され、クリックすると参照先の詳細へ移動します。
- 関連データ: この記録を参照している機能へのリンク。クリックすると絞り込み済みの一覧が開きます。
上図は顧客マスタの詳細です。「関連データ」から、この顧客の請求書・見積・受注・入金などへワンクリックで移動できます。
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)
- サイドバー「経理」→「請求書」→ 右上「新規作成」。
- 請求番号・請求日・支払期限・適格請求書番号・小計・消費税額・合計金額・顧客マスタ などを入力し「作成」。状態は「作成中(Draft)」のままにします。
- 詳細画面で「
issue」を押す → 発行済(Issued) になります。 - 入金があったら金額に応じて押します。全額入金 → 「
receiveFullPayment」→ 入金済(Paid)/一部入金 → 「receivePartialPayment」→ 一部入金(PartiallyPaid)、残額入金時に「receiveRemainder」→ 入金済。 - 支払期日を過ぎた未入金は「
passDueDate」→ 滞留(Overdue)。ダッシュボードの「滞留(未回収)請求書」に表示されます。期日後の入金は「receivePaymentAfterDue」→ 入金済。 - 取り消す場合は「
cancel」(作成中 または 発行済 のときのみ)。
9.2 見積から受注への変換(UC-14 / UC-15 / BR-011 / BR-012)
- サイドバー「営業事務」→「見積」→「新規作成」で見積を登録(状態: 作成中)。
- 詳細画面で「
submit」→ 提出済(Submitted)。 - 承認者が「
approve」→ 承認済(Approved)。差し戻す場合は「returnToDraft」→ 作成中、失注は「reject」→ 失注(Rejected)。 - 承認済の見積を「
convert」→ 受注変換済(Converted)。 - 有効期限切れは「
expire」→ 期限切れ(Expired)(提出済・承認済から可能)。
9.3 申請と多段承認(UC-22 / BR-015〜017)
- サイドバー「ワークフロー・タスク」→「申請」→「新規作成」(状態: 申請中)。
- 「
route」→ 承認中(InApproval)。ワークフロー定義に従って承認ステップへ回付されます。 - 承認者の操作:承認 → 「
approveStep」→ 承認済(Approved)/差し戻し → 「returnRequest」→ 差戻し(Returned)(申請者が「resubmit」で再申請 → 申請中)/却下 → 「reject」→ 却下(Rejected)。 - 承認済の申請を「
finalize」→ 確定(Finalized)。
9.4 勤怠の締め(UC-10 / BR-008)
- サイドバー「人事・総務」→「勤怠」。対象月・勤務日数・勤務時間・残業時間などを確認します。
- 従業員が「
submit」→ 提出済(Submitted)。 - 人事担当が「
close」→ 確定(Closed)。修正が必要なら「reopen」→ 差戻し(Reopened)。 - 差戻し後は「
resubmit」→ 提出済に戻します。
10業務ルールと状態遷移表
10.1 請求書(Invoice)
issue receiveFullPayment
作成中 ──────▶ 発行済 ──────────────────▶ 入金済
│ │ │ ▲
│ cancel │ │ receivePartialPayment │ receiveRemainder
▼ │ ▼ │
取消 ◀───────────┘ 一部入金 ────────────────┘
cancel │ │
│ │ passDueDate
passDueDate ▼
└──▶ 滞留 ──────────────▶ 入金済
receivePaymentAfterDue
| 現在の状態 | 実行できる操作 | 遷移先 |
|---|---|---|
| 作成中 Draft | issue(発行) | 発行済 Issued |
| 作成中 Draft | cancel(取消) | 取消 Cancelled |
| 発行済 Issued | receiveFullPayment(全額入金) | 入金済 Paid |
| 発行済 Issued | receivePartialPayment(一部入金) | 一部入金 PartiallyPaid |
| 発行済 Issued | passDueDate(期日超過) | 滞留 Overdue |
| 発行済 Issued | cancel(取消) | 取消 Cancelled |
| 一部入金 PartiallyPaid | receiveRemainder(残額入金) | 入金済 Paid |
| 一部入金 PartiallyPaid | passDueDate(期日超過) | 滞留 Overdue |
| 滞留 Overdue | receivePaymentAfterDue(期日後入金) | 入金済 Paid |
| 入金済 Paid / 取消 Cancelled | (終了状態・操作なし) | — |
10.2 見積(Quotation)
| 現在の状態 | 実行できる操作 | 遷移先 |
|---|---|---|
| 作成中 Draft | submit(提出) | 提出済 Submitted |
| 提出済 Submitted | approve(承認) | 承認済 Approved |
| 提出済 Submitted | returnToDraft(差し戻し) | 作成中 Draft |
| 提出済 Submitted | reject(失注) | 失注 Rejected |
| 提出済 Submitted | expire(期限切れ) | 期限切れ Expired |
| 承認済 Approved | convert(受注へ変換) | 受注変換済 Converted |
| 承認済 Approved | expire(期限切れ) | 期限切れ Expired |
| 受注変換済 / 失注 / 期限切れ | (終了状態・操作なし) | — |
10.3 申請(ApprovalRequest)
| 現在の状態 | 実行できる操作 | 遷移先 |
|---|---|---|
| 申請中 Requested | route(回付) | 承認中 InApproval |
| 承認中 InApproval | approveStep(承認) | 承認済 Approved |
| 承認中 InApproval | returnRequest(差し戻し) | 差戻し Returned |
| 承認中 InApproval | reject(却下) | 却下 Rejected |
| 差戻し Returned | resubmit(再申請) | 申請中 Requested |
| 承認済 Approved | finalize(確定) | 確定 Finalized |
| 確定 Finalized / 却下 Rejected | (終了状態・操作なし) | — |
10.4 勤怠(Attendance)
| 現在の状態 | 実行できる操作 | 遷移先 |
|---|---|---|
| 記録中 Open | submit(提出) | 提出済 Submitted |
| 提出済 Submitted | close(締め確定) | 確定 Closed |
| 提出済 Submitted | reopen(差し戻し) | 差戻し Reopened |
| 差戻し Reopened | resubmit(再提出) | 提出済 Submitted |
| 確定 Closed | (終了状態・操作なし) | — |
10.5 主な業務ルール
| ID | 内容 | アプリでの挙動 |
|---|---|---|
| BR-001 | 請求書はインボイス制度に対応した適格請求書とする | 請求書に「適格請求書番号」を必須項目として保持。税率別内訳を管理 |
| BR-008 | 勤怠は月次で締め、確定後は変更不可 | 確定(Closed)は終了状態。修正には reopen が必要 |
| BR-011/012 | 見積は承認を経て受注へ変換する | 承認済(Approved)からのみ convert が可能 |
| BR-015〜017 | 申請は定義に従って多段承認・差し戻しを行う | 申請の状態マシンと「ワークフロー定義」「承認ステップ」で管理 |
| BR-018 | 定義外の状態遷移を禁止する | 不正な操作は 400 エラーとし、状態を変更しない(赤いエラー表示) |
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/backend で npm 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 等)へ差し替えることを想定しています。









