@smals-belgium-shared/vidis-diarynote
Version:
Diary notes web component
177 lines (135 loc) • 11.7 kB
Markdown
# Vidis diary notes web component
## Context
VIDIS (Virtual Integrated Drug Information System) integrates several sources and systems:
- [Recip-e][Recip-e] prescriptions
- [Vitalink][Vitalink] / [RSW][RSW] / [RSB][RSB] medication scheme
- [Vitalink][Vitalink] / [RSW][RSW] / [RSB][RSB] diary notes
- [Farmaflux][Farmaflux] delivered medications
In order to be reused by other software vendors, the VIDIS front-end is now split into [web components][Web component explanations].
The container application will have to provide the input parameters to provision the web component with a working context.
## Prerequisites
- A supported browser [by our Web Components](https://angular.dev/reference/versions#browser-support) AND [by eHealth][Supported browsers]
- A valid VIDIS token. It could be obtained from [eHealth Token eXchange][eHealth IAM] service. This token must be refreshed periodically in order to be used by VIDIS
- Notify partners that are using REST APIs so your VIDIS tokens & clients will be trusted :
- [Vitalink][Vitalink] & their Apigee service – Contact: vitalink-support@smals.be
- [Farmaflux][Farmaflux] – Contact: vidis@farmaflux.be
⚠️ IE (internet explorer) is not supported. You can include [polyfill scripts ("polyfills")](https://www.webcomponents.org/polyfills) for the browsers that you must support.
## Features
The diary notes web component allows patients and caregivers to keep detailed, organized records of health-related events, changes, or observations, which can be crucial for ongoing treatment or communication with healthcare providers.
### List of diary notes
The main view displays a list of all diary notes that have been created by the patient or caregiver. For each entry, the following key information is shown:
- **Author:** The person who wrote the note (e.g., patient, caregiver, or healthcare provider).
- **Creation Date:** The date and time when the note was created.
- **Summary of the Note:** A brief preview or summary of the note’s content, allowing users to quickly assess the subject matter of each entry without opening the full note.
### Note management
- **Delete Notes:** Users can delete notes that are no longer needed or relevant, helping to keep the diary organized and clutter-free.
- **Filtering:** The component allows users to filter notes based on specific criteria, such as:
- **Period:** Filter notes by date range, helping users review notes from a particular timeframe (e.g., last week, last month).
- **Author:** Users can filter notes by the author, enabling them to view entries made by a specific person (e.g., only the patient’s notes or caregiver’s notes).
- **Roles:** Filter by roles (e.g., caregiver, patient, healthcare provider) to distinguish the perspective of different authors.
- **Sorting:** Notes can be sorted by different parameters, such as creation date or author, giving users more control over how they view the list.
- **Adding a Note:**
- **Text-only Notes:** Users can add new diary notes by simply typing in text.
- **Notes with Attachments:** Users can also add attachments to their notes, allowing for richer documentation (e.g., photos, reports, or scanned documents).
⚠️ **Attachment Restrictions:** Attachments have size limitations (e.g., maximum file size) and format restrictions (e.g., PDF, JPG, PNG) as explained by safes cookbook document.
## Inputs
| Name | Mandatory | Possible values | Description |
|-----------------------------|-----------|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `language` | true | `en`, `de`, `fr`, `nl` | The language holds the current language as a value, which means it can change over time if the user changes his/her preferred language. The web component adapts the translations based on the value set. The values of the language property are defined in the Language enum. |
| `configName` | true | `acc`, `prod` | Name of the configuration the application and the components are being deployed to. |
| `services` | true | N/A | Set of services to be consumed by the component. see [USAGE](#Usage). |
| `professional` | true | `true`, `false` | Indicates whether the component is being used in a professional context. If set to `true`, the `ssin` input must be provided and will be used to identify the patient. If `false`, the SSIN will be retrieved automatically from the authentication token. |
| `ssin` | true | N/A | The patient's SSIN. When `professional` is `false`, this value is ignored and the SSIN is extracted from the authentication token. |
| `offlineDataStorageEnabled` | true | `true`, `false` | A boolean flag indicating whether offline data storage has been enabled by the user. When true, the web component can store and retrieve data locally for offline access. |
| `isOfflineAuthenticated` | true | `true`, `false` | A boolean flag indicating whether the web component is being accessed from an offline state. |
| `exchangeClientId` | false | N/A | The client id used for the token exchange |
## Outputs
| Name | Type | Description |
|-----------------|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
| `getTotalItems` | number | Gets the number of total diary notes |
| `onDownload` | { fileName: string; content: Blob; mimeType: string } | Download event diary note attachment |
| `onError` | {reported: boolean} | Emitted after the error dialog closes. reported is true if the user confirmed reporting the error; otherwise false. |
## Usage
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vidis diary notes web component</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="vidis-diarynote/diarynote.js"></script>
<link rel="stylesheet" href="vidis-diarynote/diarynote.css">
</head>
<body>
<script>
const wc = document.createElement("vidis-diarynote");
// Common inputs for all VIDIS web components
// Refer to https://www.npmjs.com/package/@smals-belgium/myhealth-wc-integration for more details
wc.language = 'en'
wc.configName = 'acc';
wc.services = {
cache: {
get: (key) => (undefined),
set: (key, value) => {
},
remove: (key) => {
}
},
getAccessToken: async (audience) => "TODO : the eHealth OAuth2 JWT token.",
registerRefreshCallback: () => {
}
}
// Example on how to provide extra input parameter(s), if needed / requested by the component
// wc["attributeName"] = "myValue"
// Example on how to listen to output parameter(s)
wc.addEventListener("eventName", (event) => {
console.log(`event:`, event)
const params = event.detail;
console.log('param:', params);
})
// Example on how to listen to output parameter(s), for printing
wc.addEventListener("onPrint", (event) => {
console.log(`event:`, event)
const params = event.detail;
console.log('param:', params);
const byteArray = new Uint8Array(atob(params.content).split('').map(char => char.charCodeAt(0)))
const blob = new Blob([byteArray], {type: 'application/pdf'})
const url = window.URL.createObjectURL(blob)
window.open(url, '_blank').print()
})
document.body.append(wc);
</script>
</body>
</html>
```
## Versioning
This project follows [Semantic Versioning][Semver]. Each release is categorized by major, minor, and patch updates. Significant changes that may break existing integrations will be introduced with major versions. Please check [CHANGELOG.md](CHANGELOG.md) file for more info.
## Accessibility
We are committed to making our web components accessible to all users. Our components are:
- Screen reader friendly : Designed to work well with popular screen readers (Talkback / VoiceOver / ...)
- Responsive : Adapt to various screen sizes (desktop / mobile).
- Compliant: Meet [accessibility criteria][OFAC], including ARIA labels and keyboard navigation
## Customizations
The web components are build with [Angular Material][Angular Material]. The styling of it is overwritten by the “My Health” portal, by there [design kit][MHDK].
## Troubleshoots
If you encounter issues while using the web components :
- Ensure that your token is valid and hasn't expired. For assistance, contact [eHealth][eHealth IAM].
- Ensure you are using the latest version of the web components
- Ensure you are using a supported browser and that you have cleared your cache if issues persist.
- Ensure your organization, browser or device don't block calls to VIDIS API by any way.
- If none of the above, please contact mijngeneesmiddelen@riziv-inami.fgov.be / mesmedicaments@riziv-inami.fgov.be
## License
[GNU Lesser General Public License v3.0 or later](https://spdx.org/licenses/LGPL-3.0-or-later.html)
[Recip-e]: https://recip-e.be/
[Vitalink]: https://www.vitalink.be/
[RSW]: https://www.reseausantewallon.be/
[RSB]: https://brusselshealthnetwork.be/
[Farmaflux]: https://www.farmaflux.be/
[Web component explanations]: https://www.webcomponents.org/introduction
[eHealth IAM]:https://www.ehealth.fgov.be/ehealthplatform/nl/service-i.am-identity-access-management
[MHDK]: https://www.npmjs.com/package/@myhealth-belgium/design-kit
[Angular Material]: https://material.angular.io/
[OFAC]: https://openfed.github.io/AccessibilityCheck/
[Semver]: https://docs.npmjs.com/about-semantic-versioning
[MHWCI]: https://www.npmjs.com/package/@myhealth-belgium/webcomponent-integration
[Supported browsers]: https://www.ehealth.fgov.be/nl/page/hoe-toegang-krijgen-tot-applicaties