// n8n Code node — mode « Run Once for All Items ». // Simulation du routage, pas de copie physique de fichiers. const seen = new Set(); const allowed = new Set(['ALPHA', 'BETA', 'GAMMA']); return $input.all().map(item => { const d = item.json; const name = String(d.NomFichier || ''); const client = String(d.Client || '').trim().toUpperCase(); const date = String(d.Date || ''); let statut = 'OK'; // Vérifier le format ET la réalité de la date. const validDate = /^\d{4}-\d{2}-\d{2}$/.test(date) && !Number.isNaN(Date.parse(date + 'T12:00:00Z')) && new Date(date+'T12:00:00Z').toISOString().slice(0,10) === date; if (!/\.pdf$/i.test(name)) statut = 'REJET_FORMAT'; else if (!allowed.has(client)) statut = 'REJET_CLIENT'; else if (!validDate) statut = 'REJET_DATE'; else if (seen.has(client+'|'+name.toLowerCase())) statut = 'REJET_DOUBLON'; if (statut === 'OK') seen.add(client+'|'+name.toLowerCase()); const destination = statut === 'OK' ? `/Documents/${client}/${date.slice(0,4)}/${date.slice(5,7)}/${name}` : '/A_CONTROLER/'; return {json:{...d,statut,destination}}; });