概要
訪問看護ステーション向けの業務管理システム。利用者管理・訪問記録(電子カルテ)・スケジュール・ケアプラン・請求管理・評価(BI/FIM)・LIFE連携を統合。マルチテナント対応で事業所ごとにデータ分離。
現状: UI/UXはほぼ完成。認証・テナント分離は実装済みだが、多くのデータ画面はモックで動作中。
全体構造(セキュリティ3層)
ユーザーのリクエストはブラウザから3層のセキュリティを通過してFirestoreに到達する。
マルチテナント分離の仕組み
サインアップ時の処理
認証フロー
データモデル(ER図)
訪問記録入力(3ステップフォーム)
実装状況マップ
!
Supabase migration ファイルも存在(将来の移行候補)
Firestore Security Rules(重要ルール)
全コレクション共通
function getTenantId() {
return request.auth.token.tenant_id
}
allow read:
if isAuth()
&& resource.data.tenant_id == getTenantId()
// → 自分のテナントのデータしか見えない
特別な制限(コレクション別)
-
✕
tenants — create / delete
if false — プログラム(Server Action)でのみ作成可。手動作成禁止
-
✕
users — create
if false — Server Action 経由でのみ作成可
-
✕
claims(請求) — delete
if false — 監査証跡保護のため削除を許可しない
-
✕
未定義コレクション — /{document=**}
デフォルト全拒否。明示的に許可したコレクションのみアクセス可
状態管理(シンプル構成)
グローバル状態管理ライブラリ(Redux / Zustand 等)は不使用。React 標準機能のみで構成。
認証状態
- Layout 内で
onAuthStateChanged
- Firestore
users/{uid} 取得
useState で保持
ページ内
useState
useMemo(検索・フィルタ)
フォーム
react-hook-form
zod(バリデーション)
技術スタック
| カテゴリ |
技術 |
用途 |
| フレームワーク |
Next.js 15 |
App Router、Server Components、Middleware |
| 認証 |
Firebase Auth |
メール認証 + Custom Claims でテナント情報付与 |
| データベース |
Firestore |
NoSQL ドキュメント DB。Security Rules でテナント分離 |
| サーバー |
firebase-admin |
Session Cookie の生成・検証(Server Action 内) |
| UI コンポーネント |
shadcn/ui |
Radix UI ベースのアクセシブルなコンポーネント |
| フォーム |
react-hook-form + zod |
バリデーション付きフォーム管理 |
| 移行候補 |
Supabase |
migration ファイルあり(将来の移行候補) |
visitcare コード構成解説 — 最終更新: 2026-03-18