Skip to content

CQL Committers Meetings ‐ 2024

Paul den Boer edited this page Oct 17, 2024 · 74 revisions

These are the public CQL committers meeting notes for 2024.

(most recent notes at the top, template available at the bottom)

2024‐10-17 - Complete Choice Type serialization, Performance running Libraries

Attendees: {Modify as Needed} Paul, Evan, Ewout, Rich

Notes:

1. Standup
1.1. Work done last week
Paul - Cql Tuple Type serialization, and fix AssemblyLoadContext.Run (and add unit tests)
Paul - Spike started on Cql Choice Types
Ewout - (Non cql) Focus on Firely .NET SDK 6.0 to improve Date Parsing performance (FhirTypeConverter LRUCache might not be needed in the future)
Rich - (Non cql) Getting GUI around Firely Server for posting and visualizing requests/responses
Evan - Design improved model API and how to improve defining cql types for cql-to-elm. 

1.2 Blockers

1.3 Work planned next week

2. Planned Topics
2.1. Paul/Ewout - Assist Rich next week
2.2. Paul on leave from 24 oct until 14 nov
2.3. Paul to get assistance from Ishan on fixing cms measures
2.4. Performance - Libraries (some singletons/and others not). Discussion

3. Open Forum

2024‐09-26 - Choice Types

Attendees: {Modify as Needed} Paul, Evan, Ewout, Rich

Notes:

1. Standup
1.1. Work done last week
Paul - A lot of work on the VONK CQL Plugin
Paul - Unplanned request from Rene who would wanted to do a cql presentation. However, choice types are not full supported yet
  - [Bug on handling conversion from a choice type](https://github.com/FirelyTeam/firely-cql-sdk/issues/570)

1.2 Blockers

1.3 Work planned next week

2. Planned Topics
2.1. {Add topics here}

3. Open Forum

2024‐09-12 - Service Hosting

Attendees: Paul, Evan, Ewout, Rich

Notes:

1. Standup
1.1. Work done last week
Ewout - Make Retrieve take RetrieveParameters
Ewout - Trying to fix ChangeType between Interval<T> to Interval<object>. Centralize conversions more.
   Evan: Suggest to make all types of T that can be intervaled some kind of empty interface e.g. IIntervalable?
   Paul: Suggest Result type for methods that can either return a valid value or an error. e.g. ChangeType, TypeFor etc. (these take an extra param throwError which should be removed) SeeL https://github.com/FirelyTeam/firely-cql-sdk/issues/578
   Evan: SignatureMapResult which can give detailed info about the change type.
Paul - Hosting --> Services refactoring. Service + Options Building. We still need to add better support for getting options from IConfiguration.
   Paul: Many PR's needs reviewing
Rich - Testing

1.2 Blockers
Evan - https://github.com/FirelyTeam/firely-cql-sdk/issues/513

1.3 Work planned next week

2. Planned Topics
2.1. {Add topics here}

3. Open Forum
* We need to come up with plan and design for a public API in meeting soon. 
  Evan: Come up with some use cases
  Rich: Will come up with a plan before Monday. 
    Difficult to schedule time together. First meeting Monday 23.
    Create a Git repo with a demo. And add ideas in there as well.
* Paul/Evan: Going to be in Alpha stage for some time
  Paul: Need automated nightly builds from develop-2.0 -> main. These run larger integration tests. TODO: Get Devops
  Evan: Will need dedicated build server, because current implementation will time out after a long build.

## 2024‐09-05 - {Short Description}

**Attendees:** {Modify as Needed} [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Notes:**

  1. Standup 1.1. Work done last week Paul - HEDIS cql compilers, some unit tests failing, working on it (ICqlOperators.Equivalence should keep bool? return type) Ewout - Fixed forward refs branch 4. Some new issues created. New signature for Retrieve. Needs contextid as parameter too. Evan - Helping ncqa team get up to speed with cql. Model cql in terms of itself.

1.2 Blockers

1.3 Work planned next week

  1. Planned Topics 2.1. Should be included for September WGM (see links below) 2.2. Build Process in local Development
  • Build configurations for
    • No packager targets
    • Complete packager targets cql --> elm --> c#
    • Maybe exclude resources, since they are not checked into the repo?
  1. Open Forum Pre-processor on elm for "as" conversions needed. Eventually fixing in model or fhirhelpers Consider making DefinitionDictionary internal, since we do not want to allow the generated linq to be directly executed (it misses the value tuples and pre-processors when generating c#)
Should be discussed for September WGM

- [368](https://github.com/FirelyTeam/firely-cql-sdk/issues/368)
- [82](https://github.com/FirelyTeam/firely-cql-sdk/issues/82)
- [438](https://github.com/FirelyTeam/firely-cql-sdk/issues/438)
- [499](https://github.com/FirelyTeam/firely-cql-sdk/issues/499)


## 2024‐08-29 - Final Sprint before September 2024 WGM

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Notes:**

  1. Standup 1.1. Work done last week Paul - Split build cql to elm into separate build configuration Paul - Fix 477 - A Library resource should have cqlOptions extension which references the contained Parameters resource Paul - Fix 56 - Check that Age/AgeAt is implemented and added tests Paul - Fix 495 - Fix safe casting from Base to Derived type (fix HEDIS C#) Paul - Fix 489 - Fix equivalence between CQL Concept Rich - Introduce HEDIS Submodule, should be included to build elm to c# on every build Evan - Fix 466 - Conversion mapping updated Evan - Expression Builder Forward References on 4th branch Evan - Fix edge cases for variable naming (e.g using reserved c# keyword as variable) Evan - Build tool testing Ewout - Reviewing 4th branch for Expression Builder Forward References PR 397 Ewout - Choice types currently represented by object type, fix by adding cast from object to parameter type. (Potentially use the ChangeType method with the new safeUpcastAllowed parameter in PR 496) Ewout - Function signatures not always available. Discussed pre-processor and that some previous expression building code could become redundant.

1.2 Blockers

1.3 Work planned next week

  1. Planned Topics 2.1. Prioritizing remaining work 2.2. Ewout - Expression Builder Forward References - branch 3 and 4 - Still work in progress 2.3. Kudos from Ewout - Communication of Slack sufficient when a team member goes away on holiday to catch up :)

  2. Open Forum Rich - to create tickets on the board for HEDIS testing


## 2024‐08-22 - Fix Forward References, Testing in Build Pipeline

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Rich](https://github.com/richfirely)

**Links used in Notes:**
* [PR 468 - 397 fix forward references in expressionbuilder 3](https://github.com/FirelyTeam/firely-cql-sdk/pull/468)
* [Bug 477 - Missing cqlOptions extension in the generated Library resource](https://github.com/FirelyTeam/firely-cql-sdk/issues/477)
* [Bug 459 - Fix build targets for cql -> elm and elm -> c#](https://github.com/FirelyTeam/firely-cql-sdk/issues/459)
* [New Wiki Page - Creating Tags and Releases](https://github.com/FirelyTeam/firely-cql-sdk/wiki/Creating-Tags-and-Releases)

**Notes:**

  1. Standup 1.1. Work done last week
  • Paul - Released CQL SDK 2.0.1-alpha but new bug #477 found (linked above)
  • Paul - Added wiki page on creating tags and releases (linked above)
  • Paul - Added Ewout's previous work in PR #468 (linked above)
  • Paul - Split the cql->elm and elm->c# across different build configurations and updated documentation in Bug #459

1.2 Blockers

1.3 Work planned next week

  • Evan
    • Continue work on PR #468 on another branch/PR
  • Paul
    • Fix Bug #477
    • Release 2.0.2-alpha and test in Firely Server
  1. Planned Topics
  • History of the three 397 branches
  • Addressing not enough unit tests (and demo projects in build pipeline)
  • Worth having .slnf files in the repo, or should they be removed?
  1. Open Forum
  • FHIRHelpers not working on 397-3 branch. ResultTypeSpecifier not fixed properly in ElmPreProcessor. Not finding issue Where string -> Convert to FhirUri -> FhirHelpers.ToString(FhirUri)
  • Isolate 397-4 from the current PR and wait for Ewout to return to look at 397-3
  • Build Pipeline beyond September
    • Integration Build Pipeline should have Java / C# Tooling in a non-blocking manner
    • QICore model translation issues
  • ELM is expected to always be including CQL in public
  • For Visual Studio template, the ELM, and possibly the generated C# must go to an obj folder
  • Focus on fixing QICore
  • Talk around the dev experience on the cql sdk repo - currently very cumbersome , especially there are private testing repos involved (HEDIS & CMS). Maybe in the future have standard measures that must be compilable instead of the private ones. Eventually breaking tests in private repo must become a public unit test.

## 2024‐08-15 - Integration Test Running

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak)

**Notes:**

  1. Standup 1.1. Work done last week Paul - Integration Runner in build pipeline Rich - Checked Java Tooling upgrade, but caused issues with our code, will get back to this after September release

1.2 Blockers

1.3 Work planned next week Paul - Release another alpha release for version 2.0 so Firely Server can use it

  1. Planned Topics 2.1. Paul - Integration Tests Running

  2. Open Forum


## 2024‐08-08 - Submodules, Demo project workflow

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Rich](https://github.com/richfirely)

**Notes:**

  1. Standup 1.1. Work done last week Paul - Submodules Paul - Get demo projects to build Evan - Visual Studio CQL Project support - Only needed to include a Nuget package with a props file with targets

1.2 Blockers none

1.3 Work planned next week Paul - Update DateTime offset bug Evan - Visual Studio CQL Project support - Only needed to include a Nuget package with a props file with targets

  1. Planned Topics 2.1. One issue per PR 2.2. Submodules feedback
  • Paul introduced a submodule in issue #440. The latest Visual Studio automatically clones the submodule after the main repo is cloned. (Just give it a few seconds) 2.3. PR Approval workflow
  • Manually rebuild demo projects until we can split the stages (cql-elm and elm-c#) 2.4. Java Tooling needed in build pipeline
  • Suggested to keep the ELM in the repo, so Java Tooling not needed (LibrarySets\xx\Elm*.json)
  • Only when the Java ELM tooling version is updated, will there be a manual PR to regenerate the ELM
  • Need new build configurations in the project to select cql-to-elm and elm-to-csharp or both
  • No need for Docker build anymore
  1. Open Forum
  • Look if Java tooling can be upgraded to 3.11 (Create issue @Rich)
  • Evan - Need vsix for code syntax highlighting (free/paid?) will discuss when picking up
  • Focus on functional features / bugs and leave devops tasks for now
  • Reordered and reprioritized some of the backlog items

************************************************************************

## 2024‐08-01 - Value Tuples, Integration Tests 

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Agenda:**
1. Standup
    1. Work done last week
    2. Blockers
    3. Work planned next week
2. Planned Topics
    1. Moving the Integration Test Runner from its own private repo to the CQL SDK repo.<br>
       Reasons: Easier to debug; saves time during development<br>
       Sub Modules?
    1. Dealing with the xxxSpecified fields
3. Open Forum

**Notes:**

  1. Standup 1.1. Work Done Last Week Paul: Investigated which PR caused integration test pass rate to decrease Rich: - Ewout: Fixed forward function reference in ExpressionBuilderContext. Extensible pre-processor has significant benefits to remove duplication from the ExpressionBuilder. Evan: Mindfulness on system type specified. Evan: Showed demo on the Visual Studio CQL Project Template

1.2. Blockers Ewout: The forward function reference PR is awaiting review from Evan Paul: Awaiting fix for json serializer

1.3. Planned Work Next Week

  1. Discussion Topics

2.1. Integration Test Runner Code Investigate git sub modules, and if it is too much work, just copy the repo into cql sdk repo

2.2. Dealing with the xxxSpecified fields Ewout: Some fields for nullables have x and xSpecified in xml, but not in json) So for JSON xSpecified doesnt exist. On JSON Serialization, not serialize if xSpecified is false, but if x is not default, then Debug.Fail("") and Log if possible.


3. Open Discussion

Evan: HEDIS measures agreement must signed between NCQA & Firely (Michelle / Gert-Jan)



************************************************************************

## 2024‐07-25 - Introducing Sprints, HEDIS, Status of Merge, Tuples

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer)

**Notes:**

1. Discussed sharing meeting notes publicly. @Evan suggested moving them to the github wiki page
2. @Ewout introduces the [Sprint board](https://github.com/orgs/FirelyTeam/projects/9) for better collaboration between members and to track work for the September release. Tickets automatically set up to advance the swim lanes based on creating a PR, and merging it.
3. @Evan mentions continued challenges in sharing the HEDIS measures publicly. Some strategies are still running past the legal department (e.g. putting obfuscated measures on a public folder)
4. @Evan mentions the scopes-2.0 branch passes all tests on HEDIS with the new c# cql-to-elm compiler. 
5. @Paul concerned if CMS measures would still be passing after the merge to develop-2.0 branch
6. @All lack of communication and collaboration addressed. Duplicate work was done on merging. Agreed to only work on issues on the current sprint board. 
7. @Paul discusses work on the new C# value tuples. With time being a constraint, advises to only support explicit types when generating C#, and introducing outputting var again after the September release

**Action Items:**
- [x] @Paul to move meetings from the private Firely Confluence server to this GitHub wiki, and then link back to the wiki
- [ ] @Evan to run the obfuscated access to HEDIS past legal dept.
- [x] @Paul create ticket to support vars (see #429)

************************************************************************

## 2024‐07-11 - 1.0/2.0 Merging Progress, CMS Measures, Unit Test Duplication, Plan September Release

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Notes:**

1. Merging Progress
* Discussed the progress of the merging from develop/cql-to-elm/develop-2.0
* Evan still working on a separate branch, but wont hold up merging

2. CMS Measures Integration Failing Tests 
* CMS Measures test results differ because original authors uses the mitre engine. 
* Need to go through case by case and discuss on Zulip.

3. Unit Tests
* Unit tests have some duplication between the xml and c# tests
* Difficult to debug the xml-based ones

4. Bug - List of ValueSet flattening
* Flattening a List of ValueSet somehow becomes a List of Code

Flatten({ "value set", "value set 2"} define function f(codes List)


5. Tuple Types
* Discussed issues with current tuple implementation

6. CQL Lab
* CQL Lab is no longer available online
* See if possible to get the source code for CQLLab from the develor that worked for Evan

7. September Release
* Fix HEDIS on 2.0 (1.0 already supported it)
* eCQM Support
* Fix tuples

**Action Items:**

* @Paul make sure the teh xml tests are removed from the core tests because they are in the cqltoelmtests too
* @Rich has a way to extract and run the cql from the xml files. Also we need to run these tests through cql-to-elm on c# and java tooling. Discuss in a meeting
* @Evan to review Pauls' mega PR for merging into develop-2.0, then merge cql-to-elm into scopes branch, then merge scopes branch into develop-2.0
* @Evan to continie work on scopes
* @Evan to port HEDIS tests to develop-2.0


************************************************************************

## 2024‐06-28 - CQL CMS Unit Tests, 2.0 Branching Strategy

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Agenda:**

* Discussion on equality
* Comparison between date ranges with different precisions (e.g a high precision date range returns null when it is inside a lower precision date range)
* TemplateId (Observation-heartrate)
* A strategy for dev-2.0 branch the default, and how to deal with old 1.0 branches
* Core Unit Tests (how was elm compiled before, using the cql-2-elm compiler, some don't compile)
* “as” in cql maps to Convert operator, which fails if no conversion is possible, instead of returning a null

**Standup Notes:**

* Paul: worked on CMS CQL tests. Discovered issues that are listed in todays agenda.
* Evan working on symbol table redesign. Might need help. Ewout will help Evan on the design of the symbol tables + delayed stuff
* Integrating CqlToElm: a) Copy over the CqlToElm project to 2.0 + tests. b) Refactor the tests to work with 2.0. c) Fix broken tests. 
* We can either do this before we migerate to 2.0, or we could just jump to 2.0 and start working there.  We start merge CqlToElm to 2.0 next week.
* Then we will rename the branch to make 2.0 the default (maybe update build pipelines)

**1.0 / 2.0 Branching Strategy:**

* 2.0 has Cross Library queries (Brynn's; implementation only supports cross context definition calls but not function calls)
* Merge from 1.0 into 2.0
* Merge CQL-to-ELM branch into 1.0/2.0?
* Rename develop -> develop-1.0
* Rename develop-2.0 to main and make that the default

**Decisions:**

* The Equals operator should be Equals(T,T) - with one asterix, there is a mapping from T (CqlTypes) to our internal model types (in this case Firely POCOs), so there might be some complexity and casts there, But otherwise, T should be T.
* We should not care about supporting very old versions of Cql2Elm, e.g. check the minimum tool versions we support in the generated ELM.
* Change the IDataRetriever interface to take a Retrieve ELM node instead of passing a subset of the parameters. Then the implementation can implement all fields, like templateID.  Or we create a class that mirrors the ELM node.  To solve the retrieve+templateId, we can then call the validator on the client side and only pass the observations from the bundle that match the profile.
* We need ICqlOperator.TryConvert<T>(object) instead of Convert<T> for “as”
* "is" does a strict type equivalence (no conversions involved), "as" does a subset (for which there are explicit conversion operators....we think). 
* The Equals operator should be Equals(T,T) - with one asterix, there is a mapping from T (CqlTypes) to our internal model types (in this case Firely POCOs), so there might be some complexity and casts there, But otherwise, T should be T.
* DateTime comparisons (specifically the "more specific range with an less specific inner interval") are made very explicitly to our reading of the spec. We should find the spec language that proves that we currently do it wrong, we should change it. Otherwise, we should report to Zulip and start the discussion there.

**Action Items:**

- [x] @Paul Merge 1.0 → 2.0
- [x] @Paul Merge cql-to-elm → 2.0
- [ ] Beyond September: Attempt to change spec for DateTime comparisons (specifically the "more specific range with an less specific inner interval"). Otherwise, we should report to Zulip and start the discussion there.

************************************************************************

## 2024‐04-11 - Memoization, Lazy Loading, SDK Bug, Parquet Serialization

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak)

**Notes:**

1. Memoization of Methods:
  * Discussed whether we should memoize output in generated c# methods.
  * Evan advised against it, citing performance issues due to argument comparisons.
2. Lazy Loading in C# Files:
  * Considered the use of Lazy in C# files.
  * Highlighted that Lazy does not account for changing CQL context.
  * Consensus: Avoid Lazy when memoization is required.
3. Unit Tests and Politics:
  * Getting access to NCQA unit tests are pending - still a sensitive concern
  * Ongoing discussions around resolving this issue.
4. SDK Bug Urgency:
  * Urgent attention requested for an SDK bug.
  * Validator failure related to circular references (e.g., bidirectional links).
  * Immediate action needed to address this issue.
5. Parquet File Serialization vs. JSON for FHIR Resources:
  * Evan explored Parquet file serialization over JSON for FHIR resources.
  * Parquet format offers significant performance advantages.
  * Further investigation required, though not high priority
6. ExpressionBuilder.Lambda in Unit Tests:
  * ExpressionBuilder.Lambda frequently used in unit tests.
  * Suggested dynamically invoking a generated DLL during debugging.
  * Updated issue to explore this alternative.
7. FHIR Resources in Apache Parquet Format:
  * Briefly mentioned the desirability of using [Apache Parquet format](https://en.wikipedia.org/wiki/Apache_Parquet) for FHIR resources.
  * Noted its superior speed compared to JSON.
  * To be explored further.


************************************************************************

## 2024‐03‐28 - Purpose of Committers Meetings

**Attendees:** [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer)

**Notes:**

Need for regular meetings - must be short. 8am EST suitable. Every 2 weeks.

Ideas on library loader, file watcher. Some work done to load libraries in LibrarySet in develop-2.0 branch

Cql to Elm - Aspects - Converter and solving a library

Library resolution by versioning when 4.0.001 = 4.0.1 (need to split by dot and remove leading zeroes) 

Cql to Elm should always emit the result types
Shouldnt have to do type and overload resolution 
Respect signature if it is in the elm file

cql to elm pick same overload

deprecate the ExpressionBuilder.Lambda from the public api. The delegate visitor mutates the expressions and sometimes the delegates produces different outcomes. Also impossible to debug.


************************************************************************
TEMPLATE BELOW (Copy/Paste when creating new meeting note)

## 2024‐{mm-dd} - {Short Description}

**Attendees:** {Modify as Needed} [Paul](https://github.com/baseTwo), [Evan](https://github.com/EvanMachusak), [Ewout](https://github.com/ewoutkramer), [Rich](https://github.com/richfirely)

**Notes:**

  1. Standup 1.1. Work done last week

1.2 Blockers

1.3 Work planned next week

  1. Planned Topics 2.1. {Add topics here}

  2. Open Forum