A guillotina framework powered fhirpath provider. Full battery included to use fhirpath more efficiently.
If you don't know about FHIR® and HL7®, Please have a look here.
- Make sure
fhirpath_guillotina
is added as addon in your guillotina configure file. - Make sure elasticsearch server configured properly.
- Make sure you have FHIR resource contenttypes registered (see example bellow).
- Make sure you have FHIR resources mapping (correct version) for elasticsearch.
Example: Add Contents:
>>> from fhirpath_guillotina.field import FhirField
class IOrganization(IFhirContent, IContentIndex):
index_field(
"organization_resource",
type="object",
field_mapping=fhir_resource_mapping("Organization"),
fhirpath_enabled=True,
resource_type="Organization",
fhir_release=FHIR_VERSION.R4,
)
index_field("org_type", type="keyword")
org_type = TextLine(title="Organization Type", required=False)
organization_resource = FhirField(
title="Organization Resource", resource_type="Organization", fhir_release="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.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.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"
- Free software: GNU General Public License v3
- Documentation: https://fhirpath-guillotina.readthedocs.io.
This package skeleton was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.