fhirpath implementation in Python. This library is built in ORM like approach.

Quickstart (guillotina)

This quickstarter guide is based on guillotina and elasticsearch with extra guillotina_elasticsearch dependency. If don´t know about guillotina, have a look at their nice document. Add fhirpath and guillotina_elasticsearch in your project dependencies. Install fhirpath.providers.guillotina_app from your app configuration file.

we assume you configure elasticsearch_ service properly and have FHIR_ content types and latstly of course you know about FHIR_

Example: Add Contents:

class IOrganization(IFhirContent, IContentIndex): index_field( "organization_resource", type="object", field_mapping=fhir_resource_mapping("Organization"), fhirpath_enabled=True, resource_type="Organization", fhir_version=FHIR_VERSION.DEFAULT, ) index_field("org_type", type="keyword") org_type = TextLine(title="Organization Type", required=False) organization_resource = FhirField( title="Organization Resource", resource_type="Organization", fhir_version="R4" ) @configure.contenttype(type_name="Organization", schema=IOrganization) class Organization(Folder): """ """ index(schemas=[IOrganization], settings={}) resource_type = "Organization"

Example Search:

>>> from guillotina.component import query_utility >>> from fhirpath.interfaces import ISearchContextFactory >>> from fhirpath.providers.guillotina_app.interfaces import IFhirSearch >>> search_context = query_utility(ISearchContextFactory).get( ... resource_type="Organization" ... ) >>> search_tool = query_utility(IFhirSearch) >>> params = ( ... ("active", "true"), ... ("_lastUpdated", "2010-05-28T05:35:56+00:00"), ... ("_profile", "http://hl7.org/fhir/Organization"), ... ("identifier", "urn:oid:2.16.528.1|91654"), ... ("type", "http://hl7.org/fhir/organization-type|prov"), ... ("address-postalcode", "9100 AA") ... ) >>> fhir_bundle = await search_tool(params, context=search_context) >>> fhir_bundle.total == len(fhir_bundle.entry)

Example FhirPath Query:

>>> from fhirpath.providers.guillotina_app.interfaces import IElasticsearchEngineFactory >>> from guillotina.component import query_utility >>> from fhirpath.enums import SortOrderType >>> from fhirpath.fql import Q_ >>> from fhirpath.fql import T_ >>> from fhirpath.fql import V_ >>> from fhirpath.fql import sort_ >>> engine = query_utility(IElasticsearchEngineFactory).get() >>> query_builder = Q_(resource="Organization", engine=engine) >>> query_builder = ( ... query_builder.where(T_("Organization.active") == V_("true")) ... .where(T_("Organization.meta.lastUpdated", "2010-05-28T05:35:56+00:00")) ... .sort(sort_("Organization.meta.lastUpdated", SortOrderType.DESC)) ... .limit(20) ... ) >>> query_result = query_builder(async_result=True) >>> result = query_result.fetchall() >>> result.header.total == 100 True >>> len(result.body) == 20 True >>> async for resource in query_result: ... assert resource.resource_type == "Organization"