๐ GfddppGui
What is GfddppGui ?โ
It is a tool developped by Farmaflux to register / update data for a given patient delivered medication history. More info about it on https://www.farmaflux.be/
Prerequisitesโ
- eHealth Pharmacy profile in ACCptance . If none, ask that to integration-support@ehealth.fgov.be
- eHealth personnal certificate. If not, get one through eHealth Certificate Manager (French) / eHealth Certificate Manager (Dutch)
- eHealth Pharmacy certificate. If not, get one through eHealth Certificate Manager (French) / eHealth Certificate Manager (Dutch)
Stepsโ
Setupโ
- Go to https://ftp.apb.be/ and login (username: anonymous, no password)
- Go inside the
SDK
folder - Go inside the folder of a recent version of the SDK (Recommended :
MBC-4.1
) - Download the zip file you find in the folder, such as
Executor MBC-4.1.zip
- Copy your two certificats from eHealth folder (e.g
C:/Users/jy/ehealth/keystore
) toSDK/conf/p12/acc
folder :
- The certificat of a pharmacy you are known as holder (e.g.
NIHII-PHARMACY=80000551 20240208-103514.acc-p12
) - Your personal certificat (e.g.
SSIN=12345678901 20240208-101310.acc-p12
)
- Update or create following properties of
SDK/conf/connector-client.properties
file :
# STS HAS CHANGED in november 2023
endpoint.sts=https://services-acpt.ehealth.fgov.be/IAM/SecurityTokenService/v1
service.sts.class=be.ehealth.technicalconnector.service.sts.impl.STSServiceWsTrustImpl
default.rsa.digest.method.algorithm=http://www.w3.org/2001/04/xmlenc#sha256
default.rsa.signature.method.algorithm=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
# password of your keystores, prefer to have the same password for easiness ...
# Pharmacy keystore password
KEYSTORE_PASSWORD=YOUR_PASSWORD_HERE
# Personnal keystore password
user.password=YOUR_PASSWORD_HERE
# Information about user, pharmacy-holder and pharmacy (SSIN and NIHII-numbers) used in the SAML attributes
user.firstname=John
user.lastname=Doe
user.inss=12345678901
# The nihii number of your pharmacist profile
# Go to https://webapps-v.riziv-inami.fgov.be/ to see it
user.nihii=YOUR_PHARMACIST_NIHII_HERE
# Information about your pharmacy
# For the pharmacy holder, usually in ACC, it is the same person, which makes it simple
pharmacy.name=YOUR_PHARMACY_NAME_HERE
pharmacy.nihii=YOUR_PHARMACY_NIHII_HERE
pharmacy-holder.nihii=YOUR_PHARMACIST_HOLDER_NIHII_HERE
pharmacy-holder.ssin=12345678901
pharmacy-holder.firstname=John
pharmacy-holder.lastname=Doe
# The keystores file names
sessionmanager.holderofkey.keystore=NIHII-PHARMACY=80000551 20240208-103514.acc-p12
sessionmanager.encryption.keystore=NIHII-PHARMACY=80000551 20240208-103514.acc-p12
sessionmanager.identification.keystore=SSIN=12345678901 20240208-101310.acc-p12
- Run
SDK/examples/gui/setupGfddp.bat
so that gui is set up
Usageโ
- Run
SDK/examples/gui/startGfddppGui.bat
to start the gui - Create a session
- In
General
tab, click onCreate Fallback session
- Click on
Login
(leave fields blank as normally already setup thanks to connector-client.properties file) - Wait until you get an answer (SOAP calls takes time ...)
- If it is successful, you will have something in
SAML token
textarea
- In
- Do any of the following actions :
- Register patient in PCDH
- Insert data patient in PCDH
- Remove data patient in PCDH
- Ask patient to enable consent & have a therapeutic relation with your pharmacy
- Enable consent, if not already done on https://wwwacc.mijngezondheid.belgie.be/my/care-and-support/consent
- Create a therapeutic relation with the pharmacy on https://wwwacc.mijngezondheid.belgie.be/my/care-and-support/relationships
- Enable
contractering
link between your patient and the pharmacy
- In
GFDDPP
tab, click onQuestionnaire
section (use arrows on the right to see it) - Update patient request
ssin
/names
/familyName
/birthDate
/gender
fields with the data of your own patient such as :
{
"ssin": "12345678901",
"names": [
"John"
],
"familyName": "Done",
"birthDate": "1972-08-10",
"gender": "MALE",
"mobileNumber":"0498988877",
"address": {
"streetAndNumber": "Streuvelstraat (Stijn) 4",
"zip": "1800",
"municipality": "Vilvoorde"
},
"requireSignature": null,
"requireConsent": null,
"requireTherapeuticLink": null
}
- Click on
btnGetAvailableAdminTypeQuestionn
and wait for answer - Input
contracting
(instead ofcovid19test
) inQuestionnaireType
field - Click on
btnGetLaunchUrl
and wait for answer - Copy the
launchurl
property you get from JSON response (e.g. https://acc-tip.gfd-dpp.be/be-apb-gfddpp-services-Pharm-app/launch.html?iss=https://acc-tip.gfd-dpp.be/be-apb-gfddpp-services-TIPFHIR/fhir&launch=ea14fe04-d9b1-4387-a420-1475004f7556&sublaunch=contracting&ehr=https://acc-tip.gfd-dpp.be/be-apb-gfddpp-services-EHR/ehr&nocache=1 ) - Open this link in your browser
- Enable or extend the validity of two specific things you will see on this website :
Verwerkersovereenkomst
Gedeeld Farmaceutisch Dossier (GFD)
- If both operation are successful, you are ready to manipulate data in FarmaFlux
warning
Don't forget to register your patient in PCDH first, otherwise this won't work
- In
GFDDPP
tab, click onRegister data
section (use arrows on the left to see it) - In the first textarea, create or copy an example from
output/pcdh
where you applied the following modifications :- You replace information of
model:max-Patient
with information of your own patient - You replace information of
id:nihiiPharmacyNumber
with information of your own pharmacy - You removed the
<smc:header>
element (will be generated by tool) - You removed all occurrence of
<model:dispensationGUID>
(will be generated by tool) - You made sure that
<smc:sessionDateTime>
value is now of in the past (Can't be a date in the future)
- You replace information of
info
For validation purposes with official xsd, examples from output/pcdh
have to be full.
๐ ๏ธ A powershell script called make_data_injection_ready_for_farmaflux_sdk.ps1
automates the removal part in output/pcdh
folder.
- Click on
Register
- If it is successful, you will have answer with :
- A sguid for this delivery session
- A different dguid for each medication you introduced
info
๐ ๏ธ A powershell script called extract_identifiers_from_register_data_call.ps1
automates the extraction of sguid and dguid(s)
- You can check detailed status with tab
Get status messages
and your sguid / dguid- Rejected medications will have an
<ns2:MessageSubType>COMMON_ERROR_PRODUCTFILTER_REMOVED</ns2:MessageSubType>
element - Accepted medication will have an
<ns2:MessageSubType>TIP_ROUTED_TO_FINALITY</ns2:MessageSubType>
element
- Rejected medications will have an
warning
Don't forget to register your patient in PCDH first, otherwise this won't work
- In
GFDDPP
tab, click onGet data
section (use arrows on the left to see it) - Change
XXXXXXXXXXX
(in sectionPatient id
) with information of your own patient ssin - In the first textarea, copy this example where you applied the following modifications :
- You replace information of
[YOUR_PATIENT_SSIN]
with information of your own patient ssin
- You replace information of
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<single-message xmlns:ns2="http://www.apb.be/standards/smoa/schema/model/v1" xmlns="http://www.apb.be/standards/smoa/schema/v1" xmlns:ns4="http://www.apb.be/standards/smoa/schema/code/v1" xmlns:ns3="http://www.apb.be/standards/smoa/schema/id/v1" xmlns:ns5="http://www.ehealth.fgov.be/standards/kmehr/schema/v1" xmlns:ns6="test" xmlns:ns7="http://www.w3.org/2000/09/xmldsig#" xmlns:ns8="http://www.w3.org/2001/04/xmlenc#">
<unsigned>
<eventFolder>
<events>
<event xsi:type="MedicationHistoryEvent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:medicationHistoryEntity>
<ns2:entityId xsi:type="ns3:EntityIdType">
<ns3:id>e14df4f9-f7bd-617c-9d46-5bfd109f406b</ns3:id>
<ns3:version>1</ns3:version>
</ns2:entityId>
<ns2:sessionID>71767665-c6f2-61d2-1e55-f16ff046ab3b</ns2:sessionID>
<ns2:deliveryDate>2024-02-06T14:30:09</ns2:deliveryDate>
<ns2:min-Patient>
<ns2:personId xsi:type="ns3:InssIdType">
<ns3:id>[YOUR_PATIENT_SSIN]</ns3:id>
</ns2:personId>
<ns2:name></ns2:name>
<ns2:familyName></ns2:familyName>
</ns2:min-Patient>
<ns2:product prescribed="false">
<ns2:description>
<ns2:productCode xsi:type="ns3:CnkIdType">
<ns3:cnk>6666666</ns3:cnk>
</ns2:productCode>
</ns2:description>
<ns2:dispensation>
<ns2:numberOfUnits>1</ns2:numberOfUnits>
<ns2:administrationInstructions>
<ns2:beginmoment>
<yearmonth>2012-10</yearmonth>
</ns2:beginmoment>
<ns2:regimen>
<ns2:daynumber>1</ns2:daynumber>
<ns2:daytime>
<ns2:dayperiod xsi:type="ns4:DayPeriodCodeType">
<ns4:cd>BETWEENBREAKFASTANDLUNCH</ns4:cd>
</ns2:dayperiod>
</ns2:daytime>
<ns2:quantity>
<ns2:decimal>5.0</ns2:decimal>
<ns2:unit xsi:type="ns4:AdministrationUnitValuesCodeType">
<ns4:cd>ml</ns4:cd>
</ns2:unit>
</ns2:quantity>
</ns2:regimen>
<ns2:route>test</ns2:route>
<ns2:issubstitutionallowed>false</ns2:issubstitutionallowed>
</ns2:administrationInstructions>
</ns2:dispensation>
</ns2:product>
<ns2:tipQualityIndicator>5</ns2:tipQualityIndicator>
</ns2:medicationHistoryEntity>
</event>
</events>
<entitySpace>
<entity xsi:type="ns2:DataLocationType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns2:min-Patient>
<ns2:personId xsi:type="ns3:InssIdType">
<ns3:id>[YOUR_PATIENT_SSIN]</ns3:id>
</ns2:personId>
<ns2:name></ns2:name>
<ns2:familyName></ns2:familyName>
</ns2:min-Patient>
<ns2:location>
<ns2:system>PCDH</ns2:system>
<ns2:careDataType>medicationhistory</ns2:careDataType>
</ns2:location>
</entity>
</entitySpace>
</eventFolder>
</unsigned>
</single-message>
- Click on
Get
button - Copy answer & replace contents of this repository
TEMPLATES/PCDH_getData.xml
file with it - Delete all xml files in
output/pcdh-removal
folder - Run this command
npm run generate-revoke-data
- If everything runs as expected, you have now the xml message(s) for next steps in
output/pcdh-removal
- In
GFDDPP
tab, click onRevoke data
section (use arrows on the left to see it) - For each message in
output/pcdh-removal
, do this :- In the first textarea, copy each message where you applied the following modifications :
- You replace information of
id:nihiiPharmacyNumber
with information of your own pharmacy - You removed the
<smc:header>
element (will be generated by tool)
- You replace information of
- Click on
Revoke
button - If it is successful, you will have a popup with message "Data has been revoked" otherwise another message
- In the first textarea, copy each message where you applied the following modifications :
tip
Common reasons if you have issues :
- Your VPN might block calls to PCDH
- At least one of your eHealth certificates is expired
- Mistake(s) in your
SDK/conf/connector-client.properties
file - XML files that doesn't respect PCDH rules
- If SDK auto-retry feature doesn't work (after 5 minutes), close tool, delete everything in
SDK/conf/msg_queue
folder and resend all your messages - ...