v1.14 Release
Our April release is a big release and includes capabilities throughout the codebase. We've got brand new capabilities like our Provider System of Record, our new METL Domain Specific Language, our new Rx Data loading wizard and the Extractor Wizard UI, and big improvements to our Claims UI to make it generally available.
New Features and Improvements
Claims UI is generally available
We're excited to make the Claims UI generally available with METL 1.14. Improvements include a vastly faster API to fetch claims, a global search that allows you to find any claim in the database, and much more.
New capabilities include:
- Select which claim statuses to see in your queue
- Different edit capability for each status
- Global search in the top navbar (click the magnifying glass) to search for any claim in the database
- Fixes to the UI to support loading any claim
- Every claim now gets its own URL so it's possible to share links with co-workers
- Transparency data section now displays example data
- A dropdown allows you to view and select current or previous claim statuses
- Visual improvements to the display with insured/patient split, provider sections, and corrected sorting in the line items
- Improvements to the HIPAA view display to show the full name and address
Provider System of Record
It's finally time to make the NPI Registry and PECOS data live in METL. We've had the ability to load these for a while, but documentation has been spotty. We've resolved the documentation gaps and retested the loads. It's now easy to spin up a local provider system of record.
Data sources:
- NPI Registry - All providers that practice medicine in the US must get a National Provider Identifier (NPI). The data in the NPI Registry is expansive, but not always up-to-date since providers aren't required to update it frequently.
- PECOS (Provider Enrollment, Chain, and Ownership). This is the database CMS uses to manage providers who receive Medicare patients. Provider must re-enroll in Medicare annually, so the data in PECOS is often more up-to-date than the data in the NPI Registry
New METL Domain-specific Language
We're excited to announce a new METL DSL that can be used to define rules for provider contracts, accumulators, and much more. The DSL is designed so it can take advantage of any data in the claim as well as many additional pieces of data that can be joined to the claim. We built the METL DSL for contracts, but we'll also be putting it to work in other areas as well. The syntax of the METL DSL looks a lot like a subset of JavaScript so it'll look familiar to most technical people. But, it's designed to be used as a building block system to make it easy to be used by non-technical people as well.
METL DSL supports:
- Lambdas, e.g.
(foo) => foo. - Call expressions, e.g.
foo(bar). - Binary expressions like
foo || barorfoo + bar. - Parenthesized expressions, e.g.
(foo + bar). - Unary expressions, e.g.
!foo,-foo, and+foo. - Some builtins like
true/false/null/undefined - Equality expressions like
foo == barandfoo != barbut not like===and!==. - Numbers and strings, e.g.
"foo"and1.23note that numbers only support integers and basic decimals, e.g. no exponents or hexadecimals. - Builtin functions like:
between(takes 3 inputs, first is the value, second is the lower bound, third is the upper bound) andif(takes 3 inputs, first is the condition, second is taken when true, third is taken when false), andisNumber(checks if a string is a valid number).
- Properties on objects, e.g.
foo.bar - Methods on arrays, currently that is
foo.map((item) => item * 2),foo.filter((item) => item > 5), andfoo.sum(). - The global variable
claimsis the most important and matches anedi837.Claim.
By design, the METL DSL doesn't support local variables, multiline statements, flow control and plenty of other things. It is not designed to be a general purpose programming language. Instead, it is designed primarily to support rules, filtering and other similar types of use cases.
Patient matching improvements
We added some capabilities to the patient matching UI to make it easier to identify the file and the TPA that the file came from.
Extractor UI
The updated Extractor UI Wizard is live. This is a configuration-driven Wizard system which allows us to create and modify Wizards to match the types of data we load. For today, our focus is on Claims, Eligibility and Rx data. The purpose of the Wizard is to make it easy to take an extract from a trading partner and quickly get it loaded to the database.
We've been using the backend features of the wizard for over a year now, so it's been battle-tested and we're excited to bring the UI to production too. For now, the Extractor UI is read-only, but we'll be enabling read-write capability over the next couple of releases.
RX wizard & schema updates
We've now added support for prescription drug data! This includes the database updates, template updates, and a new wizard to support prescription drugs. We anticipate that the 1.15 release will include prescription drug data loading for the first time.
Enterprise tenant deploy capability
Our enterprise clients need the ability to deploy multiple client environments in one database. We added that capability in this release.
Extractor templates
We added some additional features to our extractor input templates. One is that we made it possible to have a CSV column as either a string or an object with additional configuration options. Second, we added a new userFirstMatch option. This is useful for poorly designed data files where the data file repeats the same data in the file more than once.
Before:
optional: [claim_member.member_identification_code]
useFirstMatch: [claim_member.member_identification_code]
csvColumns:
claim_member.member_identification_code: Subscriber_ID
After:
csvColumns:
claim_member.member_identification_code:
name: Subscriber_ID
useFirstMatch: true
optional: true
output1.column2: Value 2 # still works
View improvements
line_item_reporting_view- addedreceive_timeline_item_everything_view- restored the columns that got incorrectly removed in the v1.9 release
Repricing improvements
We continue to add new capabilities to our My Price Health repricing engine for our enterprise clients. New capabilities include:
- ZIP3 fallback
- Rate sheet quantity
- Resolve negative Medicare issue
- Invalid SNF claim error message
- Improve ASC provider check
Testing and Deployment
CI deploy fixes
In v1.13, we added Atlas tests to verify views are all working. Some views run crosstab to translate rows into columns, so they only fail at runtime. But, the lints don't catch any errors if there is no data. So, with this release, we now run Atlas tests during our test and prod deploys to make sure that all of our views work.
Extract/load race condition
We solved a timing issue where extracted data would not load because the new release record hadn't yet been created when csvloader attempted to load.
Testing improvements
We made several internal testing improvements to better validate the code that we release. Most notably is that we're now running unit tests for the web UI as a part of CI.
New openjdk image
The openjdk image we were previously using is no longer available on Docker Hub so we switched to a newer and more supported Docker image.