Archive: TAC Notes 2019-2022
Directory
- 1 Meeting Notes
- 1.1 2022-12
- 1.2 2022-10
- 1.3 2022-09
- 1.4 2022-08
- 1.5 2022-07
- 1.6 2022-06
- 1.7 2022-05
- 1.8 2022-04
- 1.9 2022-03
- 1.10 2022-02
- 1.11 2022-01
- 1.12 2021-12
- 1.13 2021-11
- 1.14 2021-10
- 1.15 2021-09
- 1.16 2021-08
- 1.17 2021-07
- 1.18 2021-06
- 1.19 2021-05
- 1.20 2021-04
- 1.21 2021-03
- 1.22 2021-02
- 1.23 2021-01
- 1.24 2020 Meeting Notes
- 1.25 2019 Meeting Notes
Meeting Notes
Goal of this meeting: Review technical/platform/product decisions; response to issues coming up from community and help set/endorse clear technical direction.
Zoom link: https://om.rs/zoomtac
2022-12
2022-12-12 - Jen presenting on Dev Stages & how TAC can help with review process, so we can give more recognition to members
2022-10
2022-10-24 - Cancelled
Attendees: Daniel, Burke, Mike
2022-10-17
Attendees: Grace, Burke, Mark G, Mike S, Daniel, Ian, Eudson
Recording:
Formally confirm the backporting policy for Platform as described here. Example context: Fix for this is really affecting O3 code; but if it's not backported, then the same code that runs against 2.5 won't work against 2.4. Support = continuing to care for the code.
Agreement in principle. Something like “The OpenMRS Community strives to support the last 3 releases. Support for older releases is handled on an ad-hoc basis.”
But: Does not mean every change is being backported. eg. someone making a commit for 2.5 because their org needs it, shouldn't be forced to also backport to other last 2 versions.
Criteria for "Need to Backport":
Priority Security Fixes & Major Bugs
"Consider to Backport - but not required"
If people you flagged who may be affected express clear reasons for needing a backport to up to 3 versions back
Case-by-Case Discussion: An API endpoint or behavior update that could have an impact (API changes should be backported only when necessary because they're breaking changes; but also, improvements to API are reasonable to simply add to the latest/current release)
When you want people running older versions to be able to use your code
Not about the anonymous downloader - because we need to be realistic.
5-Whys Retrospective on how this drug-order bug was missed until now, and how we can improve accordingly.
Why was this not caught for 2 yrs?
Not used in production, not iterated on until recently
Bug wasn't visible because ordering was broken/blocked in demo until recently
Not enough quality demo metadata (drug metadata not possible to connect well until recently)
Why does this seem "ready" when it's not? (i.e. it's a 0.0.1 release but seems like a 1.x, ready to consume)
Bundled into monorepo with more ready stuff
Why were the requirements not clear?
Not clearly documented
Ownership role over feature was not maintained
Meds should be treated as a special, don't-mess-up case.
Why not given more attention over time, no one "owning" the quality of it?
No clear, regularly done O3 release process.
Why did `${strengthQuantity * doseNumber} ${strengthUnits}` seem like a reasonable formula?
Quantity vs Dose vs Strength are confusing to people.
strengthValue and doseValue would probably be more clear as objects.
Agree on vision and next steps for the O3 Release process and “Quality Gates” (see diagram & discussion here).
2 key takeaways:
@next makes sense as the esm-version-source for dev3, but @latest makes most sense for o3, not test3, because marking an esm with @latest implies to the whole world on npm that the app is stable / ready for the real world. And this is not necessarily true for all stuff in test3.
I’d like devs to indicate “I have tested X feature in dev3 and it works as expected” somehow - maybe through a label of some kind? Then test3 could pull in those specific updates; things that are basically halfway between @next and @latest.
2022-09
2022-09-19
Reviewing core apps, UI commons, and appointment scheduling build issues
Multifactor authentication support
Dispensing updates
2022-09-12
Deployment process
Dockerizing QA builds would be a big help
Unable to publish to SourceForge
Build issues – Bamboo agent issues
yu issues
Having some issues with terraform process
Builds running out of disk space
Ian disabled a misbehaving job (2.x RefApp E2E tests not cleaning up after themselves)
Issues with Dispensing
Probably want to avoid tackling multiple tabs in MVP and focus on one or two filters: (1) prescriptions that need to be processed (e.g., today's prescriptions) and (2) completed.
Avoid showing all prescriptions by default (list will be WAY too long)
Other filters (e.g., RETURN) still need to be defined
Status is more about dispensing status than order status.
JIRA Graveyard quarterly cleanup
Will be transitioning issues according to OpenMRS Jira Clean Up Protocol (aka "Quarterly Graveyarding")
2022-08
2022-08-08
Possible topic: Provider Messaging
2022-08-01
DevOps skills – do we need dedicated effort?
Overlaps with CI/CD, tooling for QA, etc.
It might help to recognize this as a separate discipline
Similar to QA, in having leadership to help wake up thinking about the discipline for the community, bringing the expertise and helping lead the big tasks, and raise devops awareness & skills amongst community devs
Announcement
What would you like to learn, show, & tell during the conference?
2022-07
2022-07-25
Computed observations
UCSF is using stored procedures to compute observations
Storing all computed observations in a "computed" encounter
Issues
When is a computed observation recomputed?
TTL
Dependent values change
Tracking dependencies across observations
Definition should include all dependencies
Would like to get away from building our own BRMS (business rule management system)
2022-07-18
Discussion Board (real-time messaging) feature (Slide deck)
Requirements
Search and add users to a discussion
See who is online
Send notifications to participants
Ability to remove participants
Ability to add files/attachments
Challenge
Using web sockets via Spring WebSocket API and STOMP messaging protocol, but running into issues
2022-06
2022-06-06
Leveraging drug formulary for drug orders widget
"As far as the opportunity to make urgent progress with UCSF and drug ordering for OpenMRS 3.x, any work to pull drug formulation information from the drug table (instead of frontend JSON config files) would be a step in the right direction." -talk
Adding "category" to forms (tags?)
Use case is to be able to limit a list of forms (or default) based on categorization (label/tag) of forms.
Why use tags instead of configuring an explicit list of forms (e.g., within configuration)?
A single UI element needing a specific list would favor configuration; whereas, if there are multiple UI elements or areas of the application that want the same grouping of forms, tagging might be more appropriate.
If there are context-specific needs, then a backend (tagging) solution might be preferable.
Would it be more appropriate to associate forms with programs? Are tags actually a workaround for the lack of relationships between forms and other resources (e.g., programs)?
A program may still have 50+ forms and being able to group forms in smaller groups would be useful (which would favor tagging)
Distinction between categories & tags?
Categories would be a pre-defined set of "buckets" and forms could be placed in one or more buckets
Tags would be a "folksonomy" where removing the last use of a tag would remove the tag
Next steps?
@Ian Bacher will make some tickets for this
Feedback of deployment (experience from @Grace Potma's recent travel
"I wish we could have just grabbed OpenMRS as a Docker image."
"Is it possible to deploy KenyaEMR and whatever system together so they could deployed at once" ... "Yes, we're exploring Docker for this."
"Your 3C approach makes sense, but could you add 'D' for deployment? It would help if Docker was included to make deployment easier."
Ability to jump from form into patient chart
Use case: when using a form with a lot of data, we'd like to be able to show the data in the patient's chart and then take you to that relevant part of the patient's chart while completing a form. For example, while form is being edited in the right panel, being able to click on something to navigate the patient's chart (left side of the screen) to specific data within the patient's chart (i.e., navigate the patient's chart without having to leave the form). In a tablet view, this might mean providing a way to get back to the form.
Design for notifications/alerts and how will they be supported
Not enough time to discuss today, but we should think about how we will support Ciarán's designed for notifications on the backend
2022-05
2022-05-23
How to handle needs for data migration - OpenMRS Talk
For Ethiopia, they have data in FHIR format for >100 resources and only ~30 are currently supported by the OpenMRS FHIR module
Current goal is to migrate to OpenMRS database
While OpenMRS is strategically aiming to migrate toward full FHIR support, adding new resources (e.g., MedicationDispense) is non-trivial and includes the need for new Platform releases.
What is driving the data migration? Reporting vs. clinical use?
Primary driver is to have MVP containing existing data and for clinical use.
Could focus on how could each resource be represented in OpenMRS and focus on how to migrate existing data into OpenMRS model
Enumerate each piece of data and how it would be represented in OpenMRS
Manually migrate those that have a clear equivalent in OpenMRS
Focus on alternatives for those that are not currently handled by OpenMRS (e.g., Care Plan)
Example of PIH migration code
Emergency Department stuff (a little bit)
Sync-something becomes a core part of platform
@Grace Potma will be posting to Talk soon about this
2022-04
2022-04-25
Inpatient vs outpatient care
Care Settings will need design
Ideally would allow for bed management to be coordinated with external systems (e.g., ERP)
Look at Bahmni for successes in inpatient setting and learn from workflows
Could start with simple bed management
Bed management module provides backend support for bed management metadata/configuration
Bahmni contains features that leverage bed management to provide inpatient features
Are there near-term implementation needs for inpatient?
Steven Wanyee shared that IntelliSoft has three cases that could use inpatient support (e.g., work in Botswana is beginning as outpatient, but will have inpatient needs soon)
Mekom has some work in late 2022 or in 2023 that could use inpatient features
MAR - Medication Administration Record
There's some demand for this feature
Update on Reporting & Analytics
Mike & Burke have been using Analytics Engine Squad calls to work through a way forward
We've divided the problem into four areas: (1) Change Data Capture (CDC), (2) ETL, (3) Data storage, and (4) Reporting & Analytics tools. Each of these areas has a variety of options in tooling.
We'd like to see if we can align community efforts/energy around a shared approach to CDC.
Reference ranges
OpenMRS historically has defined reference ranges within a concept; however, ranges vary by context, patient demographics, etc.
LIVD (within the SHIELD project) on lab interoperability is debating where knowledge of references ranges should be – with the concept vs. with the result.
Would want to align with these kinds of efforts
2022-04-18
2022-04-11
We discussed and tried to provide answers/decisions for @Mike Seaton and his work on dispensing
@Ian Bacher and @Daniel Kayiwa will update the GSoC 2023: Improving the OpenMRS Developer Experience: Updating the SDK page (and rename to something like "Improving the OpenMRS Developer experience through improvements to the SDK"
Handling units within the FHIR (fhir2) module
2022-04-04
Backend support for draft forms/encounters
How/where should draft forms be persisted?
In a draft table, linked to patient/encounter
Should we allow draft of anything?
Probably better to handle separately as a approach for persisting application state
How long are drafts persisted?
Forever?
If we can distinguish between draft and voided draft, then business rules can drive it.
Need to include last updated time.
Who can access drafts? Can they be shared?
Permissions can be applied on top of draft feature as long as we know who created the draft.
Making forms uneditable is a separate issue.
Would use permissions to control this
Design ideas
Form content
Link to encounter? We wouldn't have encounter in common use case (not created until form validated/submitted/saved).
User
Date updated
Patient
2022-03
2022-03-28
Modeling for Drug Orders in 3.x (Formulary vs Prescription vs ?)
Example
Concept: amoxicillin
Drug: amoxicillin 500 mg tablet
Order template: amoxicillin (500 mg or 1000 mg) (orally or per gastric tube) (two or three times daily)
Order set: (1) amoxicillin 500 mg orally three times daily, (2) amoxicillin 1000 mg orally three times daily
Formulary informing vs enforcing orders
Formulation chosen by ordering provider or by pharmacist
Draft encounters (saving them in the backend)
Would love to have these. Needs design work.
Any synergies with ICRC project?
Patient search? Quick forms?
Viewing tables of data?
2022-03-21
Continue walking through steps involved in adding OHRI package to OpenMRS 3.0
Handling concepts from multiple packages
Happy path would be union of concepts, using UUID for equivalency
Continue discussion on Community Forms Schema
Notes from 2022-03-17 discussion here
2022-03-14
Dispensing modelling (Medication Dispense wiki page)
Core vs module? Core (or core module)
Continue walking through steps involved in adding OHRI package to OpenMRS 3.0
Handling concepts from multiple packages
Happy path would be union of concepts, using UUID for equivalency
2022-02
2022-02-21
Cancelled for OpenMRS Holiday
2022-02-14
Attendees: Burke (OMRS), Mike (PIH), Mark (PIH), Namanya, Daniel (OMRS), Grace (OMRS), Romain (Mekom), Tendo (Vol), Zak (Mekom), Ian (Brown)
Mentally walking through adding a “package” with an ESM, module, and concept to OMRS 3. What are the steps we expect to happen?
We walked through build process
Would like to improve build process of frontend so we don't have to re-download assets each time we assemble the frontend and so we can deploy frontend in different locations without having to re-assemble the frontend (preferably without having to search & replace variables within index.html)
2022-02-07 - recording
Continuing the discussion on OpenMRS Packaging conventions (Draft Schema for Packaging)
"A package is a definition of what artifacts are that make it up" -Mike Seaton
What string format convention do we use when referring to an asset (ESM, omod, metadata, etc.)?
Can take existing conventions and document them (e.g., what we're doing in distro.properties)
Which versioning format do we use? Are there libraries for this?
Prefer to adopt a well-established convention instead of our own custom syntax
Look for library to convert between npm <=> maven
For modules, do we organize by asset type (omod, esm) or build tool (maven, npm)?
Defer
Mentally walking through a simple build process. What are the steps we expect to happen?
Ability to refer to config or metadata by URL in properties file
Do frontend modules declare what backend modules they depend upon? If not, we'll want a convention for this. Can we add these data to packages.json?
Mike would like to have distro.properties that refers only to versioned artifacts (e.g., in maven). So, we would list all ESMs; rather, we would refer to a pre-built frontend artifact that contains the built artifact.
This may be a fundamental difference between distro & package definitions: distro refers to built artifacts, while a package definition will need to refer to ESM source.
PIH uses a pom.xml like this to generate a frontend artifact (turning a definition like this into a maven artifact like this), so changes to non-frontend parts of the distro (e.g., bumping an omod version) doesn't require re-building the frontend.
2022-01
2022-01-31
Attendees: Burke (OMRS), Allan (Ampath), Amos (UCSF), Daniel (OMRS), Emmanuel (Mekom), Eudson (UCSF), Grace (OMRS), Ian (Brown), JJ (Ampath), Juliet, Lars (UCSF), Mark (PIH), Michael (PIH), Jonathan Odora, Romain (Mekom), Stephen (UCSF), Tendo
Agenda: Reporting Strategy
We would like approach(es) that leverage existing tools to provide a standalone solution for reporting/analytics that can be scaled, when needed, to separate server(s) or into the cloud:
We want to focus on the four areas of (1) change data capture, (2) transform, (3) data store, and (4) reporting/analytics and want to keep in mind that a primary consumer of analytics will be the EMR itself:
CDC (Change Data Capture) solution
Debezium
Debezium is lightweight, but requires Java for integration into pipeline, listening to log files and manually marking changes.
Haven't tested with large dataset.
Kafka/Connect behind Debezium
Kafka with Zookeeper & Kafka/Connect doesn't require programming, but needs lots of RAM (8GB+)
Newer Kafka (3.0.0) may not need Zookeeper
Debezium and Camel
Still need to write some code to listen to changes, but not as much
Data processing
SQL
FHIR data store
Spark
Can use SQL or Python. Also supports R, Java, and Scala. SQL is probably most widely known in our community.
Flink
Can use SQL. Relatively simple to use.
Has its own optimizer engine for queries.
Flink/CDC is a wrapper around debezium, but may not configure debezium optimally.
Requires Zookeeper (but this might change in the future). We'd need to figure out how to configure to avoid needing lots of RAM.
Can run as application mode (as a single jar without clustering)
Data store
Cassandra
Dependent on proper partitioning.
Frequent writes (e.g., CDC) might slow down reads.
Parquet
Much more efficient than CSVs