{
  "schemaVersion": 1,
  "slug": "marches-publics-travaux-2025",
  "title": "Rétrospective Semagora des marchés publics de travaux — 2025",
  "generatedAt": "2026-07-14T16:10:00.000Z",
  "methodology": {
    "version": "v1.2",
    "periodLabel": "2025",
    "periodStartInclusive": "2025-01-01T00:00:00.000Z",
    "periodEndExclusive": "2026-01-01T00:00:00.000Z",
    "timezone": "UTC",
    "cpvPrefix": "45",
    "cpvDefinition": "Caractères non numériques retirés, huit premiers chiffres, préfixe 45.",
    "boampIdentity": "source BOAMP + externalId, avis initiaux uniquement.",
    "decpIdentity": "COALESCE(NULLIF(uid, ''), externalId), version isCurrent = true.",
    "amountRule": "Montants strictement positifs ; médiane, Q1, Q3 et échantillon publiables. P99 et maximum réservés au contrôle interne.",
    "smeShareRule": "Paires distinctes marché × titulaire ; PME / (PME + ETI + GE).",
    "geographyRule": "Lieu d'exécution uniquement ; aucun fallback vers l'acheteur ou le titulaire.",
    "boampSource": "official-api"
  },
  "sources": [
    {
      "key": "BOAMP",
      "label": "Bulletin officiel des annonces des marchés publics — DILA",
      "role": "Consultations publiées",
      "licence": "Licence Ouverte 2.0",
      "url": "https://www.data.gouv.fr/dataservices/api-bulletin-officiel-des-annonces-des-marches-publics-boamp"
    },
    {
      "key": "DECP",
      "label": "Données essentielles de la commande publique — DAJ",
      "role": "Marchés attribués",
      "licence": "Licence Ouverte 2.0",
      "url": "https://www.data.economie.gouv.fr/explore/dataset/decp-2022-marches-valides/"
    }
  ],
  "boamp": {
    "noticeCount": 22343,
    "allQuarterNoticeCount": 89385,
    "broadBusinessSiloNoticeCount": 24868,
    "monthly": [
      {
        "month": "2025-01-01",
        "count": 1791,
        "responseWindowSampleSize": 1761,
        "medianResponseDays": 31.5
      },
      {
        "month": "2025-02-01",
        "count": 2020,
        "responseWindowSampleSize": 1973,
        "medianResponseDays": 29.5
      },
      {
        "month": "2025-03-01",
        "count": 2317,
        "responseWindowSampleSize": 2283,
        "medianResponseDays": 30.4
      },
      {
        "month": "2025-04-01",
        "count": 2518,
        "responseWindowSampleSize": 2497,
        "medianResponseDays": 32.4
      },
      {
        "month": "2025-05-01",
        "count": 1890,
        "responseWindowSampleSize": 1865,
        "medianResponseDays": 31.4
      },
      {
        "month": "2025-06-01",
        "count": 1937,
        "responseWindowSampleSize": 1903,
        "medianResponseDays": 30.4
      },
      {
        "month": "2025-07-01",
        "count": 2135,
        "responseWindowSampleSize": 2072,
        "medianResponseDays": 44.6
      },
      {
        "month": "2025-08-01",
        "count": 1134,
        "responseWindowSampleSize": 1112,
        "medianResponseDays": 35.5
      },
      {
        "month": "2025-09-01",
        "count": 1613,
        "responseWindowSampleSize": 1576,
        "medianResponseDays": 30.6
      },
      {
        "month": "2025-10-01",
        "count": 1889,
        "responseWindowSampleSize": 1855,
        "medianResponseDays": 30.6
      },
      {
        "month": "2025-11-01",
        "count": 1473,
        "responseWindowSampleSize": 1442,
        "medianResponseDays": 30.5
      },
      {
        "month": "2025-12-01",
        "count": 1626,
        "responseWindowSampleSize": 1592,
        "medianResponseDays": 38.5
      }
    ],
    "topCpv4": [
      {
        "code": "4526",
        "count": 6194
      },
      {
        "code": "4511",
        "count": 6178
      },
      {
        "code": "4523",
        "count": 5978
      },
      {
        "code": "4531",
        "count": 5460
      },
      {
        "code": "4542",
        "count": 5003
      },
      {
        "code": "4533",
        "count": 4393
      },
      {
        "code": "4522",
        "count": 3698
      },
      {
        "code": "4521",
        "count": 3170
      },
      {
        "code": "4544",
        "count": 2954
      },
      {
        "code": "4543",
        "count": 2942
      },
      {
        "code": "4500",
        "count": 2013
      },
      {
        "code": "4541",
        "count": 1499
      },
      {
        "code": "4545",
        "count": 1417
      },
      {
        "code": "4532",
        "count": 868
      },
      {
        "code": "4534",
        "count": 592
      },
      {
        "code": "4524",
        "count": 480
      },
      {
        "code": "4525",
        "count": 468
      },
      {
        "code": "4520",
        "count": 422
      },
      {
        "code": "4530",
        "count": 285
      },
      {
        "code": "4510",
        "count": 167
      }
    ],
    "topBuyers": {
      "publishable": false,
      "minimumCoveragePercent": 90,
      "sampleSize": 0,
      "coveragePercent": 0
    },
    "regions": [],
    "quality": {
      "distinctExternalIdCount": 22343,
      "missingPublicationDateCount": 0,
      "firstPublicationDate": "2025-01-01",
      "lastPublicationDate": "2025-12-31",
      "deadlineCount": 22322,
      "validResponseWindowCount": 21931,
      "canonicalBuyerCount": 0,
      "executionRegionCount": 14737,
      "canonicalBuyerCoveragePercent": 0,
      "executionRegionCoveragePercent": 65.96
    }
  },
  "decp": {
    "contractCount": 110988,
    "monthly": [
      {
        "month": "2025-01-01",
        "count": 8525
      },
      {
        "month": "2025-02-01",
        "count": 6662
      },
      {
        "month": "2025-03-01",
        "count": 7753
      },
      {
        "month": "2025-04-01",
        "count": 8892
      },
      {
        "month": "2025-05-01",
        "count": 8392
      },
      {
        "month": "2025-06-01",
        "count": 10298
      },
      {
        "month": "2025-07-01",
        "count": 11679
      },
      {
        "month": "2025-08-01",
        "count": 6079
      },
      {
        "month": "2025-09-01",
        "count": 9080
      },
      {
        "month": "2025-10-01",
        "count": 11144
      },
      {
        "month": "2025-11-01",
        "count": 9689
      },
      {
        "month": "2025-12-01",
        "count": 12795
      }
    ],
    "amounts": {
      "sampleSize": 104299,
      "q1": 59795.81,
      "median": 132000,
      "q3": 359855.87
    },
    "sme": {
      "sharePercent": 67.73,
      "pmePairCount": 85978,
      "categorizedPairCount": 126935,
      "missingCategoryPairCount": 3155,
      "categories": [
        {
          "category": "PME",
          "count": 85978
        },
        {
          "category": "GE",
          "count": 21784
        },
        {
          "category": "ETI",
          "count": 19173
        },
        {
          "category": "MISSING",
          "count": 3155
        }
      ]
    },
    "topCpv4": [
      {
        "code": "4523",
        "count": 16515
      },
      {
        "code": "4526",
        "count": 13415
      },
      {
        "code": "4521",
        "count": 12700
      },
      {
        "code": "4511",
        "count": 12147
      },
      {
        "code": "4500",
        "count": 10644
      },
      {
        "code": "4542",
        "count": 8942
      },
      {
        "code": "4531",
        "count": 7148
      },
      {
        "code": "4533",
        "count": 5477
      },
      {
        "code": "4545",
        "count": 5173
      },
      {
        "code": "4522",
        "count": 4965
      },
      {
        "code": "4544",
        "count": 3162
      },
      {
        "code": "4543",
        "count": 2852
      },
      {
        "code": "4532",
        "count": 1501
      },
      {
        "code": "4541",
        "count": 1403
      },
      {
        "code": "4520",
        "count": 994
      },
      {
        "code": "4525",
        "count": 956
      },
      {
        "code": "4524",
        "count": 929
      },
      {
        "code": "4534",
        "count": 761
      },
      {
        "code": "4530",
        "count": 472
      },
      {
        "code": "4540",
        "count": 344
      }
    ],
    "topBuyers": [
      {
        "code": "27850001200184",
        "label": "OFFICE PUBLIC DE L HABITAT DE VENDEE",
        "count": 577
      },
      {
        "code": "26870851800017",
        "label": "CENTRE HOSPITALIER ET UNIVERSITAIRE DE LIMOGES (CHU DUPUYTREN LIMOGES)",
        "count": 504
      },
      {
        "code": "20005226400013",
        "label": "REGION GRAND EST",
        "count": 476
      },
      {
        "code": "27400001700013",
        "label": "OFFICE PUBLIC DE L HABITAT DU DEPARTEMENT DES LANDES (OPDHLM 40)",
        "count": 398
      },
      {
        "code": "21750001600019",
        "label": "VILLE DE PARIS (MAIRIE)",
        "count": 395
      },
      {
        "code": "20009433200018",
        "label": "COLLECTIVITE EUROPEENNE D'ALSACE",
        "count": 381
      },
      {
        "code": "68020136500029",
        "label": "SOC H L M UN TOIT POUR TOUS",
        "count": 360
      },
      {
        "code": "27560004700011",
        "label": "OFFICE PUBLIC DE L'HABITAT DU MORBIHAN (MORBIHAN HABITAT)",
        "count": 359
      },
      {
        "code": "20007695800012",
        "label": "COLLECTIVITE DE CORSE",
        "count": 320
      },
      {
        "code": "54585028100035",
        "label": "VENDEE LOGEMENT ESH",
        "count": 298
      },
      {
        "code": "75920075100130",
        "label": "SEM DE CONSTRUCTION DU DPT DE L AIN (SOCIETE D'ECONOMIE MIXTE DU DEPARTEMENT DE L'AIN)",
        "count": 295
      },
      {
        "code": "39989834500018",
        "label": "GRANDLYON HABITAT - OFFICE PUBLIC DE L'HABITAT",
        "count": 291
      },
      {
        "code": "22590001801244",
        "label": "DEPARTEMENT DU NORD",
        "count": 289
      },
      {
        "code": "22010001000010",
        "label": "DEPARTEMENT DE L AIN",
        "count": 280
      },
      {
        "code": "20005480700017",
        "label": "METROPOLE D'AIX-MARSEILLE-PROVENCE",
        "count": 276
      },
      {
        "code": "89214108600017",
        "label": "ESTORIA, SOCIETE DE COORDINATION",
        "count": 272
      },
      {
        "code": "44552039800030",
        "label": "AVESNOISE PROMOCIL, SOCIETE ANONYME D'HABITATIONS A LOYER MODERE",
        "count": 266
      },
      {
        "code": "45220075100025",
        "label": "OPH RENNES METROPOLE ARCHIPEL HABITAT",
        "count": 262
      },
      {
        "code": "21440109300015",
        "label": "COMMUNE DE NANTES (MAIRIE)",
        "count": 257
      },
      {
        "code": "21690123100011",
        "label": "COMMUNE DE LYON (MAIRIE)",
        "count": 249
      }
    ],
    "regions": [
      {
        "code": "84",
        "label": "Auvergne-Rhône-Alpes",
        "count": 16373
      },
      {
        "code": "75",
        "label": "Nouvelle-Aquitaine",
        "count": 11525
      },
      {
        "code": "76",
        "label": "Occitanie",
        "count": 11303
      },
      {
        "code": "44",
        "label": "Grand Est",
        "count": 9923
      },
      {
        "code": "52",
        "label": "Pays de la Loire",
        "count": 8659
      },
      {
        "code": "11",
        "label": "Île-de-France",
        "count": 8537
      },
      {
        "code": "53",
        "label": "Bretagne",
        "count": 8486
      },
      {
        "code": "32",
        "label": "Hauts-de-France",
        "count": 7306
      },
      {
        "code": "93",
        "label": "Provence-Alpes-Côte d'Azur",
        "count": 6755
      },
      {
        "code": "27",
        "label": "Bourgogne-Franche-Comté",
        "count": 5697
      },
      {
        "code": "28",
        "label": "Normandie",
        "count": 4674
      },
      {
        "code": "24",
        "label": "Centre-Val de Loire",
        "count": 3945
      },
      {
        "code": "04",
        "label": "La Réunion",
        "count": 1331
      },
      {
        "code": "06",
        "label": "Mayotte",
        "count": 609
      },
      {
        "code": "01",
        "label": "Guadeloupe",
        "count": 541
      },
      {
        "code": "02",
        "label": "Martinique",
        "count": 462
      },
      {
        "code": "03",
        "label": "Guyane",
        "count": 453
      },
      {
        "code": "94",
        "label": "Corse",
        "count": 91
      }
    ],
    "procedures": [
      {
        "code": "Procédure adaptée",
        "label": "Procédure adaptée",
        "count": 85884
      },
      {
        "code": "Appel d'offres ouvert",
        "label": "Appel d'offres ouvert",
        "count": 18968
      },
      {
        "code": "Marché passé sans publicité ni mise en concurrence préalable",
        "label": "Marché passé sans publicité ni mise en concurrence préalable",
        "count": 3226
      },
      {
        "code": "Procédure avec négociation",
        "label": "Procédure avec négociation",
        "count": 1832
      },
      {
        "code": "Appel d'offres restreint",
        "label": "Appel d'offres restreint",
        "count": 566
      },
      {
        "code": "Dialogue compétitif",
        "label": "Dialogue compétitif",
        "count": 94
      },
      {
        "code": "Marché négocié sans publicité ni mise en concurrence préalable",
        "label": "Marché négocié sans publicité ni mise en concurrence préalable",
        "count": 18
      },
      {
        "code": "Appel d’offres ouvert",
        "label": "Appel d’offres ouvert",
        "count": 9
      },
      {
        "code": "Appel d’offres restreint",
        "label": "Appel d’offres restreint",
        "count": 1
      }
    ],
    "quality": {
      "preCurrentRowCount": 110988,
      "rejectedNonCurrentRowCount": 0,
      "distinctContractKeyCount": 110988,
      "uidFallbackCount": 0,
      "positiveAmountCount": 104299,
      "missingAmountCount": 5477,
      "nonPositiveAmountCount": 1212,
      "buyerIdCount": 110988,
      "procedureCount": 110598,
      "executionLocationCount": 110978,
      "executionRegionCount": 106670,
      "contractSupplierPairCount": 130090,
      "amountCoveragePercent": 93.97,
      "buyerIdCoveragePercent": 100,
      "procedureCoveragePercent": 99.65,
      "executionRegionCoveragePercent": 96.11,
      "supplierCategoryCoveragePercent": 97.57
    }
  },
  "quality": {
    "readyForEditorial": true,
    "checks": [
      {
        "key": "boamp_minimum_sample",
        "label": "Échantillon BOAMP suffisant",
        "status": "PASS",
        "actual": 22343,
        "threshold": ">= 20"
      },
      {
        "key": "boamp_unique_external_ids",
        "label": "Identifiants BOAMP uniques",
        "status": "PASS",
        "actual": 22343,
        "threshold": "= 22343"
      },
      {
        "key": "boamp_publication_dates",
        "label": "Dates de publication BOAMP complètes",
        "status": "PASS",
        "actual": 0,
        "threshold": "= 0"
      },
      {
        "key": "boamp_response_window_coverage",
        "label": "Fenêtres de réponse BOAMP exploitables",
        "status": "PASS",
        "actual": 98.16,
        "threshold": ">= 95 %"
      },
      {
        "key": "boamp_execution_region_coverage",
        "label": "Région d'exécution BOAMP exploitable",
        "status": "WARN",
        "actual": 65.96,
        "threshold": ">= 90 % pour publier le classement ; >= 60 % avec masquage"
      },
      {
        "key": "decp_minimum_sample",
        "label": "Échantillon DECP suffisant",
        "status": "PASS",
        "actual": 110988,
        "threshold": ">= 20"
      },
      {
        "key": "decp_unique_contracts",
        "label": "Identités marché DECP uniques",
        "status": "PASS",
        "actual": 110988,
        "threshold": "= 110988"
      },
      {
        "key": "decp_amount_coverage",
        "label": "Montants DECP positifs exploitables",
        "status": "WARN",
        "actual": 93.97,
        "threshold": ">= 95 % ; >= 90 % avec avertissement"
      },
      {
        "key": "decp_buyer_coverage",
        "label": "Identifiants acheteur DECP complets",
        "status": "PASS",
        "actual": 100,
        "threshold": ">= 99 %"
      },
      {
        "key": "decp_procedure_coverage",
        "label": "Procédures DECP exploitables",
        "status": "PASS",
        "actual": 99.65,
        "threshold": ">= 95 %"
      },
      {
        "key": "decp_execution_region_coverage",
        "label": "Région d'exécution DECP exploitable",
        "status": "PASS",
        "actual": 96.11,
        "threshold": ">= 90 %"
      },
      {
        "key": "decp_supplier_category_coverage",
        "label": "Catégories de titulaires exploitables",
        "status": "PASS",
        "actual": 97.57,
        "threshold": ">= 90 %"
      }
    ]
  },
  "contentHash": "c8630e9ac9bea4e7fe0e53a44af6ac37b4654700a0e54814e6a547a8add99847",
  "openData": {
    "schemaVersion": "1.0",
    "license": "Licence Ouverte 2.0",
    "canonicalUrl": "https://semagora.com/barometres/marches-publics-travaux-2025",
    "generatedFromSnapshotHash": "c8630e9ac9bea4e7fe0e53a44af6ac37b4654700a0e54814e6a547a8add99847",
    "publicExclusions": [
      "decp.amounts.internalControlOnly",
      "boamp.topBuyers.internalCandidates",
      "boamp.regions (couverture du lieu d'exécution inférieure à 90 %)"
    ],
    "note": "Export agrégé. Les corpus BOAMP et DECP sont distincts et ne s'additionnent pas."
  }
}
