Pointcuts - Smile CDR Documentation

Pointcuts

This page shows all available pointcuts for each component of Smile CDR.

FHIR Generic Client

See the HAPI FHIR Client Pointcuts documentation for the request-processing pipeline and the CLIENT_REQUEST / CLIENT_RESPONSE pointcuts.

Persistence

Basic Persistence Pointcuts

See the HAPI FHIR Server Pointcuts documentation for the Storage / JPA Server pipeline and the full set of STORAGE_* pointcuts (STORAGE_PRESHOW_RESOURCES, STORAGE_PRESEARCH_REGISTERED, STORAGE_PRESTORAGE_RESOURCE_*, STORAGE_PRECOMMIT_RESOURCE_*, STORAGE_PREACCESS_RESOURCES, etc.).

Bulk Export Pointcuts

Job ID returned to caller

$export

request

Begin batch job

Enters job\ \ lifecycle\ \ (see Batch Job diagram) Java Hook:\ \ STORAGE_PRE_INITIATE_BULK_EXPORT\ \ (before permission checks) Java Hook:\ \ STORAGE_INITIATE_BULK_EXPORT Java Hook:\ \ STORAGE_BULK_EXPORT_RESOURCE_INCLUSION\ \ (per candidate resource). \ \ This is called from inside the batch job, but is shown here for pointcut completeness.

Binary created

Job complete

Batch Job Lifecycle

Client kicks off job

($reindex, $export,

$delete-expunge, ...)

Build JobInstance

(in memory)

Persist

to DB

Maintenance scheduler

picks up QUEUED job

Run job steps\ \ in parallel\ \ (chunk processing loop —\ \ see Chunk Processing diagram)

Final step completes;

job reaches terminal state

Batch job marked

as complete

Caller queries

results asynchronously

Java Hook:\ \ STORAGE_PRESTORAGE_BATCH_JOB_CREATE Java Hook:\ \ STORAGE_POSTSTORAGE_BATCH_JOB_CREATE Java Hook:\ \ STORAGE_POSTCOMPLETE_BATCH_JOB Work Chunk Processing

ok

error

Worker claims a

READY work chunk

Build new RequestDetails

for task execution context

Execute

step logic

Mark chunk COMPLETED;

queue next chunk(s)

Retry or mark

chunk FAILED

Java Hook:\ \ STORAGE_BATCH_TASK_NEW_REQUEST_DETAILS Java Hook:\ \ BATCH2_CHUNK_PROCESS_FILTER Java Hook:\ \ BATCH2_CHUNK_PROCESS_FILTER Java Hook:\ \ BATCH2_CHUNK_PROCESS_FILTER

Subscription

Subscription Module

Broker (Kafka/ActiveMQ)

Persistence Module

FHIR Endpoint Module

Deliverer

Matcher

yes

no

yes

Success

failure

A resource is

created / updated / deleted

Resource modification

received

Resource persisted

to database

Java Hook:\ \ SUBSCRIPTION_RESOURCE_MODIFIED\ \ (synchronous, in PERSISTENCE module)

Matching Queue

Delivery Queue

Did the resource match

any Subscription?

Is resource of

Type Subscription?

Java Hook:\ \ SUBSCRIPTION_BEFORE_PERSISTED_RESOURCE_CHECKED Java Hook:\ \ SUBSCRIPTION_AFTER_PERSISTED_RESOURCE_CHECKED Java Hook:\ \ SUBSCRIPTION_RESOURCE_DID_NOT_MATCH_ANY_SUBSCRIPTIONS Java Hook:\ \ SUBSCRIPTION_RESOURCE_MATCHED

Subscription

Matching

Java Hook:\ \ SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_REGISTERED\ \ SUBSCRIPTION_AFTER_ACTIVE_SUBSCRIPTION_UNREGISTERED\ \ (when a Subscription resource is activated / removed) Java Hook:\ \ SUBSCRIPTION_BEFORE_DELIVERY\ \ SUBSCRIPTION_BEFORE_REST_HOOK_DELIVERY\ \ SUBSCRIPTION_BEFORE_MESSAGE_DELIVERY

Subscription

Delivery

Java Hook:\ \ SUBSCRIPTION_AFTER_DELIVERY\ \ SUBSCRIPTION_AFTER_REST_HOOK_DELIVERY\ \ SUBSCRIPTION_AFTER_MESSAGE_DELIVERY Java Hook:\ \ SUBSCRIPTION_AFTER_DELIVERY_FAILED\ \ (on delivery failure)

FHIR Endpoint

See the HAPI FHIR Server Pointcuts documentation for the plain-server request lifecycle and the full set of SERVER_* pointcuts (SERVER_INCOMING_REQUEST_*, SERVER_OUTGOING_*, SERVER_HANDLE_EXCEPTION, SERVER_PROCESSING_COMPLETED*, etc.).

Channel Import

Kafka /

ActiveMQ

Channel Import

Router

Resource

Ingested

Java Hook:\ \ CHANNEL_IMPORT_MESSAGE_PRE_PROCESSED

FHIR Gateway

GET / POST / PUT / DELETE

/Patient/123

Your application

Gateway Method

Called

Route

Selected

Target

Requests

Target

Responses

Target FHIR

Endpoints

Java Hook (post route selection):\ \ FHIRGW_CREATE_POST_SELECT_ROUTE\ \ FHIRGW_READ_POST_SELECT_ROUTE\ \ FHIRGW_UPDATE_POST_SELECT_ROUTE\ \ FHIRGW_DELETE_POST_SELECT_ROUTE\ \ FHIRGW_SEARCH_POST_SELECT_ROUTE\ \ FHIRGW_OPERATION_POST_SELECT_ROUTE\ \ FHIRGW_TRANSACTION_POST_SELECT_ROUTE\ \ FHIRGW_INSTANCE_HISTORY_POST_SELECT_ROUTE Java Hook (once per target):\ \ FHIRGW_CREATE_TARGET_PREINVOKE\ \ FHIRGW_READ_TARGET_PREINVOKE\ \ FHIRGW_UPDATE_TARGET_PREINVOKE\ \ FHIRGW_DELETE_TARGET_PREINVOKE\ \ FHIRGW_SEARCH_TARGET_PREINVOKE\ \ FHIRGW_SEARCH_PAGE_TARGET_PREINVOKE\ \ FHIRGW_OPERATION_TARGET_PREINVOKE\ \ FHIRGW_TRANSACTION_TARGET_PREINVOKE\ \ FHIRGW_INSTANCE_HISTORY_TARGET_PREINVOKE\ \ FHIRGW_GET_TARGET_PREINVOKE Java Hook (once per target):\ \ FHIRGW_READ_TARGET_POSTINVOKE\ \ FHIRGW_SEARCH_TARGET_POSTINVOKE\ \ FHIRGW_OPERATION_TARGET_POSTINVOKE\ \ FHIRGW_GET_TARGET_POSTINVOKE

HL7V2 Listening Endpoint

JavaJavaScript

JPA Server / Storage

HL7 v2 Listener

HL7 v2 message

HL7 v2

Sender

MLLP / HTTP Listener

receives HL7 v2 Message

HL7 v2 Message

transformed into

FHIR Bundles

Java Hook:\ \ HL7V2IN_PRE_HL7V2_TO_FHIR_MAPPING_PROCESSING Java Hook:\ \ HL7V2IN_POST_HL7V2_TO_FHIR_MAPPING_PROCESSING Bundles submitted\ \ to transaction processor

JPA Server / Storage

HL7 v2 Listener

HL7 v2 message

HL7 v2

Sender

MLLP / HTTP Listener

receives HL7 v2 Message

HL7 v2 Message

transformed into

FHIR Bundles

Javascript Hook:\ \ onPreConvertHl7V2ToFhir Javascript Hook:\ \ onPostConvertHl7V2ToFhir Bundles submitted\ \ to transaction processor

CDA Import

JavaJavaScript

Document as XML

Operation outcome

Your

client

$cda-import

Create

transaction

bundle

Process

transaction

bundle

Java Hook:\ \ CDA_PRE_IMPORT Java Hook:\ \ CDA_POST_IMPORT

Document as XML

Operation outcome

Your

client

$cda-import

Create

transaction

bundle

Process

transaction

bundle

Javascript Hook:\ \ onPreImportCDA Javascript Hook:\ \ onPostImportCDA

CDA Export

JavaJavaScript

POST Bundle/{bundle_id}/$sdh.generate-cda

Operation Outcome

Your Application

Export Document

Create

Bundle

Generate external file

Java Hook:\ \ CDA_POST_EXPORT

POST Bundle/{bundle_id}/$sdh.generate-cda

Operation Outcome

Your Application

Export Document

Create

Bundle

Generate external file

Javascript Hook:\ \ onPostExportCDA

Interceptors

Pointcuts

Interceptors

Interceptors Pointcuts Starter Project Examples: FHIR Endpoints Examples: HL7v2 Endpoints Examples: FHIR Storage Examples: FHIR Gateway Examples: FHIR Client Examples: MDM Examples: Subscription Examples: Channel Import Examples: Cluster Manager Examples: App Sphere Examples: System To System Data Exchange 2024.02.01 Migration Guide

Starter Project