
今までの記事で、訪問介護事業所における電子契約システムのアプリ開発について取り扱ってきました。実際の契約の場面においては、契約書別紙は利用者ごとに異なる内容が必要となります。
次のステップとして、利用者ごとに一部が異なる契約書、例えば契約書別紙のみ利用者ごとに違うなどを取り扱う場合、どのようなシステムの組み方が考えられるのか、AIのサポートを得ながら考えてみたいと思います。
現在のシステム(フォーム送信ベース)を活かしつつ、利用者ごとの個別化に対応するには、主に以下の3つのアプローチが考えられます。
📄 利用者ごとに異なる契約書を取り扱う3つのシステム設計案
案1: フォーム上の隠しフィールド(最も簡単なアプローチ)
これは、現在の index.php と send.php の構造をほとんど変えずに実現できる最も簡単な方法です。
仕組み
- 契約内容のパターン化: 契約書別紙の内容を、あらかじめ「プランA」「プランB」「プランC」のようにパターン化します。
index.php(利用者向けURL):- 管理者側が利用者に対し、内容が埋め込まれた専用URL(例:
index.php?plan=Aやindex.php?user_id=123)を送付します。 index.phpはURLのパラメーター($_GET)を読み取り、対応する契約書別紙のHTMLコンテンツを組み込みます。- 同時に、そのプランを示す情報(
plan=Aなど)を隠しフィールド(<input type="hidden" name="plan" value="A">)としてフォームに持たせます。
- 管理者側が利用者に対し、内容が埋め込まれた専用URL(例:
send.php(サーバー側):- フォーム送信時、
send.phpはこの隠しフィールドのplanの値を受け取ります。 - PDF生成の際、この値(例: “A”)に基づいて、事前に定義されたPHPの変数やテンプレートから対応する契約書別紙のテキストを読み込み、PDFに挿入します。
- フォーム送信時、
メリット
- 既存のコード構造の変更が最小限で済みます。
- データベース(DB)が不要なため、開発速度が最速です。
デメリット
- 契約内容のパターンが多い場合、
index.phpとsend.phpのコードが複雑になります。 - 利用者ごとの個別情報(料金、開始日など)をURLに含める必要があり、セキュリティ上のリスクが増します。
案2: データ駆動型アプローチ(柔軟性と管理性の両立)
このアプローチは、利用者情報の管理と契約書の内容の切り替えを分離するため、最も柔軟で推奨される構成です。
仕組み
- データベース(DB)の導入: MySQLなどのDBを利用し、以下の2つのテーブルを作成します。
usersテーブル:user_id,name,email,address,status(契約未締結/済)contractsテーブル:contract_id,user_id,plan_type,service_start_date,monthly_fee,unique_token
- 認証とデータ取得:
- 管理者はDBで契約レコードを作成し、一意の
unique_tokenを生成します。 - 利用者にURL(例:
index.php?token=xyz123)を送付します。 index.phpはこのトークンを受け取り、send.phpと同じサーバーサイド言語(PHP)でDBに接続し、該当するレコード(plan_type,service_start_dateなど)を読み込みます。
- 管理者はDBで契約レコードを作成し、一意の
- 動的なフォームの生成:
- DBから取得した内容(例:
plan_typeが”スタンダード”、monthly_feeが”¥20,000″)を、契約書別紙のHTMLテンプレートに埋め込んで表示します。 - トークン(
xyz123)を隠しフィールドとしてフォームに含めます。
- DBから取得した内容(例:
send.php(サーバー側):- フォーム送信時、トークンを受け取ります。
- DBに接続し、再度利用者データと契約データを取得します。
- 取得したデータ(料金、プラン名など)を利用して、PDFを生成し、メールを送信します。
- 最後に、DBの該当レコードの
statusを「契約済」に更新します。
メリット
- 契約内容の変更や、利用者固有の細かい情報を簡単に管理できます。
- 契約済みのユーザーに同じURLから再アクセスされても、ステータス(契約済)を確認して拒否できます。
- 最もスケーラブルで、管理画面の構築が容易です。
デメリット
- データベース(DB)の構築と管理が必要になります。
案3: ユーザーアカウントと認証システム(最も厳格なアプローチ)
セキュリティと長期運用を重視し、複数の書類や履歴を管理する場合に採用します。
仕組み
- ログイン機能の追加: 利用者がメールアドレスやID、パスワードでログインする専用の認証システムを構築します。
- 専用ポータルページ: ログイン後、利用者専用のポータルページに遷移し、「未締結の契約書」としてリンク(例:
/portal/contract/view/123)を表示します。 - 権限ベースの表示:
- ポータルページは、ログインユーザーのIDに基づいてDBからデータを取得します(案2と同様)。
- 契約書の内容は、ログインしているユーザー以外からはアクセスできないように厳格に制限されます。
- 契約書の内容確認後、専用の「同意」ボタンでフォームに進む設計にします。
- 電子署名: フォームで署名し、送信(案2の
send.phpと同等の処理)を行います。
メリット
- セキュリティが最も高く、利用者の契約履歴を一元管理できます。
- 今後の機能拡張(請求書発行、サービス利用記録の閲覧など)に対応しやすいです。
デメリット
- 開発コストと期間が最も長くかかります(認証システム、セッション管理、ポータル画面など、フロントエンドとバックエンドの構築が必要)。
💡 結論と次のステップ
現状のシステムの拡張性、開発期間、そして必要となる機能(利用者ごとの契約書別紙)を考えると、案2(データ駆動型アプローチ)が最も現実的でバランスが取れています。
次のステップに進む場合は、「データベース(MySQLなど)の準備と、PHPでDBに接続してデータを取得する仕組み」の構築から着手することになります。



コメント