Skip to content

Feat/support v3 and vactive#429

Merged
EliNoden merged 1 commit into
feat/15-nexsis-conversion-strategyfrom
feat/support-v3-and-vactive
Jul 2, 2026
Merged

Feat/support v3 and vactive#429
EliNoden merged 1 commit into
feat/15-nexsis-conversion-strategyfrom
feat/support-v3-and-vactive

Conversation

@EliNoden

@EliNoden EliNoden commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

🔎 Détails

Lors de nos travaux sur la branche feat/15-nexsis-conversion-strategy, nous avons mis la version cible du CISU à vactive ce qui implique un changement cassant. Pour garder de la rétrocompatibilité, et puisqu'actuellement, les versions v3 et vactive sont les mêmes, cette PR remet la value de CISU_EXPECTED_MODEL_VERSION à v3. Le comportement est alors iso avant/après no changements, et les étapes de validations suivantes montrent qu'il n'y a en effet pas de changement cassant + que le terrain est prêt à accueillir une version supérieure (vactive ou autre) dans la conversion Cisu -> Cisu.

Validation

1. [v3] on teste le transcodage cisu v3 vers health v3 avec CISUTranscoding -> doit renvoyer une 200 avec payload

scripts/call_convert.sh v3 v3 CISUTranscoding ./tests/fixtures/RC-EDA/RC-EDA_required_fields.json --envelope tests/fixtures/EDXL/edxl_envelope_fire_to_health.json > cisu_transcoding_v3_v3.json
Résultat attendu
{
  "converted_messages": [
    {
      "content": [
        {
          "jsonContent": {
            "embeddedJsonContent": {
              "message": {
                "createCaseHealth": {
                  "caseId": "fr.health.samu440.DRFR154402413800862",
                  "creation": "2024-05-26T13:15:00+02:00",
                  "location": {
                    "freetext": ""
                  },
                  "owner": "fr.health.samuA",
                  "qualification": {
                    "whatsHappen": {
                      "code": "C02.05.02",
                      "label": "Obstétrique"
                    }
                  }
                },
                "kind": "Report",
                "messageId": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
                "recipient": [
                  {
                    "URI": "hubsante:fr.health.samuA",
                    "name": "samuA"
                  }
                ],
                "sender": {
                  "URI": "hubsante:fr.fire.sdisZ",
                  "name": "sdisZ"
                },
                "sentAt": "2022-09-27T08:23:34+02:00",
                "status": "Actual"
              }
            }
          }
        }
      ],
      "dateTimeExpires": "2072-09-27T08:23:34+02:00",
      "dateTimeSent": "2022-09-27T08:23:34+02:00",
      "descriptor": {
        "explicitAddress": {
          "explicitAddressScheme": "hubex",
          "explicitAddressValue": "fr.health.samuA"
        },
        "language": "fr-FR"
      },
      "distributionID": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
      "distributionKind": "Report",
      "distributionStatus": "Actual",
      "senderID": "fr.fire.sdisZ"
    }
  ]
}

2. [v3] on teste la conversion cisu v3 vers v3 avec CISUConversion -> doit renvoyer une 200 avec payload

scripts/call_convert.sh v3 v3 CISUVersionConversion ./tests/fixtures/RC-EDA/RC-EDA_required_fields.json --envelope tests/fixtures/EDXL/edxl_envelope_fire_to_health.json > cisu_version_conversion_v3_v3.json
Résultat attendu
{
  "converted_messages": [
    {
      "content": [
        {
          "jsonContent": {
            "embeddedJsonContent": {
              "message": {
                "createCase": {
                  "caseId": "fr.health.samu440.DRFR154402413800862",
                  "creation": "2024-05-26T13:15:00+02:00",
                  "location": {
                    "country": "FR",
                    "locID": "111fb03a-6fd9-41e0-8e81-990c45188891"
                  },
                  "qualification": {
                    "whatsHappen": {
                      "code": "C02.05.02",
                      "label": "Obstétrique"
                    }
                  },
                  "referenceVersion": "2.0"
                },
                "kind": "Report",
                "messageId": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
                "recipient": [
                  {
                    "URI": "hubsante:fr.health.samuA",
                    "name": "samuA"
                  }
                ],
                "sender": {
                  "URI": "hubsante:fr.fire.sdisZ",
                  "name": "sdisZ"
                },
                "sentAt": "2022-09-27T08:23:34+02:00",
                "status": "Actual"
              }
            }
          }
        }
      ],
      "dateTimeExpires": "2072-09-27T08:23:34+02:00",
      "dateTimeSent": "2022-09-27T08:23:34+02:00",
      "descriptor": {
        "explicitAddress": {
          "explicitAddressScheme": "hubex",
          "explicitAddressValue": "fr.health.samuA"
        },
        "language": "fr-FR"
      },
      "distributionID": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
      "distributionKind": "Report",
      "distributionStatus": "Actual",
      "senderID": "fr.fire.sdisZ"
    }
  ]
}

3. [v4] on teste le transcodage cisu v3 vers v4 avec CISUTranscoding -> doit renvoyer une 200 avec payload

Temporairement, on remplace dans converter/converter/cisu_transcoders/constants.py :

class CISUConstants:
...
    CISU_EXPECTED_MODEL_VERSION = "v4" # et non v3

Puis on relance les tests :

scripts/call_convert.sh v4 v3 CISUTranscoding ./tests/fixtures/RC-EDA/RC-EDA_required_fields.json --envelope tests/fixtures/EDXL/edxl_envelope_fire_to_health.json > cisu_transcoding_v4_v3.json
Résultat attendu
{
  "converted_messages": [
    {
      "content": [
        {
          "jsonContent": {
            "embeddedJsonContent": {
              "message": {
                "createCaseHealth": {
                  "caseId": "fr.health.samu440.DRFR154402413800862",
                  "creation": "2024-05-26T13:15:00+02:00",
                  "location": {
                    "freetext": ""
                  },
                  "owner": "fr.health.samuA",
                  "qualification": {
                    "whatsHappen": {
                      "code": "C02.05.02",
                      "label": "Obstétrique"
                    }
                  }
                },
                "kind": "Report",
                "messageId": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
                "recipient": [
                  {
                    "URI": "hubsante:fr.health.samuA",
                    "name": "samuA"
                  }
                ],
                "sender": {
                  "URI": "hubsante:fr.fire.sdisZ",
                  "name": "sdisZ"
                },
                "sentAt": "2022-09-27T08:23:34+02:00",
                "status": "Actual"
              }
            }
          }
        }
      ],
      "dateTimeExpires": "2072-09-27T08:23:34+02:00",
      "dateTimeSent": "2022-09-27T08:23:34+02:00",
      "descriptor": {
        "explicitAddress": {
          "explicitAddressScheme": "hubex",
          "explicitAddressValue": "fr.health.samuA"
        },
        "language": "fr-FR"
      },
      "distributionID": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
      "distributionKind": "Report",
      "distributionStatus": "Actual",
      "senderID": "fr.fire.sdisZ"
    }
  ]
}

4. [v4] on teste la conversion cisu v3 vers v4 avec CISUConversion -> doit renvoyer la même chose

scripts/call_convert.sh v4 v3 CISUVersionConversion ./tests/fixtures/RC-EDA/RC-EDA_required_fields.json --envelope tests/fixtures/EDXL/edxl_envelope_fire_to_health.json  > cisu_version_conversion_v4_v3.json
Résultat attendu
{
  "converted_messages": [
    {
      "content": [
        {
          "jsonContent": {
            "embeddedJsonContent": {
              "message": {
                "createCase": {
                  "caseId": "fr.health.samu440.DRFR154402413800862",
                  "creation": "2024-05-26T13:15:00+02:00",
                  "location": {
                    "country": "FR",
                    "locID": "111fb03a-6fd9-41e0-8e81-990c45188891"
                  },
                  "qualification": {
                    "whatsHappen": {
                      "code": "C02.05.02",
                      "label": "Obstétrique"
                    }
                  },
                  "referenceVersion": "2.0"
                },
                "kind": "Report",
                "messageId": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
                "recipient": [
                  {
                    "URI": "hubsante:fr.health.samuA",
                    "name": "samuA"
                  }
                ],
                "sender": {
                  "URI": "hubsante:fr.fire.sdisZ",
                  "name": "sdisZ"
                },
                "sentAt": "2022-09-27T08:23:34+02:00",
                "status": "Actual"
              }
            }
          }
        }
      ],
      "dateTimeExpires": "2072-09-27T08:23:34+02:00",
      "dateTimeSent": "2022-09-27T08:23:34+02:00",
      "descriptor": {
        "explicitAddress": {
          "explicitAddressScheme": "hubex",
          "explicitAddressValue": "fr.health.samuA"
        },
        "language": "fr-FR"
      },
      "distributionID": "fr.fire.sdisZ_2608323d-507d-4cbf-bf74-52007f8124ea",
      "distributionKind": "Report",
      "distributionStatus": "Actual",
      "senderID": "fr.fire.sdisZ"
    }
  ]
}

Verification finale

diff cisu_transcoding_v3_v3.json cisu_transcoding_v4_v3.json

-> devrait montrer 0 diff

diff cisu_version_conversion_v3_v3.json cisu_version_conversion_v4_v3.json

-> devrait montrer 0 diff

Les conversions de version CISU v3 -> v4 et v4 -> v3 fonctionnent, car retournent la même chose (comportement voulu).

On peut donc être serein sur le fait que laisser v3 dans CISU_EXPECTED_MODEL_VERSION applique bien le comportement attendu.

🔗 Ticket associé

Asana

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

Coverage

Converter - python code coverage
FileStmtsMissBranchBrPartCoverMissing
constants.py9000100% 
conversion_mixin.py2912196%26
converter.py88512194%28–29, 112, 121–122
database.py32224431%12, 16, 18–21, 23, 25, 27, 29–38, 40–41, 49
logging_config.py3528294%29, 36
utils.py168374698%63, 114, 126
cisu_transcoders
   base_cisu_converter.py3330090%7, 25, 31
   constants.py5000100% 
   identical_cisu_converter.py9000100% 
   utils.py15060100% 
cisu_transcoders/create_case
   create_case_cisu_constants.py36000100% 
   create_case_cisu_converter.py192244298%133, 249
cisu_transcoders/reference
   reference_converter.py920077%9, 13
cisu_transcoders/resources_info
   resources_info_cisu_constants.py12000100% 
   resources_info_cisu_converter.py171332398%175, 201, 389
   resources_info_cisu_helper.py49318293%58, 63, 66
cisu_transcoders/resources_status
   resources_status_constants.py4000100% 
   resources_status_converter.py4114097%33
cisu_version_converters
   base_cisu_version_converter.py1964468%9, 31, 36–37, 41, 43
   identical_cisu_version_converter.py9000100% 
cisu_version_converters/create_case
   rc_eda_version_converter.py510080%9
cisu_version_converters/resources_info_cisu
   resources_info_cisu_version_converter.py510080%9
conversion_strategy
   cisu_transcoding_strategy.py49222295%72, 97
   cisu_version_conversion_strategy.py2228290%34, 36
   conversion_strategy.py1526286%21, 36
   health_version_conversion_strategy.py460240100% 
health_version_converters
   base_message_converter.py831214285%13, 72–74, 86, 98, 102, 106, 110, 114, 118, 124
   error_converter.py510080%9
   identical_message_converter.py15000100% 
   utils.py26512280%34–37, 43
health_version_converters/create_case_health
   constants.py4000100% 
   create_case_health_converter.py1780800100% 
   create_case_health_update_converter.py5000100% 
health_version_converters/create_case_health/v1_v2
   constants.py17000100% 
   utils.py460222100% 
health_version_converters/create_case_health/v2_v3
   constants.py29000100% 
health_version_converters/geo_positions_update
   geo_positions_update_constants.py4000100% 
   geo_positions_update_converter.py49312493%33, 44, 81
health_version_converters/geo_resources_details
   geo_resources_details_constants.py4000100% 
   geo_resources_details_converter.py27040100% 
health_version_converters/reference
   reference_constants.py2000100% 
   reference_converter.py13000100% 
health_version_converters/resources_engagement
   resources_engagement_constants.py3000100% 
   resources_engagement_converter.py22021100% 
health_version_converters/resources_info
   resources_info_constants.py20000100% 
   resources_info_converter.py870363100% 
health_version_converters/resources_request
   resources_request_constants.py2000100% 
   resources_request_converter.py21000100% 
health_version_converters/resources_response
   resources_response_constants.py4000100% 
   resources_response_converter.py16020100% 
health_version_converters/resources_status
   resources_status_constants.py10000100% 
   resources_status_converter.py39000100% 
models
   persisted_message.py13000100% 
repositories
   message_repository.py701212282%90–91, 98, 118–120, 122–123, 125, 171–173
TOTAL1921944644795% 

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

There is no coverage information present for the Files changed

Total Project Coverage 52.48% 🍏

@EliNoden EliNoden changed the base branch from main to feat/15-nexsis-conversion-strategy July 2, 2026 09:35
@EliNoden EliNoden merged commit d6afa24 into feat/15-nexsis-conversion-strategy Jul 2, 2026
2 checks passed
@EliNoden EliNoden deleted the feat/support-v3-and-vactive branch July 2, 2026 12:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants