Documentación de Mentat — en evolución continua.
IngenieríaConfigurar DataSources

Configurar DataSources

Una DataSource puebla la Ontología desde una fuente externa. Se gestiona en /datasources (UI) o por el template. Tipos soportados: csv_upload, rest_api, webhook y manual.

Mappings — el corazón

Cada mapping conecta un campo de la fuente con una property de un tipo:

{ "sourceField": "estado", "targetType": "Ticket",
  "targetProperty": "estado", "transformation": "toLowerCase", "isIdentity": false }
  • sourceField — la columna CSV o key del JSON.
  • targetType / targetProperty — adónde aterriza (deben existir vivos).
  • transformation — transformer seguro por nombre (sin eval): trim, toNumber, toBoolean, toLowerCase, toUpperCase, parseDate.
  • isIdentity — marca la clave natural (ver upsert).

El backend valida que cada targetType exista vivo y que targetProperty sea una property declarada de ese tipo. Los mappings apuntan a properties (no links).

Upsert por clave natural

Para que re-ingestar actualice en vez de duplicar, marcá exactamente un mapping por tipo como isIdentity: true. La ingesta computa externalKey = "{dataSourceId}:{valor}" y busca el objeto por (typeId, externalKey):

  • si existe vivo → update (con su version),
  • si no → create.

Sin ningún isIdentity, la fuente es insert-only (cada corrida crea objetos nuevos).

Tipos de fuente

CSV (csv_upload)

Subís un archivo; se parsea con hasHeader (y delimiter/encoding opcionales) y se dispara la ingesta. El archivo vive bajo el prefijo de Storage de la org.

REST (rest_api)

Pull periódico desde un endpoint GET. Soporta headers, auth (none/apiKey/bearer), recordsPath (dot-path al array dentro del JSON) y paginación simple. Admite schedule (cron) para ingestas automáticas.

Webhook (webhook)

Un endpoint público al que un sistema externo postea registros. Se autentica con un token (se muestra una vez al crear; en el doc solo vive su hash). Tiene rate-limit por fuente.

Manual

Placeholder para datos cargados a mano por la UI.

⚠️

Los secretos nunca van en el doc de la DataSource (es legible por todos los miembros). La API key de REST vive aislada en /dataSourceSecrets; el token del webhook se guarda hasheado. El doc legible queda libre de secretos.

Corridas e historial

Cada ingesta —manual, programada o por webhook— deja un IngestionRun inmutable: counts (read/created/updated/failed), errores por fila (acotados), y estado (success / partial / failed). La ingesta es best-effort por fila: una fila inválida no aborta la corrida, queda registrada.

El feed de ingestas aparece en el Dashboard. El detalle de la fuente muestra el historial de corridas con sus logs.