diff --git a/src/main/java/fr/ans/psc/pscextract/service/TransformationService.java b/src/main/java/fr/ans/psc/pscextract/service/TransformationService.java index 51419bd..62072f8 100644 --- a/src/main/java/fr/ans/psc/pscextract/service/TransformationService.java +++ b/src/main/java/fr/ans/psc/pscextract/service/TransformationService.java @@ -146,7 +146,7 @@ public String getFileNameWithExtension(String fileExtension) { return extractName + "_" + extractTime + fileExtension; } - public ArrayList unwind(List psList) { + public List unwind(List psList) { ArrayList unwoundPsList = new ArrayList<>(); Ps tempPs; for (Ps ps : psList) { @@ -182,8 +182,18 @@ public ArrayList unwind(List psList) { } public String transformPsToLine(Ps ps, String id) { - String activityCode = null; StringBuilder sb = new StringBuilder(); + appendIdFields(sb, id); + appendPsFields(sb, ps, id); + String activityCode = appendProfessionFields(sb, ps); + appendAlternativeOrRegularIds(sb, ps); + sb.append(Optional.ofNullable(activityCode).orElse("")).append("|"); + sb.append("\n"); + + return sb.toString(); + } + + private void appendIdFields(StringBuilder sb, String id) { if (id.charAt(0) == '0' && id.contains("-")) { // Identifiant PSI (UUID préfixé par '0', format avec tirets) : colonne type vide, identifiant complet sb.append("").append("|"); @@ -192,6 +202,9 @@ public String transformPsToLine(Ps ps, String id) { sb.append(id.charAt(0)).append("|"); sb.append(id.substring(1)).append("|"); } + } + + private void appendPsFields(StringBuilder sb, Ps ps, String id) { sb.append(Optional.ofNullable(id).orElse("")).append("|"); sb.append(Optional.ofNullable(ps.getLastName()).orElse("")).append("|"); sb.append(Optional.ofNullable(transformFirstNamesToStringWithApostrophes(ps.getFirstNames())).orElse("''")).append("|"); @@ -203,86 +216,98 @@ public String transformPsToLine(Ps ps, String id) { sb.append(Optional.ofNullable(ps.getPhone()).orElse("")).append("|"); sb.append(Optional.ofNullable(ps.getEmail()).orElse("")).append("|"); sb.append(Optional.ofNullable(ps.getSalutationCode()).orElse("")).append("|"); + } - if (ps.getProfessions() != null && ps.getProfessions().get(0) != null) { - Profession profession = ps.getProfessions().get(0); - sb.append(Optional.ofNullable(profession.getCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(profession.getCategoryCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(profession.getSalutationCode()).orElse("")).append("|"); - String exerciseLastName = (profession.getLastName() != null && !profession.getLastName().isBlank()) - ? profession.getLastName() : Optional.ofNullable(ps.getLastName()).orElse(""); - String exerciseFirstName = (profession.getFirstName() != null && !profession.getFirstName().isBlank()) - ? profession.getFirstName() : getFirstFirstName(ps.getFirstNames()); - sb.append(exerciseLastName).append("|"); - sb.append(exerciseFirstName).append("|"); - - if (profession.getExpertises() != null && profession.getExpertises().get(0) != null) { - Expertise expertise = profession.getExpertises().get(0); - sb.append(Optional.ofNullable(expertise.getTypeCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(expertise.getCode()).orElse("")).append("|"); - } else { - sb.append("|".repeat(2)); - } - - if (profession.getWorkSituations() != null && profession.getWorkSituations().get(0) != null) { - WorkSituation workSituation = profession.getWorkSituations().get(0); - sb.append(Optional.ofNullable(workSituation.getModeCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(workSituation.getActivitySectorCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(workSituation.getPharmacistTableSectionCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(workSituation.getRoleCode()).orElse("")).append("|"); - - if (workSituation.getStructure() != null) { - Structure structure = workSituation.getStructure(); - sb.append(Optional.ofNullable(structure.getSiteSIRET()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getSiteSIREN()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getSiteFINESS()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getLegalEstablishmentFINESS()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getStructureTechnicalId()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getLegalCommercialName()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getPublicCommercialName()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getRecipientAdditionalInfo()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getGeoLocationAdditionalInfo()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getStreetNumber()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getStreetNumberRepetitionIndex()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getStreetCategoryCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getStreetLabel()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getDistributionMention()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getCedexOffice()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getPostalCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getCommuneCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getCountryCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getPhone()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getPhone2()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getFax()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getEmail()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getDepartmentCode()).orElse("")).append("|"); - sb.append(Optional.ofNullable(structure.getOldStructureId()).orElse("")).append("|"); - } else { - sb.append("|".repeat(24)); - } - sb.append(Optional.ofNullable(workSituation.getRegistrationAuthority()).orElse("")).append("|"); - activityCode = (Optional.ofNullable(workSituation.getActivityKindCode()).orElse("")); - - } else { - sb.append("|".repeat(29)); - } - } else { + private String appendProfessionFields(StringBuilder sb, Ps ps) { + if (ps.getProfessions() == null || ps.getProfessions().get(0) == null) { // Pas de profession : on remplit quand même Nom/Prénom d'exercice avec les données du PS sb.append("|".repeat(3)); // code profession, catégorie, civilité d'exercice sb.append(Optional.ofNullable(ps.getLastName()).orElse("")).append("|"); sb.append(getFirstFirstName(ps.getFirstNames())).append("|"); sb.append("|".repeat(31)); // colonnes restantes + return null; + } + + Profession profession = ps.getProfessions().get(0); + sb.append(Optional.ofNullable(profession.getCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(profession.getCategoryCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(profession.getSalutationCode()).orElse("")).append("|"); + String exerciseLastName = (profession.getLastName() != null && !profession.getLastName().isBlank()) + ? profession.getLastName() : Optional.ofNullable(ps.getLastName()).orElse(""); + String exerciseFirstName = (profession.getFirstName() != null && !profession.getFirstName().isBlank()) + ? profession.getFirstName() : getFirstFirstName(ps.getFirstNames()); + sb.append(exerciseLastName).append("|"); + sb.append(exerciseFirstName).append("|"); + + appendExpertiseFields(sb, profession); + return appendWorkSituationFields(sb, profession); + } + + private void appendExpertiseFields(StringBuilder sb, Profession profession) { + if (profession.getExpertises() != null && profession.getExpertises().get(0) != null) { + Expertise expertise = profession.getExpertises().get(0); + sb.append(Optional.ofNullable(expertise.getTypeCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(expertise.getCode()).orElse("")).append("|"); + } else { + sb.append("|".repeat(2)); + } + } + + private String appendWorkSituationFields(StringBuilder sb, Profession profession) { + if (profession.getWorkSituations() == null || profession.getWorkSituations().get(0) == null) { + sb.append("|".repeat(29)); + return null; } + + WorkSituation workSituation = profession.getWorkSituations().get(0); + sb.append(Optional.ofNullable(workSituation.getModeCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(workSituation.getActivitySectorCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(workSituation.getPharmacistTableSectionCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(workSituation.getRoleCode()).orElse("")).append("|"); + + appendStructureFields(sb, workSituation.getStructure()); + sb.append(Optional.ofNullable(workSituation.getRegistrationAuthority()).orElse("")).append("|"); + return Optional.ofNullable(workSituation.getActivityKindCode()).orElse(""); + } + + private void appendStructureFields(StringBuilder sb, Structure structure) { + if (structure == null) { + sb.append("|".repeat(24)); + return; + } + sb.append(Optional.ofNullable(structure.getSiteSIRET()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getSiteSIREN()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getSiteFINESS()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getLegalEstablishmentFINESS()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getStructureTechnicalId()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getLegalCommercialName()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getPublicCommercialName()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getRecipientAdditionalInfo()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getGeoLocationAdditionalInfo()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getStreetNumber()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getStreetNumberRepetitionIndex()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getStreetCategoryCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getStreetLabel()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getDistributionMention()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getCedexOffice()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getPostalCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getCommuneCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getCountryCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getPhone()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getPhone2()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getFax()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getEmail()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getDepartmentCode()).orElse("")).append("|"); + sb.append(Optional.ofNullable(structure.getOldStructureId()).orElse("")).append("|"); + } + + private void appendAlternativeOrRegularIds(StringBuilder sb, Ps ps) { List altIds = ps.getAlternativeIds(); if (altIds != null && !altIds.isEmpty()) { sb.append(transformAlternativeIdsToString(altIds)).append("|"); } else { sb.append(transformIdsToString(ps.getIds())).append("|"); } - sb.append(Optional.ofNullable(activityCode).orElse("")).append("|"); - sb.append("\n"); - - return sb.toString(); } public void setExtractionTime() { diff --git a/src/test/java/fr/ans/psc/pscextract/ExtractionControllerTests.java b/src/test/java/fr/ans/psc/pscextract/ExtractionControllerTests.java index aa7507f..d46acc8 100644 --- a/src/test/java/fr/ans/psc/pscextract/ExtractionControllerTests.java +++ b/src/test/java/fr/ans/psc/pscextract/ExtractionControllerTests.java @@ -232,7 +232,7 @@ void generateExtractTest() throws Exception { } @Test - public void shouldJoinExtractSha256Digest() throws IOException { + void shouldJoinExtractSha256Digest() throws IOException { httpMockServer.stubFor(get("/v2/ps?page=0&size=1").willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBodyFile("page1size1.json"))); httpMockServer.stubFor(get("/v2/ps?page=1&size=1").willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBodyFile("page2size1.json"))); httpMockServer.stubFor(get("/v2/ps?page=2&size=1").willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBodyFile("page3size1.json"))); diff --git a/src/test/java/fr/ans/psc/pscextract/TransformationServiceTest.java b/src/test/java/fr/ans/psc/pscextract/TransformationServiceTest.java index 3945038..1f60f1d 100644 --- a/src/test/java/fr/ans/psc/pscextract/TransformationServiceTest.java +++ b/src/test/java/fr/ans/psc/pscextract/TransformationServiceTest.java @@ -31,7 +31,7 @@ @SpringBootTest @ContextConfiguration(classes = PscextractApplication.class) -public class TransformationServiceTest { +class TransformationServiceTest { @Autowired TransformationService transformationService; @@ -42,7 +42,7 @@ static void registerPgProperties(DynamicPropertyRegistry propertiesRegistry) { } @Test - public void transformFirstNamesTest() { + void transformFirstNamesTest() { FirstName fn1 = new FirstName("KADER", 0); FirstName fn2 = new FirstName("HASSAN", 1); FirstName fn3 = new FirstName("JOHNNY", 2);