This is the open-source version of the C2Q Analyzer repository.
To learn more about the architecture of the project, please have a look here. To learn how we keep them in sync, follow the instructions here.
claims-to-quality-analyzer
is intended to calculate claims-based quality measures for providers. The analyzer works as follows:
- Read provider data and filter on quality codes
- For each of 74 claims-based quality measures and for each provider, filter to relevant claims.
- Calculate measures and aggregate for each provider.
- Resulting measurements are submitted to the QPP Submissions API.
audit
: contains scripts relating to verification of measure processing.bin
: contains scripts employed during setup of the C2Q system.claims_to_quality
: contains the bulk of the source code. Broken down into the following three components:analyzer
: calculating the quality measureslib
: shared resources
data
: contains data sources used for analysis and exploration.tests
: contains automated unit tests.
We use Docker for easier collaboration and deployment. If you don't already have Docker installed, install it here.
Several entries exist in the makefile for running tests. Use make local-test
to run the full test suite and linters locally.
You can simply start the app following the instructions below.
make local-analyzer
To detach from a running container which you are attached to:
ctrl + p, ctrl + q - hold ctrl in between.
A secrets pattern file hubzone-poirot-patterns.txt
is included with the app to assist with running Poirot to scan commit history for secrets.
It is important to run Poirot locally and not through docker-compose, to make sure that you are looking at all the files in the repo.
It is recommended to run this on the current branch only:
poirot --patterns c2q-poirot-patterns.txt --revlist="develop^..HEAD"
Poirot will return an error status if it finds any secrets in the commit history between HEAD
and develop. You can correct these by: removing the secrets and squashing commits or by using something like BFG.
Note that Poirot is hardcoded to run in case-insensitive mode and uses two different regex engines (git log --grep
and a 3rd-party Python regex library https://pypi.python.org/pypi/regex/ ). Refer to Lines 121 and 195 in <python_path>/site-packages/poirot/poirot.py
. The result is that the 'ssn' matcher will flag on: 'ssn', 'SSN', or 'ssN', etc., which also 'className', producing false positive errors in the full rev history. Initially we included the (?c)
flag in the SSN matchers: .*(ssn)(?c).*[:=]\s*[0-9-]{9,11}
however this is not compatible with all regex engines and causes an error in some cases. During the --revlist="all"
full history Poirot runs, this pattern failed silently with the git --grep
engine and therefore did not actually run. During the --staged
Poirot runs, this pattern fails with a stack trace with the pypi/regex
engine. The (?c)
pattern has been removed entirely and so the ssn
patterns can still flag on false positives like 'className'.
This repository is open for contributions, although it is not its primary intent. Please read CONTRIBUTING to learn more on how to contribute.
We strive for a welcoming and inclusive environment for the Claims-to-Quality project.
Please follow this guidelines in all interactions:
- Be Respectful: use welcoming and inclusive language.
- Assume best intentions: seek to understand other's opinions.
Please do not submit an issue on GitHub for a security vulnerability. Please contact the development team through the Certify Help Desk at c2q@tistatech.com.
Be sure to include all the pertinent information.
The agency reserves the right to change this policy at any time.