Denunciante
Construir con Agent AI
Backend de Denuncias Internas

Plantilla de Backend de la Aplicación de Denuncias Internas
Registros de Casos Anónimos y Seguimiento de Investigaciones

Un backend de denuncia interna listo para producción en Back4app con registros anónimos, seguimiento del estado del caso y notas de investigación. Incluye diagrama ER, diccionario de datos, esquema JSON, playground de API, y un prompt de Agente AI para un arranque rápido.

Puntos clave

Esta plantilla te proporciona un backend interno para denunciantes con registros anónimos, estado de casos y notas de investigación para que tu equipo pueda mantener la recepción, el triaje y el seguimiento en un solo sistema.

  1. Recepción de registros anónimosAlmacena informes en WhistleblowerLog con campos seguros para el caso como reportChannel y anonymityFlag.
  2. Seguimiento del estado del casoUtiliza los cambios de estado de CaseFile para mostrar si un asunto es nuevo, está en revisión, se ha escalado o está cerrado.
  3. Notas de investigación en contextoAdjunta entradas de InvestigationNote a un CaseFile para que los investigadores puedan registrar acciones, resultados y próximos pasos.

Descripción general: Denunciante interno

Una buena higiene interna de denunciantes significa que los revisores pueden muestrear un registro y entender inmediatamente el alcance, el estado y la siguiente acción requerida. La solución es operativa, no motivacional. Utilice Reporter, WhistleblowerLog, CaseFile e InvestigationNote como primitivas de cumplimiento estructuradas en Back4app para que los flujos de trabajo de denunciantes internos se mantengan consistentes en todos los sitios y turnos. El esquema cubre Reporter (alias, contactMethod, consentToFollowUp), WhistleblowerLog (reportChannel, category, details, anonymityFlag), CaseFile (caseNumber, status, priority, assignedCoordinator) e InvestigationNote (caseFile, noteText, noteType, createdBy) con autenticación, ingreso anonimizado y manejo de casos incorporados. Conecte su frontend preferido y entregue más rápido.

Mejor para:

Portales de informes internosIngreso anónimo de denunciantesTableros de gestión de casosEquipos de cumplimiento e investigacionesLanzamientos de MVPLos equipos eligen BaaS para productos de informes sensibles

Resumen del backend de denunciantes internos

Los cambios estacionales afectan más a los denunciantes internos cuando cambian el personal, pero el modelo de datos no se adapta a nuevos SKUs, sitios o políticas.

Este resumen orienta a los equipos sobre Reporter, WhistleblowerLog y CaseFile antes de que alguien indague en diagramas ER o exportaciones JSON.

Características principales del denunciante

Cada tarjeta de tecnología en este hub utiliza el mismo esquema de backend para denunciantes con Reportero, RegistroDeDenunciante, ExpedienteDeCaso e InvestigaciónNota.

Admisión de denunciantes

El denunciante almacena alias, método de contacto y consentimiento para seguimiento.

Registros anónimos

WhistleblowerLog registra reportChannel, category, details, y anonymityFlag.

Seguimiento del estado del caso

CaseFile mantiene caseNumber, status, priority y assignedCoordinator.

Notas de investigación

InvestigaciónNota vincula expedienteDeCaso, tipoDeNota, textoDeNota y creadoPor.

¿Por qué construir tu backend de denunciante interno con Back4app?

Back4app te proporciona primitivas de reportero, caso y nota para que tu equipo pueda centrarse en el flujo de trabajo de admisión e investigación en lugar de la infraestructura.

  • CaseFile y WhistleblowerLog en un modelo: WhistleblowerLog captura detalles anónimos mientras que CaseFile mantiene el estado, la prioridad y la asignación para el equipo de investigación.
  • Acceso controlado a notas sensibles: Las entradas de InvestigationNote pueden limitarse a coordinadores y revisores asignados mediante ACL y validación de Cloud Code.
  • Flexibilidad del API en tiempo real más: Utiliza Live Queries para cambios en el estado del caso mientras mantienes REST y GraphQL disponibles para paneles de control del personal y herramientas de auditoría.

Construye e itera rápidamente sobre la admisión de denunciantes con un contrato de backend en todas las plataformas.

Beneficios principales

Un backend para denunciantes que te ayuda a pasar de la presentación anónima a la gestión de casos sin perder el rastro del registro.

Configuración de ingesta más rápida

Comienza desde un esquema completo de Reportero, RegistroDeDenunciante, ExpedienteDeCaso e InvestigaciónNota en lugar de diseñar tablas de casos desde cero.

Transferencia de estado más clara

Utiliza los campos de estado de ExpedienteDeCaso y coordinadorAsignado para que los coordinadores sepan qué asuntos son nuevos, activos o cerrados.

Manejo de notas protegidas

Mantenga las escrituras de InvestigationNote limitadas a revisores e investigadores autorizados.

Limitar accesos claros

Separe el contenido de registro anónimo de los datos de contacto del reportero y proteja ambos con ACL/CLP.

Historia del caso en un solo lugar

Almacene los registros de denunciantes y las notas de investigación juntos para que los equipos de revisión puedan seguir la secuencia de eventos.

Bootstrap asistido por IA

Genere estructura de backend y orientación de integración rápido con un solo aviso estructurado.

¿Listo para lanzar su aplicación de denuncias?

Deja que el agente de IA de Back4app construya tu backend interno de denuncias y genere registros anónimos, estado de los casos y notas de investigación a partir de un solo aviso.

Gratis para empezar — 50 avisos de agente de IA/mes, no se requiere tarjeta de crédito

Stack Técnico

Todo incluido en esta plantilla de backend interno de denuncias.

Frontend
13+ tecnologías
Backend
Back4app
Base de datos
MongoDB
Autenticación
Autenticación integrada + sesiones
API
REST y GraphQL
Tiempo real
Live Queries

Diagrama ER

Modelo de relación de entidades para el esquema de backend interno de denunciantes.

Ver origen del diagrama
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
    }

Flujo de integración

Flujo de ejecución típico para la autenticación, recepción de registros anónimos, actualizaciones del estado del caso y notas de investigación.

Ver fuente del diagrama
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

Diccionario de datos

Referencia completa a nivel de campo para cada clase en el esquema de alertadores.

CampoTipoDescripciónRequerido
objectIdStringAuto-generated unique identifierAutomático
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 timestampAutomático
updatedAtDateAuto-generated last-update timestampAutomático

8 campos en User

Seguridad y Permisos

Cómo la estrategia de ACL y CLP asegura a los reporteros, registros anónimos, archivos de casos y notas de investigación.

Controles de privacidad del reportero

Tratar el método de contacto del reportero y el consentimiento para el seguimiento como campos restringidos; solo los coordinadores aprobados pueden ver los detalles del seguimiento.

Integridad del registro anónimo

Solo el personal autenticado puede crear o cerrar elementos de CaseFile, mientras que las presentaciones de WhistleblowerLog pueden permanecer anónimas por diseño.

Acceso a investigación limitado

Restringir lecturas y escrituras en InvestigationNote y CaseFile a revisores asignados, líderes de cumplimiento o coordinadores.

Esquema (JSON)

Definición de esquema JSON en bruto lista para copiar en Back4app o usar como referencia de implementación.

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

Construir con agente de IA

Usa el agente de IA Back4app para generar una aplicación interna de denunciantes real a partir de esta plantilla, incluyendo frontend, backend, autenticación, y flujos de registro anónimo, estado del caso y notas de investigación.

Agente de IA Back4app
Listo para construir
Crea un backend de aplicación interna de denunciantes en Back4app con este esquema y comportamiento exactos.

Esquema:
1. Usuario (usar Back4app integrado): nombre de usuario, correo electrónico, contraseña; objectId, createdAt, updatedAt (sistema).
2. Reportero: alias (String, requerido), métodoDeContacto (String), consentimientoParaSeguimiento (Booleano, requerido); objectId, createdAt, updatedAt (sistema).
3. RegistroDeDenunciante: reportero (Puntero a Reportero, opcional), canalDeReporte (String, requerido), categoría (String, requerido), detalles (String, requerido), banderaDeAnonimato (Booleano, requerido), enviadoEn (Fecha, requerido); objectId, createdAt, updatedAt (sistema).
4. ArchivoDeCaso: númeroDeCaso (String, requerido), registro (Puntero a RegistroDeDenunciante, requerido), estado (String, requerido), prioridad (String, requerido), coordinadorAsignado (Puntero a Usuario, opcional), abiertoEn (Fecha, requerido), cerradoEn (Fecha); objectId, createdAt, updatedAt (sistema).
5. NotaDeInvestigación: archivoDeCaso (Puntero a ArchivoDeCaso, requerido), tipoDeNota (String, requerido), textoDeNota (String, requerido), creadoPor (Puntero a Usuario, requerido), creadoEn (Fecha, requerido); objectId, createdAt, updatedAt (sistema).

Seguridad:
- Proteger el métodoDeContacto del reportero y consentimientoParaSeguimiento. Usa ACL/CLP para que solo coordinadores aprobados puedan ver detalles restringidos.
- Solo el personal autenticado puede crear o cerrar elementos de ArchivoDeCaso. Usa Cloud Code para validación.
- Restringir lecturas y escrituras en NotaDeInvestigación a revisores y coordinadores asignados.

Autenticación:
- Registro, inicio de sesión, cierre de sesión.

Comportamiento:
- Enviar registros anónimos, listar archivos de casos, actualizar estado de caso y agregar notas de investigación.

Entregar:
- Aplicación Back4app con esquema, ACLs, CLPs; frontend para ingresos anónimos, archivos de casos y notas de investigación.

Presiona el botón de abajo para abrir el agente con este aviso de plantilla pre-lleno.

Este es el aviso base sin un sufijo tecnológico. Puedes adaptar la pila de frontend generada después.

Despliega en minutos50 avisos gratuitos / mesNo se requiere tarjeta de crédito

API Playground

Prueba los puntos finales REST y GraphQL contra el esquema del denunciante. Las respuestas utilizan datos ficticios y no requieren una cuenta de Back4app.

Cargando el entorno de pruebas…

Utiliza el mismo esquema que esta plantilla.

Elige tu tecnología

Expande cada tarjeta para ver cómo integrar Reporter, WhistleblowerLog y CaseFile con tu stack elegido.

Flutter Backend de Denunciante Interno

React Backend de Denunciante Interno

React Nativo Backend de Denunciante Interno

Next.js Backend de Denunciante Interno

JavaScript Backend de Denunciante Interno

Android Backend de Denunciante Interno

iOS Backend de Denunciante Interno

Vue Backend de Denunciante Interno

Angular Backend de Denunciante Interno

GraphQL Backend de Denunciante Interno

REST API Backend de Denunciante Interno

PHP Backend de Denunciante Interno

.NET Backend de Denunciante Interno

Lo que obtienes con cada tecnología

Cada stack utiliza el mismo esquema de backend y contratos de API para denunciantes.

Estructura de datos unificada para denunciantes

Administra reporteros, registros anónimos, archivos de casos y notas de investigación con un esquema consistente.

Ingreso anónimo para reportes internos

Captura reportChannel, category, details, y anonymityFlag en un flujo de trabajo limpio.

Visibilidad del estado del caso para coordinadores

Mantén caseNumber, status, y assignedCoordinator sincronizados en todo el equipo.

Acceso controlado a notas para investigadores

Limita las vistas de InvestigationNote al personal adecuado sin exponer detalles de seguimiento.

Comparación de Tecnología

Compara la velocidad de configuración, estilo de SDK y soporte de IA entre todas las tecnologías soportadas.

FrameworkTiempo de configuraciónBeneficio de la aplicación para denunciantesTipo de SDKSoporte de IA
Aproximadamente 5 minutosCódigo base único para la recepción de denunciantes en móvil y web.SDK tipadoCompleto
Menos de 5 minutosPanel web rápido para el estado de los casos y notas.SDK tipadoCompleto
~3–7 minAplicación móvil multiplataforma para reportes anónimos.SDK tipadoCompleto
Configuración rápida (5 min)Panel de revisión de casos renderizado en servidor.SDK tipadoCompleto
~3–5 minIntegración de informes internos liviana.SDK tipadoCompleto
Acerca de 5 minAplicación nativa de Android para la recepción anónima de registros.SDK tipadoCompleto
Menos de 5 minutosAplicación nativa de iOS para revisión de casos.SDK tipadoCompleto
~3–7 minConsola para personal de React para casos de denunciantes.SDK tipadoCompleto
Configuración rápida (5 min)Panel de control empresarial para investigaciones.SDK escritoCompleto
Menos de 2 minAPI flexible de GraphQL para casos de denunciantes.API de GraphQLCompleto
Configuración rápida (2 min)Integración de REST API para registros y casos anónimos.REST APICompleto
~3 minFlujo de trabajo del lado del servidor de __MARCA0__ para el manejo de casos.__MARCA0__Completo
~3–7 minBackend de __MARCA0__ para operaciones de denunciantes.SDK escritoCompleto

El tiempo de configuración refleja la duración esperada desde el inicio del proyecto hasta el primer registro o consulta de caso del denunciante utilizando este esquema de plantilla.

Preguntas Frecuentes

Preguntas comunes sobre la creación de un backend interno de denunciantes con esta plantilla.

¿Qué controles internos de denunciantes son más importantes cuando las operaciones abarcan varios sitios?
¿Qué marcas de tiempo y actores son innegociables para registros creíbles de denunciantes internos?
¿Es práctico exportar evidencia interna de denunciantes para revisores externos de manera estructurada?
¿Cómo muestro el estado del caso en Flutter?
¿Cómo gestiono el acceso interno de los informantes con Next.js Server Actions?
¿Puede React Native almacenar en caché los registros de los informantes sin conexión?
¿Cómo evito el acceso no autorizado a las notas de investigación?
¿Cuál es la mejor manera de mostrar los archivos de casos en Android?

Confiado por desarrolladores en todo el mundo

Únete a equipos que lanzan productos de informes internos más rápido con plantillas de __MARCA0__

G2 Users Love Us Badge

¿Listo para construir tu aplicación interna para denunciantes?

Comienza tu proyecto interno de denunciantes en minutos. No se requiere tarjeta de crédito.

Elegir Tecnología