Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add clinical documentation use case #47

Merged
merged 36 commits into from
Jul 23, 2024
Merged

Conversation

jenniferjiangkells
Copy link
Member

@jenniferjiangkells jenniferjiangkells commented Jun 18, 2024

Closes #26 and fixes #24

This PR adds ClinicalDocumentation use case to the library. Changes include:

  • Default methods and attributes are now in BaseClient class to ensure a uniform API for use cases (fixes Function tagged as API can't be called 'Service' #24 by having default attributes have leading underscore).
  • Adds ClinicalDocumentation use case and strategy in use_case/ (process_notereader_document() mounted to /notereader path)
  • Adds cda_parser/ module. The CdaAnnotator is responsible for parsing, loading, and annotating a CCD (Continuity of Care Document) data from CDA files required for the ClinicalDocumentation use case. Internally, it uses the xmltodict library to represent an XML object as a JSON-compatible dictionary. Dictionary representations of CDA data structures are then validated as Pydantic models in cda_parser/model/ (Additional data structures may be needed for medications and allergies - they are currently being parsed as a plain dict to preserve data, but will need some validation). I have only implemented functionality for the problems list in this PR. User facing API includes:
    • .add_to_problem_list(): Adds a list of ProblemConcept to the CDA document.
    • .add_to_medication_list(): Adds a list of MedicationConcept` to the CDA document - will raise NotImplementedError.
    • .add_to_medication_list(): Adds a list of AllergyConcept` to the CDA document - will raise NotImplementedError.
    • .export(): Exports the CDA document as a string. Option to pretty print or overwrite existing entries.
  • Adds code to send SOAP requests in .send_request() method of EHRClient.
  • Adds code to save file as xml or json depending on use case in orchestrator decorator sandbox.
  • Adds CcdData as a system-agnostic model container for CCD data (contains problems, allergies, medications concept lists, note, and optional raw CDA XML string).
  • Adds Concept as a system-agnostic model container for coded concepts.
  • Adds CdaRequest and CdaResponse models for use case.
  • Adds api_protocol attribute to the data model Endpoint.
  • Adds code to mount a SOAP WSGI app on FastAPI server for endpoints with SOAP method.
  • Adds SOAP server components in service/soap (implemented with spyne)
  • Changed workflow name from "notereader-sign-inpatient` to "sign-note-inpatient" (to avoid vendor specific component names)

@adamkells It would be good for you to implement the medications and allergies methods CcdAnnotator to get a bit of familiarity with CDA 😺

Also to do is synthetic data generator methods for CDA. Currently you can load an existing CDA file and use that for testing. We need to complete the implementation for medications and allergies sections first.

I wouldn't mind optimising the pyproject.toml so that users can just download whichever use case they need so they don't need all this xml stuff if they're not using the clindoc use case...but that's for another PR.

@jenniferjiangkells jenniferjiangkells added the Issue: Feature Request ✨ New feature or improvement to existing feature label Jun 18, 2024
@jenniferjiangkells jenniferjiangkells self-assigned this Jun 18, 2024
@jenniferjiangkells jenniferjiangkells linked an issue Jun 23, 2024 that may be closed by this pull request
@jenniferjiangkells jenniferjiangkells marked this pull request as ready for review July 12, 2024 17:14
example_use.py Show resolved Hide resolved
healthchain/cda_parser/cdaannotator.py Show resolved Hide resolved
tests/test_sandbox.py Show resolved Hide resolved
@jenniferjiangkells jenniferjiangkells merged commit 3471ff0 into main Jul 23, 2024
5 checks passed
@jenniferjiangkells jenniferjiangkells deleted the feature/clindoc-usecase branch July 23, 2024 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Issue: Feature Request ✨ New feature or improvement to existing feature
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

Add Clinical Documentation Use Case Function tagged as API can't be called 'Service'
2 participants