Dénonciateur
Construire avec l'Agent IA
Backend du lanceur d'alerte interne

Modèle de backend de l'application de lanceur d'alerte interne
Journaux de cas anonymes et Suivi d'enquête

Un backend de lanceur d'alerte interne prêt pour la production sur Back4app avec journaux anonymes, suivi du statut des cas, et notes d'enquête. Comprend un diagramme ER, un dictionnaire de données, un schéma JSON, une aire de jeu API, et une invite Agent IA pour un démarrage rapide.

Principaux points à retenir

Ce modèle vous offre un backend de lanceur d'alerte interne avec des journaux anonymes, un statut de cas et des notes d'enquête afin que votre équipe puisse gérer l'admission, le triage et le suivi dans un seul système.

  1. Admission de journaux anonymesStockez les rapports dans WhistleblowerLog avec des champs sécurisés tels que reportChannel et anonymityFlag.
  2. Suivi du statut du casUtilisez les changements de statut de CaseFile pour indiquer si une affaire est nouvelle, en cours d'examen, escaladée ou fermée.
  3. Notes d'enquête dans le contexteAttachez des entrées InvestigationNote à un CaseFile afin que les enquêteurs puissent enregistrer les actions, les résultats et les prochaines étapes.

Aperçu : Lanceur d'alerte interne

Une bonne hygiène des lanceurs d'alerte internes signifie que les examinateurs peuvent évaluer un dossier et comprendre immédiatement la portée, le statut et l'action requise suivante. La solution est opérationnelle, pas motivationnelle. Utilisez Reporter, WhistleblowerLog, CaseFile et InvestigationNote en tant que primitives de conformité structurées sur Back4app afin que les flux de travail des lanceurs d'alerte internes restent cohérents à travers les sites et les équipes. Le schéma couvre Reporter (alias, contactMethod, consentToFollowUp), WhistleblowerLog (reportChannel, category, details, anonymityFlag), CaseFile (caseNumber, status, priority, assignedCoordinator) et InvestigationNote (caseFile, noteText, noteType, createdBy) avec auth, ingestion anonymisée et gestion de cas intégrées. Connectez votre frontend préféré et expédiez plus rapidement.

Meilleur pour :

Portails de reporting internesPrise en charge anonyme des lanceurs d'alerteTableaux de gestion des casÉquipes de conformité et d'enquêtesLancements MVPLes équipes sélectionnant BaaS pour des produits de reporting sensibles

Aperçu du backend interne des lanceurs d'alerte

Les fluctuations saisonnières frappent le lanceur d'alerte interne le plus durement lorsque le personnel change, mais le modèle de données ne s'adapte pas aux nouveaux SKU, sites ou politiques.

Ce résumé oriente les équipes autour de Reporter, WhistleblowerLog et CaseFile avant que quiconque ne plonge dans les diagrammes ER ou les exports JSON.

Fonctionnalités principales des lanceurs d'alerte

Chaque fiche technologique dans ce hub utilise le même schéma de backend pour les lanceurs d'alerte avec Reporter, WhistleblowerLog, CaseFile et InvestigationNote.

Accueil des rapporteurs

Le rapporteur stocke l'alias, le contact, et le consentement pour le suivi.

Journaux anonymes

Le registre WhistleblowerLog enregistre reportChannel, category, details, et anonymityFlag.

Suivi du statut des cas

CaseFile garde caseNumber, status, priority, et assignedCoordinator.

Notes d'enquête

InvestigationNote relie caseFile, noteType, noteText et createdBy.

Pourquoi construire votre backend interne de lanceur d'alerte avec Back4app ?

Back4app vous offre des primitives de reporter, de dossier et de note afin que votre équipe puisse se concentrer sur le flux de travail d'admission et d'enquête plutôt que sur l'infrastructure.

  • CaseFile et WhistleblowerLog dans un seul modèle: WhistleblowerLog capture des détails anonymes tandis que CaseFile conserve le statut, la priorité et l'attribution pour l'équipe d'enquête.
  • Accès contrôlé aux notes sensibles: Les entrées InvestigationNote peuvent être limitées aux coordinateurs et aux examinateurs assignés utilisant l'ACL et la validation du Cloud Code.
  • Flexibilité API Realtime plus: Utilisez Live Queries pour les changements de statut du cas tout en gardant REST et GraphQL disponibles pour les tableaux de bord du personnel et les outils d'audit.

Construisez et itérez rapidement sur l'accueil des lanceurs d'alerte avec un contrat backend unique sur chaque plateforme.

Avantages principaux

Un backend pour lanceurs d'alerte qui vous aide à passer de la soumission anonyme à la gestion des cas sans perdre de vue l'enregistrement.

Configuration de réception plus rapide

Commencez à partir d'un schéma complet de Reporter, WhistleblowerLog, CaseFile et InvestigationNote plutôt que de concevoir des tables de cas à partir de zéro.

Transmission de statut plus claire

Utilisez les champs CaseFile status et assignedCoordinator pour que les coordinateurs sachent quels dossiers sont nouveaux, actifs ou clôturés.

Gestion des notes protégées

Limitez les écritures des InvestigationNotes aux examinateurs et enquêteurs autorisés.

Clair des limites d'accès

Séparez le contenu des journaux anonymes des données de contact des reporters et protégez les deux avec ACL/CLP.

Historique des cas en un seul endroit

Stockez les journaux des lanceurs d'alerte et les notes d'enquête ensemble pour que les équipes de révision puissent suivre le déroulement des événements.

Bootstrap assisté par IA

Générez rapidement des structures backend et des conseils d'intégration avec une invite structurée.

Prêt à lancer votre application de lanceur d'alerte ?

Laissez l'agent AI Back4app créer votre backend interne de lanceur d'alerte et générer des journaux anonymes, des statuts de cas et des notes d'enquête à partir d'un seul prompt.

Gratuit pour commencer - 50 prompts de l'agent AI/mois, pas de carte de crédit requise

Pile technique

Tout est inclus dans ce modèle de backend interne de lanceur d'alerte.

Frontend
13+ technologies
Backend
Back4app
Base de données
MongoDB
Auth
Auth intégré + sessions
API
REST et GraphQL
Temps réel
Live Queries

Diagramme ER

Modèle de relation d'entité pour le schéma backend interne des lanceurs d'alerte.

Voir la source du diagramme
Mermaid
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
    }

Flux d'intégration

Flux d'exécution typique pour l'authentification, la réception des journaux anonymes, les mises à jour de statut de cas, et les notes d'enquête.

Voir la source du diagramme
Mermaid
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

Dictionnaire de données

Référence complète au niveau des champs pour chaque classe dans le schéma de dénonciateur.

ChampTypeDescriptionRequis
objectIdStringAuto-generated unique identifierAutomatique
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringUser role such as manager, coordinator, or investigator
fullNameStringDisplay name for internal staff
createdAtDateAuto-generated creation timestampAutomatique
updatedAtDateAuto-generated last-update timestampAutomatique

8 champs dans User

Sécurité et autorisations

Comment la stratégie ACL et CLP sécurise les reporters, les journaux anonymes, les dossiers d'affaires et les notes d'enquête.

Contrôles de confidentialité des reporters

Traitez contactMethod et consentToFollowUp du reporter comme des champs restreints ; seuls les coordonnateurs approuvés peuvent voir les détails de suivi.

Intégrité des journaux anonymes

Seul le personnel authentifié peut créer ou fermer des éléments CaseFile, tandis que les soumissions de WhistleblowerLog peuvent rester anonymes par conception.

Accès à l'enquête limité

Restreindre les lectures et écritures sur InvestigationNote et CaseFile aux évaluateurs assignés, aux responsables de la conformité ou aux coordonnateurs.

Schéma (JSON)

Définition de schéma JSON brute prête à être copiée dans Back4app ou utilisée comme référence d'implémentation.

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
        }
      }
    }
  ]
}

Construire avec l'agent IA

Utilisez l'agent IA Back4app pour générer une véritable application interne de lanceur d'alerte à partir de ce modèle, y compris le frontend, le backend, l'authentification et les flux de log anonyme, d'état de dossier et de notes d'enquête.

Agent IA Back4app
Prêt à construire
Créez un backend d'application interne de lanceur d'alerte sur Back4app avec ce schéma et ce comportement exact.

Schéma:
1. Utilisateur (utiliser Back4app intégré) : nom d'utilisateur, e-mail, mot de passe ; objectId, createdAt, updatedAt (système).
2. Reporter : alias (Chaîne, requis), méthodeDeContact (Chaîne), consentementPourSuivi (Boolean, requis) ; objectId, createdAt, updatedAt (système).
3. JournalDeLanceurDalerte : reporter (Pointeur vers Reporter, optionnel), canalDeRapport (Chaîne, requis), catégorie (Chaîne, requis), détails (Chaîne, requis), anonymatFlag (Boolean, requis), soumisÀ (Date, requis) ; objectId, createdAt, updatedAt (système).
4. Dossier : numéroDeDossier (Chaîne, requis), log (Pointeur vers JournalDeLanceurDalerte, requis), statut (Chaîne, requis), priorité (Chaîne, requis), coordinateurAssigné (Pointeur vers Utilisateur, optionnel), ouvertÀ (Date, requis), ferméÀ (Date) ; objectId, createdAt, updatedAt (système).
5. NoteDEnquête : dossier (Pointeur vers Dossier, requis), typeDeNote (Chaîne, requis), texteDeNote (Chaîne, requis), crééPar (Pointeur vers Utilisateur, requis), crééÀ (Date, requis) ; objectId, createdAt, updatedAt (système).

Sécurité:
- Protéger la méthodeDeContact du Reporter et le consentementPourSuivi. Utiliser ACL/CLP pour que seuls les coordinateurs approuvés puissent voir les détails restreints.
- Seuls le personnel authentifié peut créer ou fermer des éléments de Dossier. Utiliser le Cloud Code pour la validation.
- Restreindre les lectures et écritures sur NoteDEnquête aux examinateurs et coordinateurs assignés.

Auth:
- Inscription, connexion, déconnexion.

Comportement:
- Soumettre des logs anonymes, lister les dossiers de cas, mettre à jour le statut des cas et ajouter des notes d'enquête.

Livrer:
- Application Back4app avec schéma, ACL, CLP ; frontend pour saisie anonyme, dossiers de cas et notes d'enquête.

Appuyez sur le bouton ci-dessous pour ouvrir l'Agent avec cette invite de modèle pré-remplie.

Ceci est l'invite de base sans suffixe technologique. Vous pouvez adapter la pile frontend générée par la suite.

Déployez en quelques minutes50 invites gratuites / moisAucune carte de crédit requise

Espace de test API

Essayez les points de terminaison REST et GraphQL contre le schéma du lanceur d'alerte. Les réponses utilisent des données fictives et ne nécessitent pas de compte Back4app.

Chargement du terrain de jeu…

Utilise le même schéma que ce modèle.

Choisissez votre technologie

Développez chaque carte pour voir comment intégrer Reporter, WhistleblowerLog et CaseFile avec votre pile choisie.

Flutter Backend de lanceur d'alerte interne

React Backend de lanceur d'alerte interne

React Native Backend de lanceur d'alerte interne

Next.js Backend de lanceur d'alerte interne

JavaScript Backend de lanceur d'alerte interne

Android Backend de lanceur d'alerte interne

iOS Backend de lanceur d'alerte interne

Vue Backend de lanceur d'alerte interne

Angular Backend de lanceur d'alerte interne

GraphQL Backend de lanceur d'alerte interne

REST API Backend de lanceur d'alerte interne

PHP Backend de lanceur d'alerte interne

.NET Backend de lanceur d'alerte interne

Ce que vous obtenez avec chaque technologie

Chaque pile utilise le même schéma backend pour les lanceurs d'alerte et les contrats API.

Structure de données unifiée pour les lanceurs d'alerte

Gérez les reporters, les journaux anonymes, les dossiers d'affaire et les notes d'enquête avec un schéma cohérent.

Dépôt anonyme pour les signalements internes

Capturez reportChannel, catégorie, détails et anonymityFlag dans un flux de travail clair.

Visibilité du statut de l'affaire pour les coordinateurs

Maintenez caseNumber, statut et assignedCoordinator synchronisés au sein de l'équipe.

Accès contrôlé aux notes pour les enquêteurs

Limitez les vues des InvestigationNote au personnel approprié sans exposer les détails de suivi.

Comparaison des technologies

Comparez la vitesse de configuration, le style SDK et le support de l'IA entre toutes les technologies prises en charge.

CadreTemps de configurationAvantage de l'application de lanceur d'alerteType de SDKSupport AI
Environ 5 minBase de code unique pour l'accueil des lanceurs d'alerte sur mobile et web.SDK tapéComplet
Moins de 5 minutesTableau de bord web rapide pour l'état des cas et les notes.SDK tapéComplet
~3 à 7 minApplication mobile multiplateforme pour un signalement anonyme.SDK tapéComplet
Configuration rapide (5 min)Tableau de bord de révision des cas rendu sur serveur.SDK tapéComplet
~3 à 5 minIntégration de reporting interne légère.SDK tapéComplet
Environ 5 minApplication native Android pour la collecte anonyme de journaux.SDK tapéComplet
Moins de 5 minutesApplication native iOS pour la révision des cas.SDK tapéComplet
~3–7 minConsole pour le personnel React pour les cas de lanceurs d'alerte.SDK tapéComplet
Configuration rapide (5 min)Tableau de bord d'entreprise pour les enquêtes.SDK tapéComplet
Moins de 2 minAPI GraphQL flexible pour les cas de lanceurs d'alerte.API GraphQLComplet
Configuration rapide (2 min)Intégration de REST API pour les journaux et cas anonymes.REST APIComplet
~3 minFlux de travail côté serveur __MARQUE0__ pour le traitement des cas.__MARQUE0__Complet
~3–7 minBackend __MARQUE0__ pour les opérations de lanceur d'alerte.SDK tapéComplet

Le temps de configuration reflète la durée prévue depuis le démarrage du projet jusqu'à la première journalisation ou requête de cas de lanceur d'alerte utilisant ce schéma de modèle.

Questions Fréquemment Posées

Questions courantes concernant la création d'un backend de lanceur d'alerte interne avec ce modèle.

Quels contrôles internes des lanceurs d'alerte sont les plus importants lorsque les opérations s'étendent sur plusieurs sites ?
Quels horodatages et acteurs sont non négociables pour des enregistrements internes crédibles des lanceurs d'alerte ?
Est-il pratique d'exporter des preuves internes des lanceurs d'alerte pour des examinateurs externes de manière structurée ?
Comment afficher le statut des cas dans Flutter ?
Comment gérer l'accès interne des lanceurs d'alerte avec Next.js Server Actions ?
React Native peut-il mettre en cache les journaux des lanceurs d'alerte hors ligne ?
Comment puis-je empêcher l'accès non autorisé aux notes d'enquête ?
Quelle est la meilleure façon d'afficher les dossiers des cas sur Android ?

Fiable pour les développeurs du monde entier

Rejoignez des équipes qui livrent des produits de reporting interne plus rapidement avec les modèles __MARQUE0__

G2 Users Love Us Badge

Prêt à créer votre application interne de lanceur d'alerte ?

Démarrez votre projet interne de lanceur d'alerte en quelques minutes. Aucune carte de crédit requise.

Choisir la technologie