• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

inclusion-numerique / coop-mediation-numerique / 74e35acb-e4c6-4098-a97f-8cd715f822e9
10%
main: 13%

Build:
Build:
LAST BUILD BRANCH: dev
DEFAULT BRANCH: main
Ran 19 May 2026 04:47PM UTC
Jobs 1
Files 1436
Run time 3min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

19 May 2026 04:44PM UTC coverage: 9.989% (+3.0%) from 7.008%
74e35acb-e4c6-4098-a97f-8cd715f822e9

Pull #497

circleci

marc-gavanier
feat: improve structure fusion scoring and review export

Significantly reduces the manual review burden by detecting more
true duplicates automatically and avoiding false positives.

Scoring improvements (detect-duplicate-structures, generate-structures-action-plan):
- Treat clusters of type 'mixte' like 'doublon_certain' with per-pair
  scoring (instead of bulk verification_manuelle), uncovering hundreds
  of auto/probable fusions previously hidden in mixed clusters.
- Boost address score to 1.0 when one normalized address is contained
  in the other (e.g. "Lupino" vs "LUPINO PARVIS NOTRE DAME VICTOIRE").
- Add address abbreviations: VC (voie communale), RT (route), ZA, ZI, CH.
- Redistribute geo weight when coords are unavailable, OR when address
  strongly indicates the same place (>=0.85): prevents penalizing
  structures with missing or erroneous coords.
- Normalize "commune de/du", "mairie de/du", "ville de/du" to a single
  "ville" canonical token so variants match.
- Detect "service keywords" (EPN, médiathèque, CCAS, France services,
  MJC, etc.): when one name has such a keyword and the other does not,
  they are distinct entities even with shared SIRET/address. Disables
  the address-contained heuristic and keeps geo in the score.

Sync resilience (findOrCreateStructure):
- After strict siret+codeInsee miss, fall back to siret-only with
  normalized contained-name match. This catches Dataspace structures
  whose codeInsee diverges from the coop's, without merging an EPN
  with its parent town hall (asymmetric-service-keyword guard).

Review output:
- generate-structures-action-plan: structures-fusion-review.csv now
  uses cluster-grouped format (CIBLE + sources + empty line between
  clusters, sorted by ascending score), matching the existing format
  Tim uses for his manual reviews.
- export-duplicate-sirets: cluster-grouped CSV (empty line between
  SIRETs) and exclude empty-string siret. Enrich each row with
  nom_api, adresse_api, corre... (continued)
Pull Request #497: feat: improve structure fusion scoring and review export

688 of 10878 branches covered (6.32%)

Branch coverage included in aggregate %.

26 of 150 new or added lines in 4 files covered. (17.33%)

911 existing lines in 95 files now uncovered.

2111 of 17142 relevant lines covered (12.31%)

1.95 hits per line

Uncovered Changes

Lines Coverage ∆ File
50
0.0
0.0% apps/web/src/jobs/export-duplicate-sirets/executeExportDuplicateSirets.ts
47
0.0
0.0% apps/web/src/jobs/generate-structures-action-plan/executeGenerateStructuresActionPlan.ts
27
0.0
0.0% apps/web/src/jobs/detect-duplicate-structures/executeDetectDuplicateStructures.ts

Coverage Regressions

Lines Coverage ∆ File
101
0.0
-98.21% apps/web/src/worksheet/statistiques/buildStatistiquesWorksheet.ts
78
0.0
-81.68% apps/web/src/beneficiaire/import/analyseImportBeneficiairesExcel.ts
55
0.0
-96.92% apps/web/src/features/lieux-activite/use-cases/ajouter/implementations/inMemory.ts
44
0.0
-98.85% apps/web/src/features/utilisateurs/use-cases/filter/filterUtilisateur.ts
39
0.0
-72.64% apps/web/src/features/activites/use-cases/list/components/generateActivitesFiltersLabels.ts
36
0.0
-85.19% apps/web/src/utils/getDatePeriodBounds.ts
31
0.0
-90.91% apps/web/src/opening-hours/openingHoursToOsm.ts
30
0.0
-100.0% apps/web/src/communes/communesClient.ts
22
0.0
-85.37% apps/web/src/app/api/v1/serializeApiRequestParams.ts
22
0.0
-100.0% apps/web/src/features/utilisateurs/use-cases/list/statut-compte.ts
20
0.0
-40.68% apps/web/src/features/activites/use-cases/list/export/buildAccompagnementsWorksheet.ts
19
0.0
-91.3% apps/web/src/utils/encodeSerializableState.ts
16
0.0
-100.0% apps/web/src/external-apis/ban/lambertToLatitudeAndLongitude.ts
16
0.0
-65.0% apps/web/src/features/utilisateurs/use-cases/filter/generateUtilisateursFiltersLabels.ts
14
0.0
-77.42% apps/web/src/libs/worksheet/autosizeColumns.ts
13
0.0
-82.61% apps/web/src/beneficiaire/createParticipantsAnonymesForBeneficiaires.ts
12
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/ajouterLieuxActivite.ts
12
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/classifyLieu.ts
12
5.56
-94.44% apps/web/src/features/structures/siret/checkLuhnIntegrity.ts
12
0.0
-68.42% apps/web/src/libs/injection/container.ts
11
0.0
-100.0% apps/web/src/features/rdvsp/sync/syncLog.ts
11
0.0
-95.0% apps/web/src/utils/toTitleCase.ts
11
0.0
-77.94% apps/web/src/worksheet/buildWorksheetHelpers.ts
10
0.0
-100.0% apps/web/src/utils/changeObjectKeysCaseRecursive.ts
10
0.0
-92.31% apps/web/src/utils/dateAsDayAndTime.ts
10
0.0
-100.0% apps/web/src/utils/removeUndefinedValues.ts
9
0.0
-80.0% apps/web/src/features/activites/use-cases/cra/collectif/validation/ParticipantsAnonymesCraCollectifValidation.ts
9
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/isNewLieu.ts
9
0.0
-88.89% apps/web/src/utils/getZodValidationMutationError.ts
8
0.0
-100.0% apps/web/src/mediateurs/emailComparison.ts
7
0.0
-80.0% apps/web/src/features/activites/use-cases/cra/collectif/fields/niveau-atelier.ts
7
0.0
-100.0% apps/web/src/features/activites/use-cases/cra/components/clearAdministrativeData.ts
7
53.13
-37.5% apps/web/src/features/activites/use-cases/cra/db/minutesToCraDuree.ts
7
0.0
-80.0% apps/web/src/features/activites/use-cases/cra/individuel/fields/autonomie.ts
7
0.0
-100.0% apps/web/src/libs/worksheet/addFilters.ts
7
0.0
-80.0% apps/web/src/libs/worksheet/addTitleRow.ts
6
0.0
-30.77% apps/web/src/app/api/v1/CursorPagination.ts
6
0.0
-100.0% apps/web/src/features/structures/use-cases/merge/mappers/findMergeCommonFields.ts
6
0.0
-88.89% apps/web/src/staticDirectory.ts
5
0.0
-77.78% apps/web/src/beneficiaire/import/getBeneficiaireImportSheet.ts
5
0.0
-76.92% apps/web/src/features/beneficiaires/validation/BeneficiaireValidation.ts
5
0.0
-80.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/processClassifiedLieu/createFromCarto.ts
5
0.0
-75.0% apps/web/src/features/utilisateurs/use-cases/list/role.ts
5
0.0
-85.71% apps/web/src/features/utilisateurs/use-cases/list/statut.ts
5
0.0
-100.0% apps/web/src/utils/formDataToObject.ts
4
33.33
-60.0% apps/web/src/app/api/v1/transformJsonApiQueryParamsToObject.ts
4
91.11
91.11% apps/web/src/external-apis/dataspace/dataspaceApiClientMockData.ts
4
13.41
-28.05% apps/web/src/features/activites/use-cases/cra/collectif/validation/participantsAnonymes.ts
4
0.0
-83.33% apps/web/src/features/activites/use-cases/cra/individuel/fields/structures-redirection.ts
4
0.0
-100.0% apps/web/src/features/activites/use-cases/cra/validation/canHaveAdministrationThematiques.ts
4
0.0
-100.0% apps/web/src/features/activites/use-cases/cra/validation/CraDureeValidation.ts
4
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/processClassifiedLieu/index.ts
4
76.47
76.47% apps/web/src/features/structures/modaliteAccompagnement.ts
4
0.0
-75.0% apps/web/src/features/utilisateurs/use-cases/filter/db/nouveau-filter.ts
4
0.0
-84.62% apps/web/src/libs/worksheet/addExportMetadata.ts
4
0.0
-9.52% apps/web/src/opening-hours/stringToOpeningHours.ts
4
0.0
-71.43% apps/web/src/rdv-service-public/rdvStatus.ts
4
0.0
-60.0% apps/web/src/utils/getUserRoleLabel.ts
4
0.0
-100.0% apps/web/src/utils/telephoneValidation.ts
3
84.78
28.26% apps/web/src/app/coop/(sidemenu-layout)/mes-statistiques/_queries/createEnumCountSelect.ts
3
0.0
-87.5% apps/web/src/features/activites/use-cases/cra/validation/canHavePrecisionDemarche.ts
3
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/processClassifiedLieu/createFromData.ts
3
0.0
0.0% apps/web/src/jobs/generate-structures-action-plan/executeGenerateStructuresActionPlan.ts
3
0.0
-100.0% apps/web/src/utils/removeNullAndUndefinedValues.ts
2
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/cartoStructure.ts
2
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/lieuActivite.ts
2
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/processClassifiedLieu/linkExisting.ts
2
0.0
-100.0% apps/web/src/features/lieux-activite/use-cases/ajouter/domain/structure.ts
2
66.67
66.67% apps/web/src/features/structures/dispositifProgrammesNationaux.ts
2
77.78
77.78% apps/web/src/features/structures/formationLabel.ts
2
80.0
80.0% apps/web/src/features/structures/fraisACharge.ts
2
77.78
77.78% apps/web/src/features/structures/priseEnChargeSpecifique.ts
2
77.78
77.78% apps/web/src/features/structures/publicSpecifiquementAdresse.ts
2
0.0
-100.0% apps/web/src/features/utilisateurs/use-cases/filter/db/actif-filter.ts
2
0.0
-66.67% apps/web/src/features/utilisateurs/use-cases/filter/db/inscription-filter.ts
2
0.0
0.0% apps/web/src/jobs/export-duplicate-sirets/executeExportDuplicateSirets.ts
2
0.0
-37.5% apps/web/src/libs/worksheet/setWorkbookMetadata.ts
2
0.0
-100.0% apps/web/src/opening-hours/openingHours.ts
2
0.0
-54.55% apps/web/src/server/createSignedUrl.ts
2
75.0
-25.0% apps/web/src/utils/dateAsDay.ts
2
0.0
-100.0% apps/web/src/utils/dateAsMonth.ts
1
63.33
63.33% apps/web/src/app/api/v1/createApiV1Route.ts
1
0.0
-100.0% apps/web/src/external-apis/ban/AdresseBanValidation.ts
1
77.14
77.14% apps/web/src/external-apis/dataspace/dataspaceApiClientMock.ts
1
89.83
89.83% apps/web/src/features/activites/use-cases/cra/db/createOrUpdateActivite.ts
1
82.35
0.0% apps/web/src/features/activites/use-cases/cra/fields/type-activite.ts
1
80.0
80.0% apps/web/src/features/activites/use-cases/source/activiteSource.ts
1
80.0
80.0% apps/web/src/features/structures/itinerance.ts
1
80.0
80.0% apps/web/src/features/structures/modalitesAcces.ts
1
58.33
-41.67% apps/web/src/features/structures/siret/siretValidation.ts
1
0.0
0.0% apps/web/src/jobs/detect-duplicate-structures/executeDetectDuplicateStructures.ts
1
0.0
-100.0% apps/web/src/server/s3/s3.ts
1
33.33
-11.11% apps/web/src/utils/formatNumber.ts
1
0.0
-100.0% apps/web/src/utils/htmlToText.ts
1
0.0
-100.0% apps/web/src/utils/unionArrays.ts
Jobs
ID Job ID Ran Files Coverage
1 74e35acb-e4c6-4098-a97f-8cd715f822e9.1 19 May 2026 04:47PM UTC 1436
9.99
Source Files on build 74e35acb-e4c6-4098-a97f-8cd715f822e9
  • Tree
  • List 1436
  • Changed 216
  • Source Changed 4
  • Coverage Changed 216
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #74E35ACB...
  • Pull Request #497
  • PR Base - dev (#7DB8D5F6...)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc