Passer au contenu principal
La détection décide quelle spécification s’applique à un fichier entrant. C’est un match_mode plus une liste de rules.
"detection": {
  "match_mode": "composite",
  "rules": [
    { "type": "data_source", "codes": ["pos_polaris"] },
    { "type": "filename_matches", "pattern": "(?i)\\.sav$" }
  ]
}

Modes de correspondance

ModeLogique
anyAu moins une règle correspond (OR).
allChaque règle correspond (AND).
compositeCombinaison personnalisée (typiquement une porte data-source ET un test nom de fichier/en-tête).

Types de règles

TypeChampSignification
data_sourcecodes (string[])Restreindre la spécification aux fichiers provenant de systèmes sources spécifiques.
filenamepattern (string)Correspondance exacte du nom de fichier.
filename_matchespattern (regex)Le nom de fichier correspond à une expression régulière (ex. "(?i)tickets"(?i) = insensible à la casse).
columnscolumns (string[])Les colonnes du fichier doivent correspondre exactement à cette liste.
header_containscolumns (string[])La ligne d’en-tête doit contenir toutes ces colonnes (sous-ensemble, ordre indépendant).
sheet_namepattern (string)Un nom de feuille Excel correspond exactement.

Codes data_source

Le tableau codes utilise les identifiants de source de données canoniques, incluant :
pos_polaris, pos_ginkoia, pos_fastmag, pos_kezia, pos_lcv, pos_cegid,
pos_openbravo, pos_oracle, pos_sage, ecommerce_api, erp_sap, user_uploads
Ces codes sont validés lors du seeding des spécifications — un code inconnu échoue rapidement.

Un exemple composite

"detection": {
  "match_mode": "composite",
  "rules": [
    { "type": "data_source", "codes": ["pos_ginkoia", "user_uploads"] },
    { "type": "filename_matches", "pattern": "(?i)tickets" },
    { "type": "header_contains", "columns": ["Numéro", "Séquence", "Montant", "Mode paiement"] }
  ]
}
Se lit comme : le fichier provient de Ginkoia (ou d’un upload manuel) et son nom contient « tickets » et son en-tête a les quatre colonnes.
Quand plusieurs spécifications pourraient correspondre, le gagnant est choisi par priority puis spec_version — voir Anatomie → priorité.