Skip to content

Commit

Permalink
fix numberEmployeesRange for AnnuaireDesEntreprisesSiretGateway
Browse files Browse the repository at this point in the history
  • Loading branch information
bbohec committed Jan 31, 2025
1 parent c1e1b0e commit d1779b1
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ describe("AnnuaireDesEntreprisesSiretGateway", () => {
code: "9103Z",
nomenclature: "NAFRev2",
},
numberEmployeesRange: "50-99",
numberEmployeesRange: "2000-4999",
siret: "18004623700012",
});
});
Expand Down Expand Up @@ -156,15 +156,15 @@ describe("AnnuaireDesEntreprisesSiretGateway", () => {
expect(establishment?.businessName).toBe(
"MUTUELLE ASSURANCE INSTITUTEUR FRANCE (MAIF)",
);
expect(establishment).toEqual({
expectToEqual(establishment, {
businessAddress: "200 AVENUE SALVADOR ALLENDE 79000 NIORT",
businessName: "MUTUELLE ASSURANCE INSTITUTEUR FRANCE (MAIF)",
isOpen: true,
nafDto: {
code: "6512Z",
nomenclature: "NAFRev2",
},
numberEmployeesRange: "50-99",
numberEmployeesRange: "5000-9999",
siret: "77570970201646",
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import Bottleneck from "bottleneck";
import { SiretDto, SiretEstablishmentDto } from "shared";
import { HttpClient } from "shared-routes";
import { SiretGateway } from "../ports/SirenGateway";
import { SiretGateway } from "../ports/SiretGateway";
import {
AnnuaireDesEntreprisesSiretEstablishment,
type AnnuaireDesEntreprisesSiretRoutes,
} from "./AnnuaireDesEntreprisesSiretGateway.routes";
import { getNumberEmployeesRangeByTefenCode } from "./SiretGateway.common";

const adeMaxQueryPerSeconds = 7;
export const nonDiffusibleEstablishmentName = "NON-DIFFUSIBLE";
Expand Down Expand Up @@ -92,53 +93,9 @@ export const convertAdeEstablishmentToSirenEstablishmentDto = (
).replace(".", ""),
nomenclature: "NAFRev2",
},
numberEmployeesRange: getNumberEmployeesRange(
adeEstablishment.tranche_effectif_salarie
? parseInt(adeEstablishment.tranche_effectif_salarie)
: null,
numberEmployeesRange: getNumberEmployeesRangeByTefenCode(
adeEstablishment.tranche_effectif_salarie ?? undefined,
),
isOpen:
adeEstablishment.matching_etablissements[0].etat_administratif === "A",
});

const numberEmployeesRanges = [
"",
"0",
"1-2",
"3-5",
"6-9",
"10-19",
"20-49",
"50-99",
"100-199",
"200-249",
"250-499",
"500-999",
"1000-1999",
"2000-4999",
"5000-9999",
"+10000",
] as const;
type NumberEmployeesRange = (typeof numberEmployeesRanges)[number];

const getNumberEmployeesRange = (
numberEmployees: number | null,
): NumberEmployeesRange => {
if (numberEmployees === null) return "";
if (numberEmployees === 0) return "0";
if (numberEmployees === 1 || numberEmployees === 2) return "1-2";
if (numberEmployees >= 3 && numberEmployees <= 5) return "3-5";
if (numberEmployees >= 6 && numberEmployees <= 9) return "6-9";
if (numberEmployees >= 10 && numberEmployees <= 19) return "10-19";
if (numberEmployees >= 20 && numberEmployees <= 49) return "20-49";
if (numberEmployees >= 50 && numberEmployees <= 99) return "50-99";
if (numberEmployees >= 100 && numberEmployees <= 199) return "100-199";
if (numberEmployees >= 200 && numberEmployees <= 249) return "200-249";
if (numberEmployees >= 250 && numberEmployees <= 499) return "250-499";
if (numberEmployees >= 500 && numberEmployees <= 999) return "500-999";
if (numberEmployees >= 1000 && numberEmployees <= 1999) return "1000-1999";
if (numberEmployees >= 2000 && numberEmployees <= 4999) return "2000-4999";
if (numberEmployees >= 5000 && numberEmployees <= 9999) return "5000-9999";
if (numberEmployees >= 10000) return "+10000";
return "";
};
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const validEstablishment: AnnuaireDesEntreprisesSiretEstablishment = {
etat_administratif: "A",
},
],
tranche_effectif_salarie: "1",
tranche_effectif_salarie: "01",
siege: {
activite_principale: "78.3Z",
},
Expand Down
52 changes: 4 additions & 48 deletions back/src/domains/core/sirene/adapters/InseeSiretGateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import Bottleneck from "bottleneck";
import { format, formatISO } from "date-fns";
import {
NafDto,
NumberEmployeesRange,
OmitFromExistingKeys,
SiretDto,
SiretEstablishmentDto,
Expand All @@ -22,6 +21,7 @@ import { RetryStrategy } from "../../retry-strategy/ports/RetryStrategy";
import { TimeGateway } from "../../time-gateway/ports/TimeGateway";
import { SiretGateway } from "../ports/SiretGateway";
import { InseeExternalRoutes } from "./InseeSiretGateway.routes";
import { getNumberEmployeesRangeByTefenCode } from "./SiretGateway.common";

const logger = createLogger(__filename);

Expand Down Expand Up @@ -305,7 +305,9 @@ export const convertSirenRawEstablishmentToSirenEstablishmentDto = (
businessName: getBusinessName(siretEstablishment),
businessAddress: getFormattedAddress(siretEstablishment),
nafDto: getNafAndNomenclature(siretEstablishment),
numberEmployeesRange: getNumberEmployeesRange(siretEstablishment),
numberEmployeesRange: getNumberEmployeesRangeByTefenCode(
siretEstablishment.uniteLegale.trancheEffectifsUniteLegale,
),
isOpen: getIsActive(siretEstablishment),
});

Expand Down Expand Up @@ -363,49 +365,3 @@ const getIsActive = ({
lastPeriod.etatAdministratifEtablissement === "A"
);
};

const getNumberEmployeesRange = ({
uniteLegale,
}: InseeApiRawEstablishment): NumberEmployeesRange => {
const tefenCode = uniteLegale.trancheEffectifsUniteLegale;
if (!tefenCode || tefenCode === "NN") return "";
return employeeRangeByTefenCode[<TefenCode>+tefenCode];
};

// tefenCode is a French standard code for the number of employees in a company.
type TefenCode =
| -1
| 0
| 1
| 2
| 3
| 11
| 12
| 21
| 22
| 31
| 32
| 41
| 42
| 51
| 52
| 53;

const employeeRangeByTefenCode: Record<TefenCode, NumberEmployeesRange> = {
[-1]: "",
[0]: "0",
[1]: "1-2",
[2]: "3-5",
[3]: "6-9",
[11]: "10-19",
[12]: "20-49",
[21]: "50-99",
[22]: "100-199",
[31]: "200-249",
[32]: "250-499",
[41]: "500-999",
[42]: "1000-1999",
[51]: "2000-4999",
[52]: "5000-9999",
[53]: "+10000",
};
49 changes: 49 additions & 0 deletions back/src/domains/core/sirene/adapters/SiretGateway.common.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { NumberEmployeesRange } from "shared";

export const getNumberEmployeesRangeByTefenCode = (
tefenCode?: string,
): NumberEmployeesRange =>
tefenCode && isTefenCode(tefenCode)
? employeeRangeByTefenCode[tefenCode]
: "";

const isTefenCode = (numberEmployees: string): numberEmployees is TefenCode =>
numberEmployees in employeeRangeByTefenCode;

// tefenCode is a French standard code for the number of employees in a company.
type TefenCode =
| "NN"
| "00"
| "01"
| "02"
| "03"
| "11"
| "12"
| "21"
| "22"
| "31"
| "32"
| "41"
| "42"
| "51"
| "52"
| "53";

const employeeRangeByTefenCode: Record<TefenCode, NumberEmployeesRange> = {
NN: "",
"00": "0",
"01": "1-2",
"02": "3-5",
"03": "6-9",
"11": "10-19",
"12": "20-49",
"21": "50-99",
"22": "100-199",
"31": "200-249",
"32": "250-499",
"41": "500-999",
"42": "1000-1999",
"51": "2000-4999",
"52": "5000-9999",
"53": "+10000",
};

0 comments on commit d1779b1

Please sign in to comment.