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 #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 ofMedicationConcept` to the CDA document - will raise NotImplementedError.
.add_to_medication_list(): Adds a list ofAllergyConcept` 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.
Closes #26 and fixes #24
This PR adds
ClinicalDocumentation
use case to the library. Changes include:BaseClient
class to ensure a uniform API for use cases (fixes #24 by having default attributes have leading underscore).ClinicalDocumentation
use case and strategy inuse_case/
(process_notereader_document()
mounted to/notereader
path)cda_parser/
module. TheCdaAnnotator
is responsible for parsing, loading, and annotating a CCD (Continuity of Care Document) data from CDA files required for theClinicalDocumentation
use case. Internally, it uses thexmltodict
library to represent an XML object as a JSON-compatible dictionary. Dictionary representations of CDA data structures are then validated as Pydantic models incda_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 ofProblemConcept
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..send_request()
method ofEHRClient
.sandbox
.CcdData
as a system-agnostic model container for CCD data (contains problems, allergies, medications concept lists, note, and optional raw CDA XML string).Concept
as a system-agnostic model container for coded concepts.CdaRequest
andCdaResponse
models for use case.api_protocol
attribute to the data modelEndpoint
.service/soap
(implemented withspyne
)@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.