Skip to content

BDD-149 — Ajouter le type d'entrée "Sources Heriade" dans le bloc Entrée

1. User Story

En tant qu'utilisateur, je veux pouvoir sélectionner une source Heriade déjà configurée dans le menu Sources comme entrée de données d'un workflow, afin de réutiliser directement une source existante sans passer par un fichier ou un dossier.

2. Critères d'acceptance

#CritèreStatut
1Un nouveau type d'entrée "Sources Heriade" est disponible dans le bloc Entrée, aux côtés de Fichier, Dossier et Connexion API
2L'utilisateur peut sélectionner une source parmi la liste des sources configurées dans le menu Sources
3La sélection est persistée et conservée entre les sessions

3. Périmètre fonctionnel

Frontend

FichierRôle
front/src/components/workflows/WorkflowSourceSelectorPanel.vueAjout de l'option heriade_source dans le toggle de sélection du type d'entrée
front/src/components/workflows/WorkflowHeriadeSourcePanel.vueNouveau panneau de sélection d'une source Heriade (liste filtrables via useSourceStore)
front/src/composables/useWorkflowActiveSourceBindings.jsAjout du binding activeSourceHeriadeInputUuid pour lire/écrire inputSourceUuid sur le nœud canvas
front/src/components/workflows/WorkflowNodeConfigModal.vuePropagation du prop activeSourceHeriadeInputUuid et de l'émission associée
front/src/pages/admin/workflows/WorkflowEditorPage.vueDestructuration et passage du binding au modal

Backend

FichierRôle
back/src/api/workflows/workflow-source-heriade-config.tsNouveau type WorkflowSourceHeriadeConfig et lecteur readSourceHeriadeFromNodeConfiguration
back/src/api/workflows/dto/workflow.dto.tsActivation du champ inputSourceUuid ; description sourceMode étendue à heriade_source
back/src/api/workflows/workflows.service.tsNouvelle méthode resolveSourceIdByUuid ; résolution inputSourceUuid → input_source_id ; configuration JSON sourceHeriade persistée
back/src/api/workflows/workflow.presenter.tsLecture du mode heriade_source dans la réponse canvas ; priorité sur api et document

Base de données

Aucune migration nécessaire : le champ workflow_nodes.input_source_id (FK vers sources) existait déjà dans le schéma Prisma.

4. Flux de données

Utilisateur sélectionne une source dans WorkflowHeriadeSourcePanel

inputSourceUuid stocké dans canvas node data (via activeSourceHeriadeInputUuid)

Sauvegarde : POST /workflows/:uuid/canvas

Backend : resolveSourceIdByUuid → vérifie accès (scope entreprise/super-admin)

workflow_nodes.input_source_id = id de la source
workflow_nodes.configuration = { sourceHeriade: { sourceMode: 'heriade_source', inputSourceUuid } }

Lecture : GET /workflows/:uuid

presenter : readSourceHeriadeFromNodeConfiguration → sourceMode: 'heriade_source'

Frontend : affiche le nom de la source sélectionnée

5. Règles métier

  • Périmètre entreprise : identique aux autres types de sources. Un administrateur ne voit que les sources de son entreprise ; un super-admin voit toutes les sources (via prismaWhereHeriadeSourcesForWorkflowCanvas).
  • Source inaccessible : si la source n'est plus accessible lors de la sauvegarde, le champ input_source_id est mis à null et un warning est loggué (logger.warn).
  • Source supprimée (soft delete) : toInputSourceSummary filtre les sources avec deleted_at non null — inputSource est retourné null dans ce cas.
  • Priorité des modes : dans le presenter, heriade_source est évalué avant api et document.
  • Persistance JSON : la configuration sourceHeriade est stockée en JSONB dans workflow_nodes.configuration ; elle est la source de vérité du mode.

6. Nouveaux éléments

Type WorkflowSourceHeriadeConfig

typescript
type WorkflowSourceHeriadeConfig = {
  sourceMode: 'heriade_source';
  inputSourceUuid: string | null;
};

Configuration JSON stockée dans workflow_nodes.configuration

json
{
  "sourceHeriade": {
    "sourceMode": "heriade_source",
    "inputSourceUuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
  }
}

Réponse canvas — nœud source en mode heriade_source

json
{
  "id": "node-uuid",
  "type": "source",
  "sourceMode": "heriade_source",
  "inputSource": { "uuid": "src-uuid", "name": "RH Effectifs 2026" },
  "inputDocument": null,
  "inputFolder": null,
  "apiConnection": null,
  "apiConnectionUuid": null
}

7. Tests associés

Backend (unitaires)

FichierCouverture
back/src/api/workflows/workflow-source-heriade-config.spec.tsLecture configuration JSON : happy path, valeurs manquantes, cas null, types invalides, sourceMode incorrect
back/src/api/workflows/workflow-presenter.spec.tsMode heriade_source : sourceMode retourné, inputSource exposé, source soft-deletée, priorité sur api

Frontend (unitaires)

FichierCouverture
front/src/__tests__/composables/useWorkflowActiveSourceBindings.spec.jsactiveSourceHeriadeInputUuid : lecture, écriture, nœud non-source, valeur null

8. Hors périmètre

  • Exécution du workflow avec une source Heriade comme entrée (nécessite un ticket dédié côté staging/run).
  • Prévisualisation des données de la source sélectionnée dans le panneau d'entrée.

9. Voir aussi

  • BDD-159 : WorkflowHeriadeSourcePanel.vue regroupe désormais les sources par dossier (heriadeFolder), avec un groupe "Sans dossier" pour les sources non classées.