電子契約システム:次のステップ~利用者ごとに異なる契約内容の実装

今までの記事で、訪問介護事業所における電子契約システムのアプリ開発について取り扱ってきました。実際の契約の場面においては、契約書別紙は利用者ごとに異なる内容が必要となります。

次のステップとして、利用者ごとに一部が異なる契約書、例えば契約書別紙のみ利用者ごとに違うなどを取り扱う場合、どのようなシステムの組み方が考えられるのか、AIのサポートを得ながら考えてみたいと思います。


現在のシステム(フォーム送信ベース)を活かしつつ、利用者ごとの個別化に対応するには、主に以下の3つのアプローチが考えられます。


案1: フォーム上の隠しフィールド(最も簡単なアプローチ)

これは、現在の index.phpsend.php の構造をほとんど変えずに実現できる最も簡単な方法です。

  1. 契約内容のパターン化: 契約書別紙の内容を、あらかじめ「プランA」「プランB」「プランC」のようにパターン化します。
  2. index.php (利用者向けURL):
    • 管理者側が利用者に対し、内容が埋め込まれた専用URL(例:index.php?plan=Aindex.php?user_id=123)を送付します。
    • index.php はURLのパラメーター($_GET)を読み取り、対応する契約書別紙のHTMLコンテンツを組み込みます。
    • 同時に、そのプランを示す情報(plan=Aなど)を隠しフィールド(<input type="hidden" name="plan" value="A">)としてフォームに持たせます。
  3. send.php (サーバー側):
    • フォーム送信時、send.php はこの隠しフィールドの plan の値を受け取ります。
    • PDF生成の際、この値(例: “A”)に基づいて、事前に定義されたPHPの変数やテンプレートから対応する契約書別紙のテキストを読み込み、PDFに挿入します。
  • 既存のコード構造の変更が最小限で済みます。
  • データベース(DB)が不要なため、開発速度が最速です。
  • 契約内容のパターンが多い場合、index.phpsend.php のコードが複雑になります。
  • 利用者ごとの個別情報(料金、開始日など)をURLに含める必要があり、セキュリティ上のリスクが増します。

案2: データ駆動型アプローチ(柔軟性と管理性の両立)

このアプローチは、利用者情報の管理と契約書の内容の切り替えを分離するため、最も柔軟で推奨される構成です。

  1. データベース(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
  2. 認証とデータ取得:
    • 管理者はDBで契約レコードを作成し、一意のunique_tokenを生成します。
    • 利用者にURL(例:index.php?token=xyz123)を送付します。
    • index.php はこのトークンを受け取り、send.php と同じサーバーサイド言語(PHP)でDBに接続し、該当するレコード(plan_type, service_start_date など)を読み込みます。
  3. 動的なフォームの生成:
    • DBから取得した内容(例:plan_typeが”スタンダード”、monthly_feeが”¥20,000″)を、契約書別紙のHTMLテンプレートに埋め込んで表示します。
    • トークン(xyz123)を隠しフィールドとしてフォームに含めます。
  4. send.php (サーバー側):
    • フォーム送信時、トークンを受け取ります。
    • DBに接続し、再度利用者データと契約データを取得します。
    • 取得したデータ(料金、プラン名など)を利用して、PDFを生成し、メールを送信します。
    • 最後に、DBの該当レコードの status を「契約済」に更新します。
  • 契約内容の変更や、利用者固有の細かい情報を簡単に管理できます。
  • 契約済みのユーザーに同じURLから再アクセスされても、ステータス(契約済)を確認して拒否できます。
  • 最もスケーラブルで、管理画面の構築が容易です。
  • データベース(DB)の構築と管理が必要になります。

案3: ユーザーアカウントと認証システム(最も厳格なアプローチ)

セキュリティと長期運用を重視し、複数の書類や履歴を管理する場合に採用します。

  1. ログイン機能の追加: 利用者がメールアドレスやID、パスワードでログインする専用の認証システムを構築します。
  2. 専用ポータルページ: ログイン後、利用者専用のポータルページに遷移し、「未締結の契約書」としてリンク(例:/portal/contract/view/123)を表示します。
  3. 権限ベースの表示:
    • ポータルページは、ログインユーザーのIDに基づいてDBからデータを取得します(案2と同様)。
    • 契約書の内容は、ログインしているユーザー以外からはアクセスできないように厳格に制限されます。
    • 契約書の内容確認後、専用の「同意」ボタンでフォームに進む設計にします。
  4. 電子署名: フォームで署名し、送信(案2の send.php と同等の処理)を行います。
  • セキュリティが最も高く、利用者の契約履歴を一元管理できます。
  • 今後の機能拡張(請求書発行、サービス利用記録の閲覧など)に対応しやすいです。
  • 開発コストと期間が最も長くかかります(認証システム、セッション管理、ポータル画面など、フロントエンドとバックエンドの構築が必要)。

現状のシステムの拡張性、開発期間、そして必要となる機能(利用者ごとの契約書別紙)を考えると、案2(データ駆動型アプローチ)が最も現実的でバランスが取れています。

次のステップに進む場合は、「データベース(MySQLなど)の準備と、PHPでDBに接続してデータを取得する仕組み」の構築から着手することになります。

コメント