Exemples pratiques
Voici une collection d'exemples concrets et réutilisables pour différents domaines métier. Copiez et adaptez-les à vos besoins.
Facturation
Calcul du total TTC d'une facture
Calcule le total TTC en sommant les lignes de produits avec leurs quantités et TVA.
let lignes = facture.lignes;
let totalHT = lignes.map(ligne => ligne.quantite * ligne.prixUnitaire).sum();
let totalTVA = lignes.map(ligne => ligne.quantite * ligne.prixUnitaire * ligne.tauxTVA / 100
).sum();
let totalTTC = totalHT + totalTVA;
"HT: ".concat(totalHT.toFixed(2), " € | ",
"TVA: ", totalTVA.toFixed(2), " € | ",
"TTC: ", totalTTC.toFixed(2), " €"
)Ventilation de TVA par taux
Affiche le détail de la TVA pour chaque taux utilisé dans la facture.
let lignes = facture.lignes;
let tauxUniques = lignes.map(ligne => ligne.tauxTVA).unique();
tauxUniques.map(tauxUnique => "TVA ".concat(tauxUnique, "% : ",
lignes.filter(ligne => ligne.tauxTVA === tauxUnique).map(ligne => ligne.quantite * ligne.prixUnitaire * ligne.tauxTVA / 100
).sum().toFixed(2
),
" €"
)
).join(" | "
)
// Résultat: "TVA 5.5% : 12.50 € | TVA 20% : 45.00 €"Statut de paiement
Affiche un statut clair selon l'état du paiement et l'échéance.
facture.payee === true
? "✅ Payée le " + facture.statusChangedAt("payée").formatDDMMYYYY()
: facture.dateEcheance < today()
? "⚠️ En retard de ".concat(today() - facture.dateEcheance,
" jours"
)
: facture.dateEcheance === today()
? "📌 Échéance aujourd'hui"
: "⏳ Échéance dans ".concat(facture.dateEcheance - today(),
" jours"
)Gestion commerciale
Calcul de remise progressive
Applique une remise selon le montant de la commande.
let montant = commande.totalHT;
let tauxRemise =
montant >= 5000 ? 15
: montant >= 2000 ? 10
: montant >= 1000 ? 7
: montant >= 500 ? 5
: 0;
let remise = montant * tauxRemise / 100;
let netHT = montant - remise;
"Montant: ".concat(facture.total.toFixed(2), " € - ",
"Remise ", tauxRemise, "%: -", remise.toFixed(2), " € = ",
"Net: ", netHT.toFixed(2), " €"
)Chiffre d'affaires client sur l'année
Calcule le CA réalisé avec un client sur l'année en cours.
let commandes = findObjects(commande, {});
let commandesClient = client.commandes.filter(commande => commande.clientId === client.id);
let commandesAnnee = commandesClient.filter(x => x.date.year() === today().year()
&& x.statut !== "annulée"
);
let caHT = commandesAnnee.map(x => x.totalHT).sum();
let nbCommandes = commandesAnnee.count();
nbCommandes.concat(" commande(s) - CA: ",
caHT.toFixed(2), " € HT"
)Alerte stock bas
Affiche une alerte si le stock est inférieur au seuil minimum.
let stock = produit.stock;
let seuilAlerte = produit.seuilAlerte.ifEmpty(10);
let seuilCritique = produit.seuilCritique.ifEmpty(5);
stock <= 0
? "🔴 Rupture de stock"
: stock <= seuilCritique
? "🟠 Stock critique: ".concat(stock, " unités")
: stock <= seuilAlerte
? "🟡 Stock bas: ".concat(stock, " unités")
: "🟢 En stock: ".concat(stock, " unités")Ressources humaines
Calcul de jours de mission
Calcule le nombre de jours ouvrés et le coût d'une mission.
let debut = mission.dateDebut;
let fin = mission.dateFin;
let tjm = consultant.tarifJournalier;
let joursOuvres = debut.businessDays(fin);
let coutHT = joursOuvres * tjm;
let coutTTC = coutHT * 1.20;
"Du ".concat(debut.formatDDMMYYYY(), " au ", fin.formatDDMMYYYY(), "\n",
joursOuvres, " jours × ", tjm, " € = ",
coutTTC.toFixed(2), " € TTC"
)Ancienneté d'un employé
Calcule et affiche l'ancienneté en années et mois.
let dateEmbauche = employe.dateEmbauche;
let joursAnciennete = dateEmbauche.daysBetweenInclusive(today());
let annees = joursAnciennete / 365;
let anneesEntieres = annees.toFixed(0).toNumber();
let moisRestants = ((annees - anneesEntieres) * 12).toFixed(0).toNumber();
anneesEntieres >= 1
? anneesEntieres.concat(" an(s) et ", moisRestants, " mois")
: moisRestants.concat(" mois")Fiche collaborateur
Génère un résumé des informations d'un collaborateur.
let nom = employe.prenom.concat(" ", employe.nom.toUpperCase());
let poste = employe.poste.ifEmpty("Non défini");
let email = employe.email.ifEmpty("N/A");
let tel = employe.telephone.ifEmpty("N/A");
let nationalite = employe.nationalite.nationality().ifError("Non renseignée"
);
"👤 ".concat(nom, "\n",
"💼 ", poste, "\n",
"📧 ", email, "\n",
"📱 ", tel, "\n",
"🌍 ", nationalite
)Suivi de projets
Avancement d'un projet
Calcule le pourcentage d'avancement basé sur les tâches terminées.
let taches = projet.taches;
let totalTaches = projet.taches.count();
let tachesTerminees = projet.taches.filter(tache => tache.statut === "terminée").count();
totalTaches === 0
? "Aucune tâche définie"
:
let pourcentage = (tachesTerminees / totalTaches) * 100;
let barre = pourcentage >= 75 ? "🟩🟩🟩"
: pourcentage >= 50 ? "🟩🟩⬜"
: pourcentage >= 25 ? "🟩⬜⬜"
: "⬜⬜⬜";
barre.concat(" ",
pourcentage.toFixed(0), "% (",
tachesTerminees, "/", totalTaches, " tâches)"
)Tâches en retard
Liste les tâches en retard avec leur nombre de jours de dépassement.
let taches = projet.taches;
let tachesEnRetard = projet.taches.filter(tache => tache.dateEcheance < today()
&& tache.statut !== "terminée"
);
tachesEnRetard.count() === 0
? "✅ Aucune tâche en retard"
:
"⚠️ ".concat(tachesEnRetard.count(), " tâche(s) en retard:\n",
tachesEnRetard.map(x => "• ".concat(x.titre, " (",
today() - x.dateEcheance, " jours)"
)
).join("\n"
)
)Budget consommé
Affiche le budget consommé par rapport au budget total.
let budgetTotal = projet.budget;
let depenses = projet.depenses.montant.sum();
let reste = budgetTotal - depenses;
let pourcentageConsomme = (depenses / budgetTotal) * 100;
let statut =
pourcentageConsomme >= 100 ? "🔴 Dépassement"
: pourcentageConsomme >= 90 ? "🟠 Attention"
: pourcentageConsomme >= 75 ? "🟡 Vigilance"
: "🟢 OK";
statut.concat(" Budget consommé à ", pourcentageConsomme.toFixed(0), "%\n",
"Dépensé: ", depenses.toFixed(2), " € / ",
budgetTotal.toFixed(2), " €\n",
"Reste: ", reste.toFixed(2), " €"
)Génération de références
Numéro de facture
Génère un numéro de facture au format FAC-AAAA-MM-NNNN.
let annee = today().year();
let mois = (today().month() + 1).padZeros(2);
let numero = facture.numeroSequentiel.padZeros(4);
"FAC-".concat(annee, "-", mois, "-", numero)
// Résultat: "FAC-2026-01-0042"Code client automatique
Génère un code client basé sur le nom et un numéro incrémental.
let prefixe = client.nom.slice(0, 3).toUpperCase();
let numero = client.id.padZeros(5);
prefixe.concat("-", numero)
// "ACME" → "ACM-00042"Référence produit intelligente
Génère une référence incluant catégorie, année et numéro séquentiel.
let categorie = produit.categorie.slice(0, 2).toUpperCase();
let annee = today().year().concat().slice(2, 4);
let numero = produit.numeroSequentiel.padZeros(4);
categorie.concat(annee, "-", numero)
// Catégorie "Électronique", 2026, n°42 → "EL26-0042"Prochaine étape
Terminez votre apprentissage avec les bonnes pratiques pour écrire des formules performantes et maintenables.