EN
Copied
Modules

Filtrer

Objectif

Le module filter restreint un jeu de données aux lignes qui satisfont un ensemble de règles. Il est interne au pipeline (voir /docs/fr/concepts/pipeline-orchestration) : il consomme le CSV produit par un nœud amont et émet un sous-ensemble strict, avec les mêmes colonnes. Aucune nouvelle donnée n'est récupérée et aucune colonne n'est ajoutée. Filtrer tôt économise le budget sur les étapes d'enrichissement coûteuses qui suivent.

Entrées

Les règles sont lues depuis l'objet config du nœud et appliquées ligne par ligne dans un ordre fixe. Chaque clé est optionnelle ; une règle vide est sans effet.

Règles standard

Clé Type Comportement
require_phone bool Garde les lignes où telephone est non vide.
require_site bool Garde les lignes où site_web est non vide.
require_email bool Garde les lignes où email est non vide.
exclude_aggregators bool Écarte les lignes dont site_web pointe vers un domaine d'agrégateur connu.
alive_only bool Garde les lignes dont le status de dead-check est alive ou stale.
has_personal_email bool Garde les lignes où au moins une adresse dans email est une boîte personnelle (non basée sur un rôle).
rating_min float Garde les lignes où note >= rating_min.
reviews_min int Garde les lignes où nb_avis >= reviews_min.

Règles avancées

Clé Forme Comportement
phone_prefix { column?, prefixes[], prefix_unparseable_keep? } Garde les lignes dont la colonne téléphone commence par l'un des prefixes (par ex. 06, +33). Nécessite la bibliothèque phonenumbers sur le worker — sinon la règle est journalisée et ignorée.
email_domain { column?, include[], exclude[], reject_disposable? } Garde les lignes dont le domaine d'email est dans include (si défini) et pas dans exclude. reject_disposable écarte les fournisseurs jetables connus.
category { column, values[] } Garde les lignes dont la valeur de column est contenue dans values.
dedup_column string Fusionne les lignes partageant la même valeur sur cette colonne (la première ligne l'emporte).

Échantillonnage

Clé Type Comportement
sample_type "n" \| "pct" \| "" Sélectionne le mode d'échantillonnage appliqué après les règles ci-dessus.
sample_n int Garde les n premières lignes retenues.
sample_pct 0..100 Garde un pourcentage des lignes retenues.
sample_seed int Graine pour un échantillonnage aléatoire reproductible.

Ordre d'application : drapeaux d'exigence → agrégateurs/alive/note/avis → email personnel → phone_prefixemail_domaincategorydedup_column → échantillonnage.

Sorties

Le module écrit un CSV avec les mêmes colonnes que le nœud amont, contenant uniquement les lignes retenues. Il ne produit pas de nouveaux champs (needs: [], produces: [], pipeline_passthrough: true).

Champ Valeur
output_filename results_<label>.csv (même forme qu'amont)
n_items Nombre de lignes gardées
progress_unit lignes
results_unit lignes gardées

Cycle de vie

Cycle de vie de job standard — voir /docs/fr/concepts/jobs-lifecycle. Les jobs de filtrage tournent dans le pool parallel, sont créés par le runner de pipeline, et ne sont exposés ni sur le dashboard ni dans « Nouveau job ».

Pipeline

Attribut Valeur
category process
pipelinable true
pipeline_passthrough true
needs [] (fonctionne sur tout type amont)
produces []
hidden_from_new_job true
hidden_from_dashboard true

filter accepte tout module amont. L'UI n'expose que les règles avancées dont le champ cible est effectivement présent dans la sortie amont — par exemple, le bloc phone_prefix n'est affiché que si un nœud amont produit un champ phone.

Endpoints

filter est un type de job interne au pipeline (voir /docs/fr/concepts/pipeline-orchestration). Il n'a pas d'endpoint public POST /api/jobs/filter : les jobs de filtrage sont créés par le runner de pipeline et configurés via la définition du pipeline.

Deux endpoints sont exposés aux utilisateurs :

Aperçu de filtre

POST /api/pipelines/{pipeline_id}/nodes/{node_id}/filter-preview

Applique un ensemble de règles au CSV du nœud amont en mémoire et renvoie le nombre de lignes qui correspondraient — sans créer de job. Utilisé par l'éditeur pour un retour en direct pendant l'édition des règles.

Requête :

{
  "rules": {
    "require_email": true,
    "phone_prefix": { "column": "telephone", "prefixes": ["06", "+33"] },
    "sample_type": "pct",
    "sample_pct": 25
  }
}

Réponse :

Champ Type Notes
total int Lignes lues depuis le CSV amont.
matched int Lignes gardées après les règles.
samples array Jusqu'à 5 lignes retenues, colonnes vides retirées.
predecessor_job_id string Job dont le CSV a été prévisualisé.
fieldnames string[] Colonnes du CSV amont.
capped bool true si la lecture a atteint la limite de lignes (voir Limites).
reason string Présent uniquement quand total = 0 : no_predecessor, no_data_yet, ou no_csv_found.

Erreurs : 404 si le pipeline ou le nœud est absent, 403 si l'appelant n'est pas propriétaire du pipeline, 400 si le nœud n'est pas de type filter, 400 si les règles sont mal formées.

Items du job de pipeline

Une fois le pipeline arrivé au nœud de filtrage, le CSV résultant est servi par les endpoints génériques de jobs :

Limites

Limites globales — voir /docs/fr/concepts/limits. Spécifiques au module :

Limite Valeur
Plafond de lignes d'aperçu 5000 lignes (_PREVIEW_ROWS_LIMIT). Quand le CSV amont dépasse, l'aperçu lit les 5000 premières lignes et positionne capped: true. Le job de filtrage complet, à l'exécution, applique les règles à chaque ligne.
Dépendance phone_prefix Nécessite le paquet phonenumbers sur le worker. S'il manque, la règle est journalisée et ignorée — les autres règles continuent de s'appliquer.

Erreurs

Code Cause
400 Le nœud référencé par l'aperçu n'est pas un nœud filter, ou rules n'est pas un objet valide.
403 Le pipeline n'appartient pas à l'appelant et l'appelant n'est pas admin.
404 Le pipeline ou le nœud n'existe pas.
500 Le CSV amont n'a pas pu être lu (fichier corrompu, absent du disque).

Un job de filtrage ne tombe en échec que si le CSV amont est illisible ; les valeurs de règles invalides sont ramenées à des no-ops plutôt que de lever une erreur.

Et après