
電子契約アプリの開発を進めてきましたが、介護や福祉サービスの提供においては利用者に対し、PDF等で各種の通知や契約書など、いろいろと公布したりサインをいただいたり、同意欄にチェックをしてもらったりするなどしなければならない書類がたくさんあります。
電子契約システムの開発を進めてゆく中で、他の書類も似たようなシステムで構築できないかと思うようになりました。書面が違っていても同じシステムで配布したり、同意や署名をいただいたりする汎用的なシステムを作るとしたら、どういった案があるのでしょうか? 事業所側は、複数の種類の書類があることに加え、担当のサービス提供責任者の名前も書面ごと、利用者ごとに変えられるようにする必要があります。
今回もAIに、どんな方法や方式があるのか聞いてみました。
電子契約システムを汎用化し、様々な書類(通知、契約、同意書など)に対応させ、さらに担当者情報も柔軟に変更できるようにする案ですね。これは、「テンプレートエンジン」と「データ駆動型アプローチ」を組み合わせることで実現できます。
事業所側が求める要件(複数種類の書類、担当サービス提供責任者名の変動)を満たす、3つの環境別の汎用的なシステム構築案を提案します。
💡 汎用的な電子書類・同意システム構築案
汎用システムの核となるのは、「文書の種類」「利用者情報」「担当者情報」の3つのデータに基づいて、動的にPDFやHTMLフォームを生成する仕組みです。
案1: 共有レンタルサーバー(PHP/MySQL)ベース
現在の電子契約システムを拡張する、最も現実的で柔軟なアプローチです。
1. データベースの拡張 (MySQL)
利用者データだけでなく、書類のテンプレートと担当者情報をDBで管理します。
| テーブル名 | 役割 | 主なフィールド |
documents | 書類マスター | doc_id (書類ID), title (例: 訪問介護契約書), template_file (使用するHTML/PHPテンプレート名), is_signed_required (署名必須か) |
contracts | 利用者との契約データ | token, user_id, doc_id, service_manager_id (担当者ID), status, signed_data (署名画像) |
managers | 担当者マスター | manager_id, manager_name, manager_contact, manager_signature_image_path (PDFに挿入する担当者の印影など) |
2. システムの動作フロー
- URLの送付: 管理者が利用者に対して、書類IDとトークンを含むURL(例:
index.php?doc=1&token=ABC789)を送付。 index.phpの処理:- URLから
doc=1とtoken=ABC789を取得。 - DBから
doc_id=1の書類タイトルとテンプレートファイル名 (template_A.htmlなど) を取得。 token=ABC789から利用者情報と担当者IDを取得。- PHPのテンプレートエンジン(または単純な
requireやinclude)を使って、該当のテンプレートファイルを読み込み、DBから取得したすべての動的データ(利用者名、プラン、担当者名など)をHTMLに出力して表示。
- URLから
send.phpの処理:- 利用者情報、担当者情報、書類IDを取得。
- 書類IDに基づき、該当するPDF生成テンプレートを呼び出す。
- TCPDFのHTMLテンプレート内で、担当者名や事業所情報を変数として挿入し、PDFを生成。
- 締結後、DBの
contractsテーブルのstatusを更新。
メリット
- 既存の知識(PHP/MySQL)を最大限活用できます。
- 一度汎用化すれば、新しい書類の追加はDBレコードの追加と新しいHTML/PDFテンプレートの作成のみで完了します。
案2: WordPress + フォームプラグイン(管理画面を重視)
事業所側が管理画面(担当者情報の登録、書類の公開など)を簡単に使いたい場合に適しています。
1. 必要な構成要素
- WordPress本体: 管理画面として利用。
- フォームプラグイン: Gravity Forms や Formidable Forms など、カスタムフィールド、フック(Hooks)、PDF出力機能を持つ高度なもの。
- カスタム投稿タイプ/タクソノミー: 「書類テンプレート」と「担当者」を管理するためのカスタム投稿タイプを作成。
2. システムの動作フロー
- 担当者情報の登録: 担当者名をカスタム投稿タイプ(例:
manager)としてWordPressに登録。 - フォームの作成: フォームプラグインで「汎用契約フォーム」を作成し、隠しフィールドとして「書類ID」「担当者ID」を持たせます。
- 書類テンプレートの作成:
- 各書類の固定文章をフォームのHTMLフィールドに記述。
- 動的情報(利用者名、担当者名)は、プラグインのカスタム変数(マージタグ)を使って埋め込む。
- PHPフックによる拡張:
- フォーム送信時、プラグインのフック(送信前の処理)を使って、
send.phpと同様の外部PHPコードを実行。 - このPHPコード内で、フォームデータ、担当者ID、書類IDをすべて受け取り、TCPDFを使ってカスタマイズされたPDFを生成し、メール送信やDB(プラグインのテーブル)の更新を行う。
- フォーム送信時、プラグインのフック(送信前の処理)を使って、
メリット
- 管理者(サービス提供責任者など)がWordPressの管理画面から直感的に担当者名や連絡先を登録・変更できます。
- フォームのUI変更や、新しい同意項目の追加が簡単です。
デメリット
- 高度なフォームプラグインは有料であることが多く、ライセンス費用がかかります。
- プラグインの動作に依存するため、PDF生成などのカスタマイズはPHPフックの知識が必須となります。
案3: Firebase + Cloud Functions(サーバーレス)ベース
技術的な柔軟性とスケーラビリティを最優先する場合の選択肢です。
1. データ設計 (Cloud Firestore)
Firestoreに以下のコレクションを作成します。
documents: {doc_id: 1,title: “契約書A”,template_path: “templates/contractA.html” }managers: {manager_id: “T001”,name: “田中”,title: “サ責” }contracts: {token: “…”,doc_id: 1,manager_id: “T001”,status: “pending” }
2. システムの動作フロー
- フロントエンド (HTML/JS):
- 利用者が URL(例:
index.html?token=ABC)にアクセス。 - JavaScriptが
tokenを取得し、Cloud Functions(APIエンドポイント)に送信してデータを要求。 - FunctionsがFirestoreから 利用者情報、書類テンプレート、担当者情報をすべてJSONで取得し、フロントエンドに返す。
- フロントエンドのJavaScriptが、返されたJSONデータを使用して動的にHTMLフォームを構築(ReactやVueなどのJSフレームワークを使っても良い)。
- 利用者が URL(例:
- バックエンド (Cloud Functions – Node.js):
- フォーム送信時、Functionsが署名データとトークンを受け取る。
- Firestoreから必要なデータを再度取得し、
puppeteerなどのライブラリでPDFを生成。 - 担当者名をPDFに挿入し、SendGrid経由でメールを送信。
- Firestoreの
contractsステータスを更新。
メリット
- 最高の柔軟性とスケーラビリティを提供します。
- すべての処理をAPI経由で行うため、セキュリティを集中管理できます。
- JavaScriptのテンプレートエンジン(例: Handlebars)を使って、PDF生成前のHTMLビューをサーバー・クライアント共通で構築しやすいです。
デメリット
- 最も学習コストが高く、 Node.jsやFirebaseの知識が必須です。
- PDF生成ライブラリ(
puppeteerなど)が高機能である分、Cloud Functionsの実行時間(コスト)が高くなりやすい傾向があります。
まとめ
| 選択肢 | メリット | デメリット | 推奨要件 |
| 案1 (PHP/MySQL) | 既存環境の延長線。新しい書類の追加が容易。 | データベースの管理が必要。 | 現在のシステムからの移行を最小限の労力で行いたい場合。 |
| 案2 (WordPress) | 管理画面の使いやすさ、担当者管理の容易さ。 | 有料プラグインが必要になる可能性。 | 事業所内の非エンジニアでも担当者情報を変更できるようにしたい場合。 |
| 案3 (Firebase) | 最高の柔軟性、将来的な拡張性、サーバー管理不要。 | 学習コストが非常に高い。 開発言語がPHPからNode.jsに変わる。 | 将来的に数百社にこのシステムを展開するなど、スケーラビリティを重視する場合。 |
現在の開発状況とスキルセットを考慮すると、案1(PHP/MySQL)が最もスムーズに汎用システムへ移行できるでしょう。



コメント