FOCUS 1.4 est sorti le 4 juin 2026, à la conférence FinOps X. Jusqu’ici, rien d’alarmant : la spec passe en revue mineure tous les six mois environ depuis 2023. Sauf que cette fois, une colonne change de format au point de casser les requêtes qui la consomment. Si ton pipeline FinOps s’appuie sur ContractApplied, ça vaut le coup de vérifier avant de mettre à jour ton connecteur.
Ce que FOCUS ajoute avec la 1.4
FOCUS (FinOps Open Cost and Usage Specification) normalise la façon dont les fournisseurs cloud décrivent une ligne de facturation : même structure de colonnes chez AWS, Azure, GCP ou OCI, pour que tes tableaux de bord FinOps n’aient pas à gérer un mapping différent par fournisseur. Les deux précédentes versions avaient chacune résolu un problème précis : la 1.2 a normalisé l’intégration dans Azure Cost Management (on en parlait ici), la 1.3 a réglé le casse-tête de la répartition des coûts partagés entre équipes (voir cet article). La 1.4, elle, s’attaque à un problème différent : faire coller les données d’usage avec la facture réellement reçue.
Au total, le changelog liste 47 nouvelles colonnes. La plupart arrivent avec deux datasets inédits : BillingPeriod et InvoiceDetail.
InvoiceDetail et BillingPeriod : combler le trou entre usage et facture
Avant la 1.4, FOCUS décrivait bien l’usage (CostAndUsage) mais ne modélisait pas la facture elle-même — numéro de facture, date d’émission, date d’échéance, numéro de bon de commande. InvoiceDetail ajoute une vingtaine de colonnes pour ça : InvoiceId, InvoiceIssueDate, PaymentDueDate, PurchaseOrderNumber, ReferenceInvoiceId, entre autres. BillingPeriod complète avec le cycle de facturation (BillingPeriodStart, BillingPeriodEnd, BillingPeriodStatus).
Concrètement, ça permet enfin de faire le lien entre « ce que dit l’usage mesuré » et « ce qui apparaît réellement sur la facture payable » — la fameuse réconciliation facture, jusque-là bricolée à la main ou absente des exports FinOps. La colonne InvoiceId, qui était seulement recommandée en 1.3, devient d’ailleurs MUST (obligatoire) dès que l’émetteur de facture supporte les factures payables.
ContractCommitment s’enrichit pour les programmes d’engagement
Une quinzaine de colonnes s’ajoutent à ContractCommitment, dont ContractCommitmentApplicability, ContractCommitmentModel et ContractCommitmentPaymentModel. C’est la fonctionnalité Commitment Program Eligibility Details : tu peux désormais savoir si une charge est éligible à un programme de remise par engagement (Reserved Instances, Savings Plans, CUD…) sans deviner à partir du type de ressource.
Le breaking change : ContractApplied passe en objet JSON structuré
C’est le point qui mérite une vraie attention avant de migrer. La colonne ContractApplied, qui relie une charge à un ou plusieurs engagements contractuels, voit son format JSON révisé en 1.4. Le format actuel impose une clé racine Elements (un tableau), avec des champs typés strictement :
{
"Elements": [
{
"ContractId": "12345",
"ContractCommitmentId": "23456",
"ContractCommitmentAppliedCost": 500000.00
},
{
"ContractId": "12345",
"ContractCommitmentId": "34567",
"ContractCommitmentAppliedQuantity": 10000.00,
"ContractCommitmentAppliedUnit": "compute_hours"
}
]
}
ContractCommitmentAppliedCost est conditionnelle (requise si quantité et unité ne sont pas fournies), et doit être exprimée dans la devise de facturation. Les clés personnalisées restent possibles, mais doivent être préfixées x_ en PascalCase (x_MyCustomKey) — sinon un parseur strict les rejettera.
Si tes requêtes (dbt, SQL, Python) parsent cette colonne en s’attendant à l’ancienne structure, elles vont silencieusement renvoyer des valeurs vides ou lever une exception selon ton parseur JSON. Teste sur un échantillon de factures avant de basculer ton pipeline de prod, pas après.
BilledCost et EffectiveCost : des règles nettement plus strictes
Le changelog qualifie la révision d’EffectiveCost de « Heavily revised » : les règles sur les covering charges (quand un engagement couvre une charge) et les validations croisées entre lignes sont désormais détaillées, là où la 1.3 restait plus vague. BilledCost gagne lui aussi des exigences élargies — ajustements de prix, charges couvertes, entités non facturantes — et une tolérance d’écart d’arrondi est introduite spécifiquement pour la réconciliation de facture (deux systèmes qui arrondissent différemment ne doivent plus produire un écart bloquant).
Autre durcissement notable : le format des devises doit désormais respecter strictement ISO 4217:2015 (codes à trois lettres), l’exception qui tolérait les devises virtuelles (tokens, crédits propriétaires) a été retirée. Si un de tes fournisseurs facture en « crédits » plutôt qu’en devise réelle, ça ne passera plus la validation telle quelle.
Colonnes dépréciées : adieu ProviderName et PublisherName
ProviderName et PublisherName, déjà dépréciées en 1.3, sont officiellement supprimées en 1.4. Le changelog renvoie vers la section Participating Entity Identification pour choisir la colonne de remplacement adaptée à ton cas (il y en a plusieurs selon qu’il s’agit du fournisseur direct, d’un revendeur ou d’une marketplace). Si un tableau de bord chez toi filtre encore sur ProviderName, c’est le moment de migrer avant que le champ ne disparaisse purement et simplement de tes exports.
Faut-il migrer tout de suite ?
Ça dépend de où tu en es. Si tu n’as pas encore adopté FOCUS du tout, pars directement sur la 1.4 — aucune raison de passer par la 1.2 ou la 1.3 pour un déploiement neuf, la compatibilité ascendante existe pour la lecture mais pas l’inverse. Si tu es déjà sur la 1.3 avec un pipeline de réconciliation construit à la main (exports Cost Management + factures PDF parsées à côté), la 1.4 remplace une bonne partie de ce bricolage par des colonnes natives — ça vaut l’effort de migration. Si ton usage de FOCUS se limite à des dashboards de répartition de coûts sans lien avec la facturation, l’urgence est moindre : les nouvelles colonnes ne te concernent pas directement, seul le changement de ContractApplied (si tu l’utilises) demande une revue.
Côté adoption par les fournisseurs : Azure Cost Management exportait déjà en 1.2 lors de notre article d’octobre, OCI a annoncé son support FOCUS cette année également. Vérifie la version exacte supportée par export avant de brancher ton nouveau parseur — rien n’empêche qu’un export te livre encore du 1.2 ou du 1.3 pendant une période de transition.
FAQ
FOCUS 1.4 est-il rétrocompatible avec la 1.3 ?
Pour la lecture des colonnes inchangées, oui. Mais ContractApplied change de format et ProviderName/PublisherName disparaissent : un parseur strict écrit pour la 1.3 ne lira pas correctement un export 1.4 sur ces points précis.
Qu’est-ce qui remplace ProviderName et PublisherName ?
La section Participating Entity Identification de la spec propose plusieurs colonnes selon le rôle de l’entité dans la chaîne de facturation (fournisseur direct, revendeur, marketplace) — il n’y a pas un remplaçant unique, le bon choix dépend de ton modèle de facturation.
Mon fournisseur cloud supporte-t-il déjà FOCUS 1.4 ?
Ça varie. Vérifie la documentation d’export de ton fournisseur (Cost Management pour Azure, CUR pour AWS, Billing Export pour GCP) avant de supposer que tu reçois déjà du 1.4 — beaucoup de fournisseurs annoncent le support FOCUS en général sans préciser la version exacte livrée par défaut.
Et FOCUS 1.5, prévue pour quand ?
Aucune date n’est annoncée publiquement à ce stade. La FinOps Foundation évoque des pistes — prix catalogue (list pricing) des fournisseurs et suivi natif de la consommation de tokens IA — mais rien n’est figé ni daté.
Pour la suite
Si ton équipe FinOps continue de réconcilier facture et usage à coups d’exports PDF parsés à la main, FOCUS 1.4 est une bonne excuse pour arrêter. Commence par un test du nouveau format ContractApplied sur un échantillon de factures avant de toucher à ton pipeline de production, et vérifie la version FOCUS réellement exportée par ton fournisseur plutôt que de la supposer.







