内部通報者アプリバックエンドテンプレート
匿名ケースログと調査追跡
生産準備が整った内部通報者バックエンドがBack4appで利用可能で、匿名ログ、ケースステータスの追跡、調査ノートを含みます。ERダイアグラム、データ辞書、JSONスキーマ、APIプレイグラウンド、および迅速なブートストラップのためのAIエージェントプロンプトが含まれています。
主なポイント
このテンプレートでは、匿名ログ、ケース状況、および調査ノートを備えた内部告発者バックエンドを提供し、チームが1つのシステムでインテーク、トリアージ、フォローアップを維持できます。
- 匿名ログのインテーク — reportChannelやanonymityFlagなどのケースセーフフィールドを使用してWhistleblowerLogに報告を保存します。
- ケース状況の追跡 — CaseFileの状況変更を使用して、問題が新しいか、レビュー中か、エスカレーションされているか、または閉じられているかを示します。
- 文脈内の調査ノート — 調査者がアクション、結果、次のステップを記録できるように、InvestigationNoteエントリーをCaseFileに添付します。
概要:内部告発者
内部告発者の良好な管理は、レビュアーが記録をサンプリングし、範囲、ステータス、次に必要なアクションを即座に理解できることを意味します。解決策は運用上のものであり、動機付けではありません。Back4appで内部告発者のワークフローがサイトやシフト全体で一貫性を保つために、Reporter、WhistleblowerLog、CaseFile、InvestigationNoteを構造化されたコンプライアンスの要素として使用してください。このスキーマは、Reporter(エイリアス、連絡方法、フォローアップへの同意)、WhistleblowerLog(報告チャネル、カテゴリ、詳細、匿名フラグ)、CaseFile(ケース番号、ステータス、優先度、割り当てられたコーディネーター)、InvestigationNote(ケースファイル、ノートテキスト、ノートタイプ、作成者)をカバーしており、認証、匿名化された情報収集、ケース処理が組み込まれています。お好みのフロントエンドを接続して、より迅速に出荷してください。
ベスト:
内部告発者バックエンドの概要
季節の変動は、スタッフの変更時に内部告発者に最も影響を与えますが、データモデルは新しい SKU、サイト、またはポリシーに合わせて柔軟に変更されません。
この要約は、チームが Reporter、WhistleblowerLog、CaseFile の周りを理解するのを助け、生の ER 図や JSON エクスポートに飛び込む前にサポートします。
コアのWhistleblower機能
このハブ内のすべてのテクノロジーカードは、Reporter、WhistleblowerLog、CaseFile、及びInvestigationNoteを使用した同じ内部告発者バックエンドスキーマを使用しています。
報告者の受け入れ
報告者は、エイリアス、連絡方法、フォローアップへの同意を保存します。
匿名ログ
WhistleblowerLog は reportChannel、category、details、及び anonymityFlag を記録します。
ケースステータストラッキング
CaseFile は caseNumber、status、priority、及び assignedCoordinator を保持します。
調査ノート
InvestigationNoteはcaseFile、noteType、noteText、そしてcreatedByをリンクします。
Back4app で内部告発者バックエンドを構築する理由は?
Back4app は、レポーター、ケース、メモのプリミティブを提供するため、チームはインフラストラクチャではなく、取り込みと調査のワークフローに集中できます。
- •1 つのモデルの中の CaseFile と WhistleblowerLog: WhistleblowerLog は匿名の詳細をキャプチャし、CaseFile は調査チームのためのステータス、優先度、および割り当てを保持します。
- •機密ノートへの制御されたアクセス: InvestigationNoteのエントリは、ACLとCloud Code検証を使用してコーディネーターと割り当てられたレビュアーに制限できます。
- •Realtime plus APIの柔軟性: ケースステータスの変更にはLive Queriesを使用し、スタッフダッシュボードや監査ツールのためにRESTとGraphQLを利用可能にします。
すべてのプラットフォームで1つのバックエンド契約を使って、 whistleblower intakeを迅速に構築し、反復します。
主な利点
匿名の提出からケース処理に移行するのを助ける内部告発者バックエンドで、記録を失うことはありません。
より迅速な受付設定
ケーステーブルをゼロから設計するのではなく、完全なReporter、WhistleblowerLog、CaseFile、及びInvestigationNoteスキーマから始めます。
よりクリーンなステータス引き継ぎ
CaseFileステータスとassignedCoordinatorフィールドを使用して、コーディネーターがどの案件が新しい、アクティブ、または終了しているかを把握できます。
保護されたノートの取り扱い
調査ノートの記述は、承認されたレビューアと調査者のみに制限しておく。
アクセス境界を明確に
匿名のログ内容を報告者の連絡データから分離し、両方ともACL/CLPで保護する。
1か所にケース履歴を
内部告発者のログと調査ノートを一緒に保存し、レビュー チームが出来事の流れを追えるようにする。
AI支援のブートストラップ
1つの構造化されたプロンプトで、バックエンドのスキャフォールディングと統合ガイダンスを迅速に生成する。
内部告発者アプリを起動する準備はできましたか?
あなたの内部告発者バックエンドを構築し、1つのプロンプトから匿名のログ、ケースの状況、調査ノートを生成するために Back4app AIエージェントに任せてください。
無料で始めましょう — 50 AIエージェントプロンプト/月、クレジットカード不要
技術スタック
この内部告発者バックエンドテンプレートにはすべてが含まれています。
ER図
内部告発者バックエンドスキーマのためのエンティティ関係モデル。
報告者、匿名ログ、ケースファイル、調査ノートをカバーするスキーマ。
図のソースを見る
erDiagram
User ||--o{ WhistleblowerCase : "reportedBy"
User ||--o{ WhistleblowerCase : "assignedTo"
User ||--o{ InvestigationNote : "author"
User ||--o{ CaseStatusUpdate : "updatedBy"
WhistleblowerCase ||--o{ AnonymousLog : "case"
WhistleblowerCase ||--o{ InvestigationNote : "case"
WhistleblowerCase ||--o{ CaseStatusUpdate : "case"
User {
String objectId PK
String username
String email
String password
String role
String fullName
Date createdAt
Date updatedAt
}
WhistleblowerCase {
String objectId PK
String caseNumber
String title
String category
String status
String priority
String reportedById FK
String assignedToId FK
String anonymousCode
String summary
Date createdAt
Date updatedAt
}
AnonymousLog {
String objectId PK
String caseId FK
String message
String visibility
Date submittedAt
String authorCode
Date createdAt
Date updatedAt
}
InvestigationNote {
String objectId PK
String caseId FK
String authorId FK
String noteType
String noteText
Boolean isInternalOnly
Date createdAt
Date updatedAt
}
CaseStatusUpdate {
String objectId PK
String caseId FK
String updatedById FK
String fromStatus
String toStatus
String statusComment
Date updatedAtTime
Date createdAt
Date updatedAt
}
統合フロー
認証、匿名ログ受け入れ、ケースステータス更新、調査ノートのための典型的な実行フロー。
図のソースを表示
sequenceDiagram
participant User
participant App as Internal Whistleblower App
participant Back4app as Back4app Cloud
User->>App: Sign in as manager or coordinator
App->>Back4app: POST /login
Back4app-->>App: Session token
User->>App: Open case queue
App->>Back4app: GET /classes/WhistleblowerCase?include=reportedBy,assignedTo&order=-updatedAt
Back4app-->>App: Case list with status and anonymousCode
User->>App: Add anonymous log or investigation note
App->>Back4app: POST /classes/AnonymousLog
App->>Back4app: POST /classes/InvestigationNote
Back4app-->>App: Log and note objectIds
User->>App: Update case status
App->>Back4app: POST /classes/CaseStatusUpdate
App->>Back4app: PUT /classes/WhistleblowerCase/:objectId
Back4app-->>App: Updated case status and timelineデータ辞書
内部告発者スキーマのすべてのクラスに対する完全なフィールドレベルのリファレンス。
| フィールド | タイプ | 説明 | 必須 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自動 |
| username | String | User login name | |
| String | User email address | ||
| password | String | Hashed password (write-only) | |
| role | String | User role such as manager, coordinator, or investigator | |
| fullName | String | Display name for internal staff | — |
| createdAt | Date | Auto-generated creation timestamp | 自動 |
| updatedAt | Date | Auto-generated last-update timestamp | 自動 |
8フィールドはUserにあります
セキュリティと権限
ACLとCLP戦略が報告者、匿名ログ、ケースファイル、調査ノートをどのように保護するか。
報告者プライバシーコントロール
報告者のcontactMethodとconsentToFollowUpを制限フィールドとして扱います; 承認されたコーディネーターのみがフォローアップの詳細を表示できます。
匿名ログの完全性
認証されたスタッフのみがCaseFile項目を作成または閉じることができ、WhistleblowerLogの提出はデザイン上匿名のままにできます。
スコープ化された調査アクセス
InvestigationNoteとCaseFileへの読み書きを割り当てられた審査者、コンプライアンスリード、またはコーディネーターに制限します。
スキーマ(JSON)
Back4appにコピーするための生のJSONスキーマ定義、または実装リファレンスとして使用します。
{
"classes": [
{
"className": "User",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"username": {
"type": "String",
"required": true
},
"email": {
"type": "String",
"required": true
},
"password": {
"type": "String",
"required": true
},
"role": {
"type": "String",
"required": true
},
"fullName": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "WhistleblowerCase",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"caseNumber": {
"type": "String",
"required": true
},
"title": {
"type": "String",
"required": true
},
"category": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"priority": {
"type": "String",
"required": true
},
"reportedBy": {
"type": "Pointer",
"required": false,
"targetClass": "User"
},
"assignedTo": {
"type": "Pointer",
"required": false,
"targetClass": "User"
},
"anonymousCode": {
"type": "String",
"required": true
},
"summary": {
"type": "String",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "AnonymousLog",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"case": {
"type": "Pointer",
"required": true,
"targetClass": "WhistleblowerCase"
},
"message": {
"type": "String",
"required": true
},
"visibility": {
"type": "String",
"required": true
},
"submittedAt": {
"type": "Date",
"required": true
},
"authorCode": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "InvestigationNote",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"case": {
"type": "Pointer",
"required": true,
"targetClass": "WhistleblowerCase"
},
"author": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"noteType": {
"type": "String",
"required": true
},
"noteText": {
"type": "String",
"required": true
},
"isInternalOnly": {
"type": "Boolean",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "CaseStatusUpdate",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"case": {
"type": "Pointer",
"required": true,
"targetClass": "WhistleblowerCase"
},
"updatedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"fromStatus": {
"type": "String",
"required": true
},
"toStatus": {
"type": "String",
"required": true
},
"statusComment": {
"type": "String",
"required": true
},
"updatedAtTime": {
"type": "Date",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
}
]
}AIエージェントで構築
Back4app AIエージェントを使用して、このテンプレートからリアルな内部告発者アプリを生成します。フロントエンド、バックエンド、認証、匿名ログ、ケースステータス、および調査ノートのフローが含まれます。
Back4appでこの正確なスキーマと動作を持つ内部告発者アプリのバックエンドを作成します。 スキーマ: 1. ユーザー(Back4appのビルトインを使用):ユーザー名、メール、パスワード;objectId、createdAt、updatedAt(システム)。 2. 報告者:エイリアス(文字列、必須)、連絡方法(文字列)、フォローアップへの同意(ブール値、必須);objectId、createdAt、updatedAt(システム)。 3. 告発者ログ:報告者(報告者へのポインタ、オプション)、報告チャネル(文字列、必須)、カテゴリ(文字列、必須)、詳細(文字列、必須)、匿名フラグ(ブール値、必須)、提出日時(日時、必須);objectId、createdAt、updatedAt(システム)。 4. ケースファイル:ケース番号(文字列、必須)、ログ(告発者ログへのポインタ、必須)、ステータス(文字列、必須)、優先度(文字列、必須)、割り当てられたコーディネーター(ユーザーへのポインタ、オプション)、開かれた日時(日時、必須)、閉じられた日時(日時);objectId、createdAt、updatedAt(システム)。 5. 調査ノート:ケースファイル(ケースファイルへのポインタ、必須)、ノートタイプ(文字列、必須)、ノートテキスト(文字列、必須)、作成者(ユーザーへのポインタ、必須)、作成日時(日時、必須);objectId、createdAt、updatedAt(システム)。 セキュリティ: - 報告者の連絡方法とフォローアップへの同意を保護します。ACL/CLPを使用して、承認されたコーディネーターのみが制限された詳細を表示できるようにします。 - 認証されたスタッフのみがケースファイル項目を作成または閉じることができます。バリデーションにはCloud Codeを使用します。 - 調査ノートへの読み取りおよび書き込みを割り当てられたレビュワーとコーディネーターに制限します。 認証: - サインアップ、ログイン、ログアウト。 動作: - 匿名ログの提出、ケースファイルの一覧、ケースステータスの更新、調査ノートの追加。 提供: - スキーマ、ACL、CLPを持つBack4appアプリ;匿名の intake、ケースファイル、調査ノート用のフロントエンド。
以下のボタンを押して、このテンプレートプロンプトが事前に入力された状態でエージェントを開いてください。
これはテクノロジーサフィックスのない基本プロンプトです。生成されたフロントエンドスタックは後で適応できます。
APIプレイグラウンド
内部告発者スキーマに対してRESTおよびGraphQLのエンドポイントを試してください。レスポンスはモックデータを使用し、Back4appアカウントは必要ありません。
このテンプレートと同じスキーマを使用します。
テクノロジーを選択
各カードを展開して、選択したスタックでReporter、WhistleblowerLog、およびCaseFileを統合する方法を確認してください。
Flutter 内部告発者バックエンド
React 内部告発者バックエンド
React ネイティブ 内部告発者バックエンド
Next.js 内部告発者バックエンド
JavaScript 内部告発者バックエンド
Android 内部告発者バックエンド
iOS 内部告発者バックエンド
Vue 内部告発者バックエンド
Angular 内部告発者バックエンド
GraphQL 内部告発者バックエンド
REST API 内部告発者バックエンド
PHP 内部告発者バックエンド
.NET 内部告発者バックエンド
すべてのテクノロジーで得られるもの
すべてのスタックは同じ内部告発者バックエンドスキーマとAPI契約を使用します。
統一された内部告発者データ構造
報告者、匿名ログ、ケースファイル、および調査ノートを一貫したスキーマで管理します。
内部報告のための匿名受付
クリーンなワークフローでreportChannel、category、details、およびanonymityFlagをキャプチャします。
コーディネーターのためのケースステータスの可視性
ケース番号、ステータス、および割り当てられたコーディネーターをチーム全体で同期させます。
調査者のための制御されたノートアクセス
調査ノートの表示を適切なスタッフに制限し、フォローアップの詳細を公開しません。
テクノロジー比較
すべてのサポートされているテクノロジーにわたって、セットアップ速度、SDKスタイル、およびAIサポートを比較します。
| フレームワーク | 設定時間 | 内部告発者アプリの利点 | SDKタイプ | AIサポート |
|---|---|---|---|---|
| 約5分 | モバイルおよびウェブの内部告発者受け入れのための単一コードベース。 | タイプ付きSDK | フル | |
| 5分未満 | ケースの状況とメモのための高速ウェブダッシュボード。 | タイプSDK | フル | |
| 約3〜7分 | 匿名報告のためのクロスプラットフォームモバイルアプリ。 | タイプSDK | フル | |
| 迅速な(5分)セットアップ | サーバーレンダリングされたケースレビューのダッシュボード。 | タイプSDK | フル | |
| 約3〜5分 | 軽量な内部報告統合。 | タイプSDK | フル | |
| 約5分 | 匿名ログ取込のためのネイティブAndroidアプリ。 | 型付きSDK | フル | |
| 5分未満 | ケースレビューのためのネイティブiOSアプリ。 | 型付きSDK | フル | |
| 約3~7分 | Reactの内部告発者ケース用スタッフコンソール。 | 型付きSDK | フル | |
| 迅速な(5分)セットアップ | 調査用のエンタープライズダッシュボード。 | 入力されたSDK | フル | |
| 2分未満 | 内部告発者のケース用の柔軟なGraphQL API。 | GraphQL API | フル | |
| 迅速な(2分)セットアップ | 匿名のログとケースのためのREST API統合。 | REST API | フル | |
| 約3分 | ケース処理のためのサーバーサイド PHP ワークフロー。 | REST API | フル | |
| 約3–7分 | 内部告発操作のための .NET バックエンド。 | 型指定されたSDK | フル |
設定時間は、このテンプレートスキーマを使用したプロジェクトのブートストラップから初めての内部告発者ログまたはケースクエリまでの予想される期間を反映しています。
よくある質問
このテンプレートを使用して内部告発者バックエンドを構築する際の一般的な質問。