From b143b5d4b4bc6983d41696a2ce8d6800943cf6f8 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 10 Jan 2024 16:21:55 -0500 Subject: [PATCH] ci: add full stack NLP regression test This is overdue. We want to make sure that any NLP changes are not suprises. Questions that we now have PR-time answers for: - Does our Dockerfile build? (was only checked after merge before) - Does our built Docker work even a little bit? - Do the current NLP dependent images work even a little bit? - Are there unexpected regressions in our NLP pipeline? There might still be errors that could creep up in our NLP that this quick smoketest don't uncover. But it's a lot better than nothing! --- .github/workflows/ci.yaml | 47 +++++++++++++++++-- .github/workflows/docker-hub.yaml | 8 ++-- compose.yaml | 2 +- .../etl/studies/covid_symptom/covid_ctakes.py | 7 ++- .../covid_symptom__nlp_results.000.meta | 9 ++++ .../covid_symptom__nlp_results.000.ndjson | 16 +++++++ .../input/DocumentReference.ndjson | 5 ++ tests/data/nlp-regression/input/README.md | 8 ++++ tests/data/nlp-regression/phi/codebook.json | 1 + 9 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.meta create mode 100644 tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.ndjson create mode 100644 tests/data/nlp-regression/input/DocumentReference.ndjson create mode 100644 tests/data/nlp-regression/input/README.md create mode 100644 tests/data/nlp-regression/phi/codebook.json diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b86ae46a..af7e2faf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,7 +23,7 @@ jobs: python-version: ["3.10"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -37,7 +37,7 @@ jobs: pip install .[tests] - name: Check out MS tool - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: microsoft/Tools-for-Health-Data-Anonymization path: mstool @@ -57,10 +57,51 @@ jobs: run: | python -m pytest + nlp-regression: + runs-on: ubuntu-latest + env: + UMLS_API_KEY: ${{ secrets.UMLS_API_KEY }} + steps: + - uses: actions/checkout@v4 + + - name: Install Docker + uses: docker/setup-buildx-action@v3 + + - name: Build ETL image + uses: docker/build-push-action@v5 + with: + load: true # just build, no push + tags: smartonfhir/cumulus-etl:latest + + - name: Download NLP images + run: docker compose --profile covid-symptom up -d --quiet-pull + + - name: Run NLP + run: | + export DATADIR=$(realpath tests/data/nlp-regression) + + # Run the NLP task + docker compose run --rm \ + --volume $DATADIR:/in \ + cumulus-etl \ + /in/input \ + /in/run-output \ + /in/phi \ + --output-format=ndjson \ + --task covid_symptom__nlp_results + + # Compare results + export OUTDIR=$DATADIR/run-output/covid_symptom__nlp_results + sudo chown -R $(id -u) $OUTDIR + sed -i 's/"generated_on": "[^"]*", //g' $OUTDIR/*.ndjson + diff -upr $DATADIR/expected-output $OUTDIR + + echo "All Good!" + lint: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install linters # black is synced with the .pre-commit-hooks version diff --git a/.github/workflows/docker-hub.yaml b/.github/workflows/docker-hub.yaml index e6d7f74f..73e1ec22 100644 --- a/.github/workflows/docker-hub.yaml +++ b/.github/workflows/docker-hub.yaml @@ -13,23 +13,23 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Get Docker metadata id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: flavor: latest=true images: smartonfhir/cumulus-etl - name: Log in to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push image to Docker Hub - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: push: true platforms: | diff --git a/compose.yaml b/compose.yaml index 0c2aa62a..31829c86 100644 --- a/compose.yaml +++ b/compose.yaml @@ -39,7 +39,7 @@ services: ctakes-covid-base: image: smartonfhir/ctakes-covid:1.1.0 environment: - - ctakes_umlsuser=umls_api_key + - ctakes_umlsuser=umls_api_key - ctakes_umlspw=$UMLS_API_KEY networks: - cumulus-etl diff --git a/cumulus_etl/etl/studies/covid_symptom/covid_ctakes.py b/cumulus_etl/etl/studies/covid_symptom/covid_ctakes.py index 7025c1f1..0e618fc8 100644 --- a/cumulus_etl/etl/studies/covid_symptom/covid_ctakes.py +++ b/cumulus_etl/etl/studies/covid_symptom/covid_ctakes.py @@ -73,7 +73,12 @@ async def covid_symptoms_extract( def is_covid_match(m: ctakesclient.typesystem.MatchText): return bool(covid_symptom_cuis.intersection({attr.cui for attr in m.conceptAttributes})) - matches = list(filter(is_covid_match, matches)) + matches = filter(is_covid_match, matches) + + # For better reliability when regression/unit testing, sort matches by begin / first code. + # (With stable sorting, we want the primary sort to be done last.) + matches = sorted(matches, key=lambda x: x.conceptAttributes and x.conceptAttributes[0].code) + matches = sorted(matches, key=lambda x: x.begin) # OK we have cTAKES symptoms. But let's also filter through cNLP transformers to remove any that are negated # there too. We have found this to yield better results than cTAKES alone. diff --git a/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.meta b/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.meta new file mode 100644 index 00000000..7b0e60bd --- /dev/null +++ b/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.meta @@ -0,0 +1,9 @@ +{ + "groups": [ + "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156", + "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", + "13e748c21a7c50f6c59fc4613683cd5d7f76bd5d68fda20f4e81ccce74ea7930", + "364aa545eca0a9744bc67c5ad914e2e9e35dd39a5c1f1a8f902e533a8641238d", + "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8" + ] +} \ No newline at end of file diff --git a/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.ndjson b/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.ndjson new file mode 100644 index 00000000..d55648b7 --- /dev/null +++ b/tests/data/nlp-regression/expected-output/covid_symptom__nlp_results.000.ndjson @@ -0,0 +1,16 @@ +{"id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156.0", "docref_id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 608, "end": 615, "text": "fatigue", "polarity": 0, "conceptAttributes": [{"code": "248274002", "cui": "C0015672", "codingScheme": "SNOMEDCT_US", "tui": "T184"}, {"code": "84229001", "cui": "C0015672", "codingScheme": "SNOMEDCT_US", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156.1", "docref_id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 608, "end": 615, "text": "fatigue", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0015672", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156.2", "docref_id": "032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 812, "end": 821, "text": "headaches", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0018681", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e.0", "docref_id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 6, "end": 14, "text": "Headache", "polarity": 0, "conceptAttributes": [{"code": "25064002", "cui": "C0018681", "codingScheme": "SNOMEDCT_US", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e.1", "docref_id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 6, "end": 14, "text": "Headache", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0018681", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e.2", "docref_id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 114, "end": 133, "text": "nausea and vomiting", "polarity": 0, "conceptAttributes": [{"code": "16932000", "cui": "C0027498", "codingScheme": "SNOMEDCT_US", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e.3", "docref_id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 114, "end": 133, "text": "nausea and vomiting", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0027498", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e.4", "docref_id": "05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 603, "end": 611, "text": "fatigued", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0015672", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "13e748c21a7c50f6c59fc4613683cd5d7f76bd5d68fda20f4e81ccce74ea7930.2", "docref_id": "13e748c21a7c50f6c59fc4613683cd5d7f76bd5d68fda20f4e81ccce74ea7930", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 303, "end": 318, "text": "short of breath", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0013404", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.0", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 343, "end": 348, "text": "cough", "polarity": 0, "conceptAttributes": [{"code": "263731006", "cui": "C0010200", "codingScheme": "SNOMEDCT_US", "tui": "T184"}, {"code": "49727002", "cui": "C0010200", "codingScheme": "SNOMEDCT_US", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.1", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 343, "end": 348, "text": "cough", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0010200", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.2", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 350, "end": 356, "text": "fevers", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0015967", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.3", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 372, "end": 378, "text": "chills", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0085593", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.4", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 1536, "end": 1541, "text": "fever", "polarity": 0, "conceptAttributes": [{"code": "386661006", "cui": "C0015967", "codingScheme": "SNOMEDCT_US", "tui": "T184"}, {"code": "50177009", "cui": "C0015967", "codingScheme": "SNOMEDCT_US", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8.5", "docref_id": "36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4, "match": {"begin": 1536, "end": 1541, "text": "fever", "polarity": 0, "conceptAttributes": [{"code": "n/a", "cui": "C0015967", "codingScheme": "custom", "tui": "T184"}], "type": "SignSymptomMention"}} +{"id": "364aa545eca0a9744bc67c5ad914e2e9e35dd39a5c1f1a8f902e533a8641238d.0", "docref_id": "364aa545eca0a9744bc67c5ad914e2e9e35dd39a5c1f1a8f902e533a8641238d", "encounter_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "subject_id": "827db3458e3d956437c2b43f441eca441851c2f2e937e2c5467fdd0c5f980db5", "task_version": 4} diff --git a/tests/data/nlp-regression/input/DocumentReference.ndjson b/tests/data/nlp-regression/input/DocumentReference.ndjson new file mode 100644 index 00000000..92b55805 --- /dev/null +++ b/tests/data/nlp-regression/input/DocumentReference.ndjson @@ -0,0 +1,5 @@ +{"resourceType": "DocumentReference", "id": "dandy-walker-malformation.txt", "status": "current", "description": "anon ID: 032b2ff6af8c883760d5a44e32ff80454d69551de6438c46be64604ddc744156", "type": {"coding": [{"system": "http://loinc.org", "code": "34111-5"}]}, "subject": {"reference": "Patient/A"}, "context": {"encounter": [{"reference": "Encounter/A"}]}, "date": "2022-12-05T15:33:59.978-05:00", "content": [{"attachment": {"contentType": "text/plain; charset=utf-8", "data": "CgpDQzogU2VpenVyZSBEL08KCkhYOiAyOSB5L28gbWFsZSB3aXRoIGNlcmVicmFsIHBhbHN5LCBub24tc2h1bnRlZCBoeWRyb2NlcGhhbHVzLCBzcGFzdGljCnF1YWRyaXBsZWdpYSwgbWVudGFsIHJldGFyZGF0aW9uLCBiaWxhdGVyYWwgc2Vuc29yeSBuZXVyYWwgaGVhcmluZyBsb3NzLApzZXZlcmUgbmV1cm9nZW5pYyBzY29saW9zaXMgYW5kIG11bHRpcGxlIGNvbnRyYWN0dXJlcyBvZiB0aGUgNCBleHRyZW1pdGllcywKbmV1cm9nZW5pYyBib3dlbCBhbmQgYmxhZGRlciBpbmNvbnRpbmVuY2UsIGFuZCBhIGhpc3Rvcnkgb2Ygc2VpenVyZXMuCgpIZSB3YXMgc2VlbiBmb3IgZXZhbHVhdGlvbiBvZiBzZWl6dXJlcyB3aGljaCBmaXJzdCBiZWdhbiBhdCBhZ2UgMjcgeWVhcnMsIHR3bwp5ZWFycyBiZWZvcmUgcHJlc2VudGF0aW9uLiBIaXMgdHlwaWNhbCBlcGlzb2RlcyBjb25zaXN0IG9mIGZhY2lhbCB0d2l0Y2hpbmcKKHNpZGUgbm90IHNwZWNpZmllZCksIHVucmVzcG9uc2l2ZSBwdXBpbHMsIGFuZCBtb2FuaW5nLiBUaGUgZXBpc29kZXMgbGFzdAphcHByb3hpbWF0ZWx5IDEtMiBtaW51dGVzIGluIGR1cmF0aW9uIGFuZCBhcmUgZm9sbG93ZWQgYnkgcG9zdC1pY3RhbCBmYXRpZ3VlLgpIZSB3YXMgcGxhY2VkIG9uIERQSCwgYnV0IHRoZXJlIHdhcyBubyByZWNvcmQgb2YgYW4gRUVHIHByaW9yIHRvIHByZXNlbnRhdGlvbi4KSGUgaGFkIGhhZCBubyBzZWl6dXJlIGV2ZW50cyBpbiBvdmVyIDEgeWVhciBwcmlvciB0byBwcmVzZW50YXRpb24gd2hpbGUgb24gRFBICjEwMG1nLU8tMjAwbWcuIEhlIGFsc28gY29tcGxhaW5lZCBvZiBoZWFkYWNoZXMgZm9yIHRoZSBwYXN0IDEwIHllYXJzLgoKQklSVEggSFg6IFNwb250YW5lb3VzIFZhZ2luYWwgZGVsaXZlcnkgYXQgMzZ3ZWVrcyBnZXN0YXRpb24gdG8gYSBHMlAxCm1vdGhlci4gQmlydGggd2VpZ2h0IDcjMTBvei4gTm8gaW5zdHJ1bWVudGF0aW9uIHJlcXVpcmVkLiBMYWJvciA9IDExaG91cnMuCiJMaWdodCBnYXMgYW5lc3RoZXNpYSIgZ2l2ZW4uIEFwZ2FycyB1bmtub3duLiBNb3RoZXIgcmVwb3J0ZWRseSBoYWQgdGhlICJmbHUiCmluIHRoZSA3dGggb3IgOHRoIG1vbnRoIG9mIGdlc3RhdGlvbi4KClBhdGllbnQgZGlzY2hhcmdlZCA1IGRheXMgcG9zdC1wYXJ0dW0uCgpEZXZlbG9wbWVudDogc3Bva2UgZmlyc3Qgd29yZHMgYmV0d2VlbiAxIGFuZCAyIHllYXJzIG9mIGFnZS4gUm9sbGVkIHNpZGUgdG8Kc2lkZSBhdCBhZ2UgMiwgYnV0IGRpZCBub3Qgd2Fsay4gRmVkIHNlbGYgd2l0aCBoYW5kcyBhdCBhZ2UgMiB5ZWFycy4gTmV2ZXIKdG9pbGV0IHRyYWluZWQuCgpQTUg6IDEpSHlkcm9jZXBoYWx1cyBtYW5pZmVzdGVkIGJ5IG1hY3JvY2VwaGFseSBieSBhZ2UgMi0zIG1vbnRocy4gSGVhZApjaXJjdW1mZXJlbmNlIDUwLjVjbSBhdCA0IG1vbnRocyBvZiBhZ2UgKHdpZGUgc3V0dXJlcyBhbmQgYnVsZ2luZyBmb250YW5lbHMpLgpVbmRlcndlbnQgdmVudHJpY3Vsb2dyYW0sIGFnZSA0IG1vbnRocywgd2hpY2ggaWxsdXN0cmF0ZWQgbWFzc2l2ZSBlbmxhcmdlbWVudApvZiB0aGUgbGF0ZXJhbCB2ZW50cmljbGVzIGFuZCBub3JtYWwgc2l6ZWQgYXF1ZWR1Y3QgYW5kIDR0aCB2ZW50cmljbGUuIFRoZQpjb3J0ZXggb2YgdGhlIGNlcmVicmFsIGhlbWlzcGhlcmUgd2FzIGxlc3MgdGhhbiAxY20uIGluIHRoaWNrbmVzczsgZXNwZWNpYWxseQppbiB0aGUgb2NjaXBpdGFsIHJlZ2lvbnMgd2hlcmUgb25seSBhIHRoaW4gcmltIG9mIHRpc3N1ZSB3YXMgbGVmdC4KTmV1cm9zdXJnaWNhbCBpbnRlcnZlbnRpb24gd2FzIG5vdCBhdHRlbXB0ZWQgYW5kIHRoZSBwYXRpZW50IGRlZW1lZCBpbm9wZXJhYmxlCmF0IHRoZSB0aW1lLiBCeSAzMSBtb250aHMgb2YgYWdlIHRoZSBwYXRpZW50cyBoZWFkIGNpcmN1bWZlcmVuY2Ugd2FzIDY4Y20sIGF0CndoaWNoIHBvaW50IHRoZSBoZWFkIHNpemUgYXJyZXN0ZWQuIE90aGVyIHByb2JsZW1zIG1lbnRpb25lZCBhYm92ZS4KClNIWDogaW5zdGl0dXRpb25hbGl6ZWQgYXQgYWdlIDE4IHllYXJzLgoKRkhYOiB1bnJlbWFya2FibGUuCgpFWEFNOiBWaXRhbHMgdW5rbm93bi4KCk1TOiBhd2FrZSB3aXRoIG9jY2FzaW9uYWwgdXNlIG9mIGludGVsbGlnaWJsZSBidXQgaW5hcHByb3ByaWF0ZWx5IHVzZWQgd29yZHMuCgpDTjogUmlnaHR3YXJkIGJlYXRpbmcgbnlzdGFnbXVzIGluY3JlYXNlIG9uIGxlZnR3YXJkIGdhemUuIFJpZ2h0IGdhemUKcHJlZmVyZW5jZS4gQ29ybmVhbCByZXNwb25zZXMgd2VyZSBpbnRhY3QgYmlsYXRlcmFsbHkuIEZ1bmRvc2NvcGljIGV4YW0gbm90Cm5vdGVkLgoKTW90b3I6IHNwYXN0aWMgcXVhZHJpcGFyZXNpcy4gbW92ZXMgUlVFIG1vcmUgdGhhbiBvdGhlciBleHRyZW1pdGllcy4KClNlbnNvcnk6IHdpdGhkcmV3IHRvIFBQIGluIDQgZXh0cmVtaXRpZXMuCgpDb29yZDogTkQKClN0YXRpb246IE5ECgpHYWl0OiBORCwgd2hlZWwgY2hhaXIgYm91bmQuCgpSZWZsZXhlczogUlVFIDIrLCBMVUUgMyssIFJMRSA0KyB3aXRoIHN1c3RhaW5lZCBjcm9zcyBhZGR1Y3RvciBjbG9udXMgaW4gdGhlCnJpZ2h0IHF1YWRyaWNlcHMuIExMRSAzKy4KCk90aGVyOiBNYWNyb2NlcGhhbHkgKG1lYXN1cmVtZW50IG5vdCBnaXZlbikuIFNjb2xpb3Npcy4gUmVzdCBvZiBnZW5lcmFsIGV4YW0KdW5yZW1hcmthYmxlIGV4Y2VwdCBmb3IgbnVtZXJvdXMgYWJkb21pbmFsIHNjYXJzLgoKQ09VUlNFOiBFRUcgOC8yNi85MjogQWJub3JtYWwgd2l0aCBkaWZmdXNlIHNsb3dpbmcgYW5kIGRlcHJlc3NlZApiYWNrZ3JvdW5kIChsZWZ0IHdvcnNlIHRoYW4gcmlnaHQpIGFuZCBwb29ybHkgZm9ybWVkIGJhY2tncm91bmQgYWN0aXZpdHkgYXQKNS03aHouIFJpZ2h0IHBvc3RlcmlvciBzaGFycCB0cmFuc2llbnRzLCBhbmQgcmh5dGhtaWMgZGVsdGEtdGhldGEgYnVyc3RzIGZyb20KdGhlIHJpZ2h0IHRlbXBvcmFsIHJlZ2lvbi4gVGhlIGZpbmRpbmdzIGFyZSBjb25zaXN0ZW50IHdpdGggZGlmZnVzZSBjZXJlYnJhbApkeXNmdW5jdGlvbiBhbmQgdW5kZXJseWluZyBzZWl6dXJlIHRlbmRlbmN5IG9mIG11bHRpZm9jYWwgb3JpZ2luLg=="}}]} +{"resourceType": "DocumentReference", "id": "cerebral-angiogram.txt", "status": "current", "description": "anon ID: 05d0686aec0a65069a1e5b1a4937f5196b75ae336b7fbe10300882184523f95e", "type": {"coding": [{"system": "http://loinc.org", "code": "34111-5"}]}, "subject": {"reference": "Patient/A"}, "context": {"encounter": [{"reference": "Encounter/A"}]}, "date": "2022-12-05T15:33:59.978-05:00", "content": [{"attachment": {"contentType": "text/plain; charset=utf-8", "data": "CgpDQzogSGVhZGFjaGUgKEhBKQoKSFg6IDEwIHkvbyBSSE0gYXdva2Ugd2l0aCBhIGJpbGF0ZXJhbCBwYXJpZXRvLW9jY2lwaXRhbCBIQSBhc3NvY2lhdGVkIHdpdGgKc2luZ2xlIGVwaXNvZGUgb2YgbmF1c2VhIGFuZCB2b21pdGluZywgMiB3ZWVrcyBwcmlvciB0byBwcmVzZW50YXRpb24uIFRoZQpuYXVzZWEgYW5kIHZvbWl0aW5nIHJlc29sdmVkIGFuZCBkaWQgbm90IHJlY3VyLiBIb3dldmVyLCBoZSBjb250aW51ZWQgdG8KZXhwZXJpZW5jZSBzaW1pbGFyIEhBIDMtNCB0aW1lcyBwZXIgd2VlayBkdXJpbmcgdGhlIGVhcmx5IG1vcm5pbmcgdXBvbgphd2FrZW5pbmcuIEhlIG5ldmVyIGZlbHQgdGhlIEhBIGF3YWtlbmVkIGhpbSBmcm9tIHNsZWVwLiBUaGUgSEEgd2VyZSBwYXJ0aWFsbHkKcmVsaWV2ZWQgYnkgVHlsZW5vbCBvciBBZHZpbCwgYW5kIGhlIGRpc3RyYWN0ZWQgaGltc2VsZiBmcm9tIHRoZSBwYWluIGJ5CnJlbWFpbmluZyBhY3RpdmUuIE9uZSB3ZWVrIHByaW9yIHRvIHByZXNlbnRhdGlvbiwgaGUgc3RhcnRlZCB0byBleHBlcmllbmNlCnNob3J0IGVwaXNvZGVzIG9mIGJsdXJyZWQgdmlzaW9uIGFuZCBkaXBsb3BpYS4gSGUgYWxzbyBiZWNhbWUgZmF0aWd1ZWQsIGxlc3MKYWN0aXZlLCBhbmQgZnJlcXVlbnRseSB5YXduZWQuCgpIZSBoYWQgbm8gcHJpb3IgaGlzdG9yeSBvZiBIQSBhbmQgaGUgYW5kIGhpcyBmYW1pbHkgZGVuaWVkIGFueSBzaWduIG9yIHN5bXB0b20Kb2YgZm9jYWwgd2Vha25lc3Mgb3IgbnVtYm5lc3MsIGR5c3BoYWdpYSwgZHlzYXJ0aHJpYSwgb3IgbG9zcyBvZgpjb25zY2lvdXNuZXNzLgoKVGhlIHBhdGllbnQgdW5kZXJ3ZW50IGFuIE1SSSBicmFpbiBzY2FuIHByaW9yIHRvIHRyYW5zZmVyIHRvIFVJSEMuIFRoaXMKcmV2ZWFsZWQgYSBtYXNzIGluIHRoZSBsZWZ0IGZyb250YWwgcmVnaW9uIGFkamFjZW50IHRvIHRoZSBsZWZ0IHRlbXBvcmFsIGhvcm4uClRoZSBtYXNzIHdhcyBhbiBpbmhvbW9nZW5lb3VzIGJsZW5kIG9mIHNpZ25hbHMgb24gVDEgYW5kIFQyIGltYWdlcyBnaXZpbmcgYQpzdWdnZXN0aW9uIG9mIGFjdXRlIGJsZWVkaW5nLCBoZW1vc2lkZXJpbiBkZXBvc2l0aW9uIGFuZCBtdWx0aXBsZSB2ZXNzZWxzCndpdGhpbiB0aGUgbWFzcy4KCk1FRFM6IE5vbmUuCgpQTUg6IDEpIEhlIHdhcyBhIDcjIDE1b3ouIHByb2R1Y3Qgb2YgYSBmdWxsIHRlcm0sIHVuY29tcGxpY2F0ZWQgcHJlZ25hbmN5CmFuZCBzcG9udGFuZW91cyB2YWdpbmFsIGRlbGl2ZXJ5LiBIaXMgcG9zdC1wYXJ0dW0gY291cnNlIHdhcyB1bnJlbWFya2FibGUuCjIpRGV2ZWxvcG1lbnRhbCBtaWxlc3RvbmVzIHdlcmUgcmVhY2hlZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZXM7IHRob3VnaCBoZQp3YXMgZGlhZ25vc2VkIHdpdGggZHlzbGV4aWEgNCB5ZWFycyBhZ28uIDMpIE5vIHNpZ25pZmljYW50IGlsbG5lc3NlcyBvcgpob3NwaXRhbGl6YXRpb25zLgoKRkhYOiBNR0YgKG1lbmluZ2lvbWEpLiBQR0YgKGx5bXBob21hKS4gTW90aGVyIChtaWdyYWluZSBIQSkuIEZhdGhlciBhbmQKMjJ5ciBvbGQgYnJvdGhlciBhcmUgYWxpdmUgYW5kIHdlbGwuCgpTSFg6IGxpdmVzIHdpdGggcGFyZW50cyBhbmQgYXR0ZW5kcyBtYWluc3RyZWFtIDV0aCBncmFkZSBjbGFzc2VzLgoKRVhBTTogQlAxMjQvOTMgSFI5NiBSUjIwIDM3LjlDICh0eW1wYW5pYykKCk1TOiBBICYgTyB0byBwZXJzb24sIHBsYWNlLCB0aW1lLiBDb29wZXJhdGl2ZSBhbmQgaW50ZXJhY3RpdmUuIFNwZWVjaCBmbHVlbnQKYW5kIHdpdGhvdXQgZHlzYXJ0aHJpYS4KCkNOOiBFT00gaW50YWN0LiBWRkZUQywgUHVwaWxzIDMvMyBkZWNyZWFzaW5nIHRvIDIvMiBvbiBleHBvc3VyZSB0byBsaWdodC4KRnVuZG9zY29weTogb3B0aWMgZGlza3MgZmxhdCwgbm8gZXZpZGVuY2Ugb2YgaGVtb3JyaGFnZS4gVGhlIHJlc3Qgb2YgdGhlIENOCmV4YW0gd2FzIHVucmVtYXJrYWJsZS4KCk1PVE9SOiBmdWxsIHN0cmVuZ3RoIHRocm91Z2hvdXQgYWxsIDQgZXh0cmVtaXRpZXMuIE5vcm1hbCBtdXNjbGUgdG9uZSBhbmQKYnVsay4KClNlbnNvcnk6IHVucmVtYXJrYWJsZS4KCkNvb3JkOiB1bnJlbWFya2FibGUuCgpTdGF0aW9uOiBubyBwcm9uYXRvciBkcmlmdCBvciBSb21iZXJnIHNpZ24KCkdhaXQ6IHVucmVtYXJrYWJsZS4KClJlZmxleGVzOiAyKyBpbiBSVUUgYW5kIFJMRS4gMyBpbiBMVUUgYW5kIExMRS4gUGxhbnRhciByZXNwb25zZXMgd2VyZSBmbGV4b3IsCmJpbGF0ZXJhbGx5LgoKSEVFTlQ6IG5vIG1lbmluZ2lzbXVzLiBubyBjcmFuaWFsIGJydWl0cy4gbm8gc2t1bGwgZGVmZWN0cyBwYWxwYXRlZC4KCkdFTiBFWEFNOiB1bnJlbWFya2FibGUuCgpDT1VSU0U6IEdTLCBQVC9QVFQsIENCQyB3ZXJlIHVucmVtYXJrYWJsZS4gVGhlIE1SSSBmaW5kaW5nIGFib3ZlIGxlYWQgdG8gYQpkaWZmZXJlbnRpYWwgZGlhZ25vc2lzIG9mIFZlbm91cyBBbmdpb21hLCBBcnRlcmlvdmVub3VzIE1hbGZvcm1hdGlvbiwKRXBlbmR5bW9tYSwgTmV1cm9jeXRvbWEsIEdsaW9tYTogYWxsIHdpdGggYXNzb2NpYXRlZCBoZW1vcnJoYWdlLgoKSGUgdW5kZXJ3ZW50IGNlcmVicmFsIGFuZ2lvZ3JhcGh5IG9uIDEvMjUvOTMuIFVwb24gaW5qZWN0aW9uIG9mIHRoZSBSQ0NBIGFuCmF2YXNjdWxhciBtYXNzIHdhcyBpZGVudGlmaWVkIGluIHRoZSByaWdodCB0ZW1wb3JhbCBsb2JlIGRpc3BsYWNpbmcgdGhlCmFudGVyaW9yIGNob3JvaWRhbCBhcnRlcnksIGFuZCB0ZW1wb3JhbCBicmFuY2hlcyBvZiB0aGUgbWlkZGxlIGNlcmVicmFsCmFydGVyaWVzLiBUaGUgaW50ZXJuYWwgY2VyZWJyYWwgdmVpbiBpcyBkaXNwbGFjZWQgdG8gdGhlIGxlZnQgc3VnZ2VzdGluZyBtYXNzCmVmZmVjdC4gVGhlcmUgaXMgYSBoeXBvcGxhc3RpYyBBMSBzZWdtZW50IGFuZCBmZXRhbCBvcmlnaW4gb2YgdGhlIExQQ0EuIFRoZQptYXNzIHdhcyBmZWx0IGJ5IG5ldXJvcmFkaW9sb2d5IHRvIHJlcHJlc2VudCBhIGhlbWF0b21hLgoKSGUgdW5kZXJ3ZW50IGEgcmlnaHQgZnJvbnRhbCBjcmFuaW90b215LCAxLzI4LzkzLiBQYXRob2xvZ2ljYWwgZXZhbHVhdGlvbiBvZgp0aGUgcmVzZWN0ZWQgdGlzc3VlIHdhcyBjb25zaXN0ZW50IHdpdGggYSB2YXNjdWxhciBtYWxmb3JtYXRpb24gd2l0aCBpbmNsdXNpdmUKcmVhY3RpdmUgZ2xpYWwgdGlzc3VlIGFuZCBldmlkZW5jZSBvZiByZWN1cnJlbnQgYW5kIHJlbW90ZSBoZW1vcnJoYWdlLiBUaGVyZQp3ZXJlIGRpbGF0ZWQgdmFzY3VsYXIgY2hhbm5lbHMgaGF2aW5nIHdhbGxzIG9mIHZhcmlhYmxlIHRoaWNrbmVzcywgYnV0IHdpdGhvdXQKZXZpZGVuY2Ugb2YgZWxhc3RpYyBsYW1pbmEgYnkgZWxhc3RpYyBzdGFpbmluZy4gVGhpcyB3YXMgY29uc2lzdGVudCB3aXRoCnZlbm91cyBhbmdpb21hL21hbGZvcm1hdGlvbi4="}}]} +{"resourceType": "DocumentReference", "id": "cardiac-consultation-2.txt", "status": "current", "description": "anon ID: 13e748c21a7c50f6c59fc4613683cd5d7f76bd5d68fda20f4e81ccce74ea7930", "type": {"coding": [{"system": "http://loinc.org", "code": "34111-5"}]}, "subject": {"reference": "Patient/A"}, "context": {"encounter": [{"reference": "Encounter/A"}]}, "date": "2022-12-05T15:33:59.978-05:00", "content": [{"attachment": {"contentType": "text/plain; charset=utf-8", "data": "CgpDSElFRiBSRUFTT04gRk9SIENPTlNVTFRBVElPTjogRXZhbHVhdGUgZXhlcmNpc2UtaW5kdWNlZCBjaGVzdCBwYWluLApwYWxwaXRhdGlvbnMsIGRpenp5IHNwZWxscywgc2hvcnRuZXNzIG9mIGJyZWF0aCwgYW5kIGFibm9ybWFsIEVLRy4KCkhJU1RPUlkgT0YgUFJFU0VOVCBJTExORVNTOiBUaGlzIDcyLXllYXItb2xkIGZlbWFsZSBoYWQgYSBzcGVsbCBvZgpwYWxwaXRhdGlvbnMgdGhhdCBsYXN0ZWQgZm9yIGFib3V0IGZpdmUgdG8gdGVuIG1pbnV0ZXMuIER1cmluZyB0aGlzIHRpbWUsCnBhdGllbnQgZmVsdCBleHRyZW1lbHkgc2hvcnQgb2YgYnJlYXRoIGFuZCBkaXp6eS4gUGFscGl0YXRpb25zIGxhc3RlZCBmb3IKYWJvdXQgZml2ZSB0byB0ZW4gbWludXRlcyB3aXRob3V0IGFueSByZWN1cnJlbmNlLiBQYXRpZW50IGFsc28gZ2l2ZXMgaGlzdG9yeQpvZiBoYXZpbmcgdGlnaHRuZXNzIGluIHRoZSBjaGVzdCBhZnRlciBzaGUgd2Fsa3MgYnJpc2tseSB1cCB0byBhIGJsb2NrLiBDaGVzdAp0aWdodG5lc3Mgc3RhcnRzIGluIHRoZSByZXRyb3N0ZXJuYWwgYXJlYSB3aXRoIHJhZGlhdGlvbiBhY3Jvc3MgdGhlIGNoZXN0LgpDaGVzdCB0aWdodG5lc3MgZG9lcyBub3QgcmFkaWF0ZSB0byB0aGUgcm9vdCBvZiB0aGUgbmVjayBvciB0byB0aGUgc2hvdWxkZXIsCmxhc3RzIGFueXdoZXJlIGZyb20gZml2ZSB0byB0ZW4gbWludXRlcywgYW5kIGlzIHJlbGlldmVkIHdpdGggcmVzdC4gUGF0aWVudApnaXZlcyBoaXN0b3J5IG9mIGhhdmluZyBoeXBlcnRlbnNpb24gZm9yIHRoZSBsYXN0IHR3byBtb250aHMuIFBhdGllbnQgZGVuaWVzCmhhdmluZyBkaWFiZXRlcyBtZWxsaXR1cywgaGlzdG9yeSBzdWdnZXN0aXZlIG9mIHByZXZpb3VzIG15b2NhcmRpYWwKaW5mYXJjdGlvbiwgb3IgY2VyZWJyb3Zhc2N1bGFyIGFjY2lkZW50LgoKTUVESUNBVElPTlM6ICAKMS4gQXN0ZWxpbiBuYXNhbCBzcHJheS4gIAoyLiBFdmlzdGEgNjAgbWcgZGFpbHkuICAKMy4gTG9wcmVzc29yIDI1IG1nIGRhaWx5LiAgCjQuIFBhdGllbnQgd2FzIGdpdmVuIGEgc2FtcGxlIG9mIERpb3ZhbiA4MCBtZyBkYWlseSBmb3IgdGhlIGNvbnRyb2wgb2YKaHlwZXJ0ZW5zaW9uIGZyb20gbXkgb2ZmaWNlLgoKUEFTVCBISVNUT1JZOiBUaGUgcGF0aWVudCB1bmRlcndlbnQgcmlnaHQgZm9vdCBzdXJnZXJ5IGFuZCBDLXNlY3Rpb24uCgpGQU1JTFkgSElTVE9SWTogVGhlIHBhdGllbnQgaXMgbWFycmllZCwgaGFzIHNpeCBjaGlsZHJlbiB3aG8gYXJlIGRvaW5nCmZpbmUuIEZhdGhlciBkaWVkIG9mIGEgc3Ryb2tlIG1hbnkgeWVhcnMgYWdvLiBNb3RoZXIgaGFkIGFydGhyaXRpcy4KClNPQ0lBTCBISVNUT1JZOiBUaGUgcGF0aWVudCBkb2VzIG5vdCBzbW9rZSBvciB0YWtlIGFueSBkcmlua3MuCgpBTExFUkdJRVM6IFRIRSBQQVRJRU5UIElTIE5PVCBBTExFUkdJQyBUTyBBTlkgTUVESUNBVElPTlMuCgpSRVZJRVcgT0YgU1lTVEVNUzogT3RoZXJ3aXNlIG5lZ2F0aXZlLgoKUEhZU0lDQUwgRVhBTUlOQVRJT046ICAKR0VORVJBTDogV2VsbC1idWlsdCwgd2VsbC1ub3VyaXNoZWQgd2hpdGUgZmVtYWxlIGluIG5vIGFjdXRlIGRpc3RyZXNzLiAgClZJVEFMIFNJR05TOiBCbG9vZCBwcmVzc3VyZSBpcyAxNjAvODAuIFJlc3BpcmF0aW9ucyAxOCBwZXIgbWludXRlLiBIZWFydCByYXRlCjcwIGJlYXRzIHBlciBtaW51dGUuIFBhdGllbnQgd2VpZ2hzIDEzMyBwb3VuZHMsIGhlaWdodCA2NCBpbmNoZXMuIEJNSSBpcyAyMi4gIApIRUVOVDogSGVhZCBub3Jtb2NlcGhhbGljLiBFeWVzLCBubyBldmlkZW5jZSBvZiBhbmVtaWEgb3IgamF1bmRpY2UuIE9yYWwKaHlnaWVuZSBpcyBnb29kLiAgCk5FQ0s6IFN1cHBsZS4gTm8gY2VydmljYWwgbHltcGhhZGVub3BhdGh5LiBDYXJvdGlkIHVwc3Ryb2tlIGlzIGdvb2QuIE5vIGJydWl0CmhlYXJkIG92ZXIgdGhlIGNhcm90aWQgb3Igc3ViY2xhdmlhbiBhcnRlcmllcy4gVHJhY2hlYSBpbiBtaWRsaW5lLiBUaHlyb2lkIG5vdAplbmxhcmdlZC4gSlZQIGZsYXQgYXQgNDXCsC4gIApDSEVTVDogQ2hlc3QgaXMgc3ltbWV0cmljYWwgb24gYm90aCBzaWRlcywgbW92ZXMgd2VsbCB3aXRoIHJlc3BpcmF0aW9ucy4KVmVzaWN1bGFyIGJyZWF0aCBzb3VuZHMgaGVhcmQgb3ZlciB0aGUgbHVuZyBmaWVsZHMuIE5vIHdoZWV6aW5nLCBjcmVwaXRhdGlvbiwKb3IgcGxldXJhbCBmcmljdGlvbiBydWIgaGVhcmQuICAKQ0FSRElPVkFTQ1VMQVIgU1lTVEVNOiBQTUkgZmVsdCBpbiBmaWZ0aCBsZWZ0IGludGVyY29zdGFsIHNwYWNlIHdpdGhpbgptaWRjbGF2aWN1bGFyIGxpbmUuIEZpcnN0IGFuZCBzZWNvbmQgaGVhcnQgc291bmRzIGFyZSBub3JtYWwgaW4gY2hhcmFjdGVyLgpUaGVyZSBpcyBhIElJL1ZJIHN5c3RvbGljIG11cm11ciBiZXN0IGhlYXJkIGF0IHRoZSBhcGV4LiBUaGVyZSBpcyBubyBkaWFzdG9saWMKbXVybXVyIG9yIGdhbGxvcCBoZWFyZC4gIApBQkRPTUVOOiBTb2Z0LiBUaGVyZSBpcyBubyBoZXBhdG9zcGxlbm9tZWdhbHkgb3IgYXNjaXRlcy4gTm8gYnJ1aXQgaGVhcmQgb3Zlcgp0aGUgYW9ydGEgb3IgcmVuYWwgdmVzc2Vscy4gIApFWFRSRU1JVElFUzogTm8gcGVkYWwgZWRlbWEuIEZlbW9yYWwgYXJ0ZXJpYWwgcHVsc2F0aW9ucyBhcmUgMyssIHBvcGxpdGVhbCAyKy4KRG9yc2FsaXMgcGVkaXMgYW5kIHBvc3RlcmlvciB0aWJpYWxpcyBhcmUgMSsgb24gYm90aCBzaWRlcy4gIApORVVSTzogTm9ybWFsLgoKRUtHIGZyb20gRHIuIFh5eidzIG9mZmljZSBzaG93cyBub3JtYWwgc2ludXMgcmh5dGhtLCBTVCBhbmQgVCB3YXZlIGNoYW5nZXMuCkxpcGlkIHByb2ZpbGUsIHJhbmRvbSBibG9vZCBzdWdhciwgQlVOLCBjcmVhdGluaW5lLCBDQkMsIGFuZCBMRlRzIGFyZSBub3JtYWwuCgpJTVBSRVNTSU9OOiAgCjEuIEV4ZXJjaXNlLWluZHVjZWQgY2hlc3QgcGFpbi4gIAoyLiBQYWxwaXRhdGlvbnMgd2l0aCBkaXp6aW5lc3MuICAKMy4gQWJub3JtYWwgRUtHLiAgCjQuIEh5cGVydGVuc2lvbi4gIAo1LiBIZWFydCBtdXJtdXIuCgpQTEFOOiAgCjEuIEFkZW5vc2luZSBNeW92aWV3IFNQRUNULCAyNC1ob3VyIEhvbHRlciBtb25pdG9yLCBlY2hvY2FyZGlvZ3JhbS4gIAoyLiBDYXJvdGlkIHVsdHJhc291bmQuICAKMy4gTWljcm8tVCB3YXZlIGFsdGVybmFucyB0ZXN0LiAgCjQuIERpb3ZhbiA4MCBtZyBoYXMgYmVlbiBnaXZlbiB0byB0aGUgcGF0aWVudCBmcm9tIG91ciBzYW1wbGUgY2xvc2V0IGZvciB0aGUKY29udHJvbCBvZiBoeXBlcnRlbnNpb24uICAKNS4gUGF0aWVudCB3aWxsIGJlIHNlZW4gYWdhaW4gaW4gbXkgb2ZmaWNlIGluIHR3byB3ZWVrcy4="}}]} +{"resourceType": "DocumentReference", "id": "pneumonia-discharge-summar.txt", "status": "current", "description": "anon ID: 36ecd07bc327bba4e5ea36e34e66ca7f4f54360aef5bbcafc745c9f144aa87f8", "type": {"coding": [{"system": "http://loinc.org", "code": "34111-5"}]}, "subject": {"reference": "Patient/A"}, "context": {"encounter": [{"reference": "Encounter/A"}]}, "date": "2022-12-05T15:33:59.978-05:00", "content": [{"attachment": {"contentType": "text/plain; charset=utf-8", "data": "CgpBRE1JU1NJT04gRElBR05PU0VTOiAgCjEuIFBuZXVtb25pYSwgZmFpbGVkIG91dHBhdGllbnQgdHJlYXRtZW50LiAgCjIuIEh5cG94aWEuICAKMy4gUmhldW1hdG9pZCBhcnRocml0aXMuCgpESVNDSEFSR0UgRElBR05PU0VTOiAgCjEuIEF0eXBpY2FsIHBuZXVtb25pYSwgc3VzcGVjdGVkIHZpcmFsLiAgCjIuIEh5cG94aWEuICAKMy4gUmhldW1hdG9pZCBhcnRocml0aXMuICAKNC4gU3VzcGVjdGVkIG1pbGQgc3RyZXNzLWluZHVjZWQgYWRyZW5hbCBpbnN1ZmZpY2llbmN5LgoKSE9TUElUQUwgQ09VUlNFOiBUaGlzIHZlcnkgaW5kZXBlbmRlbnQgNzkteWVhciBvbGQgaGFkIHN0cnVnZ2xlZCB3aXRoCmNvdWdoLCBmZXZlcnMsIHdlYWtuZXNzLCBhbmQgY2hpbGxzIGZvciB0aGUgd2VlayBwcmlvciB0byBhZG1pc3Npb24uIFNoZSB3YXMKc2VlbiBvbiBtdWx0aXBsZSBvY2Nhc2lvbnMgYXQgVXJnZW50IENhcmUgYW5kIGluIGhlciBwaHlzaWNpYW4gJ3Mgb2ZmaWNlLgpJbml0aWFsIHgtcmF5IHNob3dlZCBzb21lIG1pbGQgZGlmZnVzZSBwYXRjaHkgaW5maWx0cmF0ZXMuIFNoZSB3YXMgZmlyc3QKc3RhcnRlZCBvbiBBdmVsb3gsIGJ1dCBoYWQgYSByZWFjdGlvbiwgc3dpdGNoZWQgdG8gQXVnbWVudGluLCB3aGljaCBjYXVzZWQKbG9vc2Ugc3Rvb2xzLCBhbmQgdGhlbiB0aHJlZSBkYXlzIHByaW9yIHRvIGFkbWlzc2lvbiB3YXMgZ2l2ZW4gZGFpbHkgMSBnClJvY2VwaGluIGFuZCBzdGFydGVkIG9uIGF6aXRocm9teWNpbi4gSGVyIE8yIHNhdHVyYXRpb25zIGRyaWZ0ZWQgZG93bndhcmQuClRoZXkgd2VyZSBsZXNzIHRoYW4gODglIHdoZW4gYWN0aXZlOyBhdCByZXN0LCB2YXJpZWQgYmV0d2VlbiA4OCUgYW5kIDkyJS4KRGVjaXNpb24gd2FzIG1hZGUgYmVjYXVzZSBvZiBmYWlsZWQgb3V0cGF0aWVudCB0cmVhdG1lbnQgb2YgcG5ldW1vbmlhLiBIZXIKbWVkaWNhbCBoaXN0b3J5IGlzIHNpZ25pZmljYW50IGZvciByaGV1bWF0b2lkIGFydGhyaXRpcy4gU2hlIGlzIG9uIDIwIG1nIG9mCm1ldGhvdHJleGF0ZSBldmVyeSB3ZWVrIGFzIHdlbGwgYXMgUmVtaWNhZGUgZXZlcnkgZWlnaHQgd2Vla3MuIEhlciBsYXN0IGRvc2UKb2YgUmVtaWNhZGUgd2FzIGluIHRoZSBtb250aCBvZiBKdW5lLiBIb3NwaXRhbCBjb3Vyc2Ugd2FzIHJlbGF0aXZlbHkKdW5yZW1hcmthYmxlLiBDVCBzY2FuIHdhcyBwZXJmb3JtZWQgYW5kIG5vIHNwZWNpZmljIGZvY2FsIHBhdGhvbG9neSB3YXMgc2Vlbi4KRHIuIFgsIHB1bG1vbm9sb2dpc3Qgd2FzIGNvbnN1bHRlZC4gSGUgYWxzbyB3YXMgdW5jZXJ0YWluIGFzIHRvIHRoZSBleGFjdApldGlvbG9neSwgYnV0IHZpcmFsIGV0aW9sb2d5IHdhcyBtb3N0IGhpZ2hseSBzdXNwZWN0ZWQuIEJlY2F1c2Ugb2YgaGVyIGxvb3NlCnN0b29scywgQy4gZGlmZmljaWxlIHRveGluIHdhcyBvcmRlcmVkLCBhbHRob3VnaCB0aGF0IGlzIHBlbmRpbmcgYXQgdGhlIHRpbWUKb2YgZGlzY2hhcmdlLiBTaGUgd2FzIGNvbnRpbnVlZCBvbiBSb2NlcGhpbiBJViBhbmQgYXppdGhyb215Y2luLiBIZXIgZmV2ZXIKYnJva2UgMTggaG91cnMgcHJpb3IgdG8gZGlzY2hhcmdlLCBhbmQgTzIgc2F0dXJhdGlvbnMgaW1wcm92ZWQsIGFzIGRpZCBoZXIKb3ZlcmFsbCBzdHJlbmd0aCBhbmQgY2xpbmljYWwgc3RhdHVzLiBTaGUgd2FzIGluc3RydWN0ZWQgdG8gZmluaXNoCmF6aXRocm9teWNpbi4gU2hlIGhhcyB0d28gcGlsbHMgbGVmdCBhdCBob21lLiBTaGUgaXMgdG8gZm9sbG93IHVwIHdpdGggRHIuIFgKaW4gdHdvIHRvIHRocmVlIGRheXMuIEJlY2F1c2Ugc2hlIGlzIG9uIGNocm9uaWMgcHJlZG5pc29uZSB0aGVyYXB5LCBpdCB3YXMKc3VzcGVjdGVkIHRoYXQgc2hlIHdhcyBtaWxkbHkgYWRyZW5hbCBpbnN1ZmZpY2llbnQgZnJvbSB0aGUgc3RyZXNzIG9mIGhlcgpwbmV1bW9uaWEuIFNoZSBpcyB0byBjb250aW51ZSB0aGUgaW5jcmVhc2VkIGRvc2Ugb2YgcHJlZG5pc29uZSBhdCAyMCBtZyAodXAKZnJvbSA1IG1nIHBlciBkYXkpLiBXZSB3aWxsIGNvbnN1bHQgaGVyIHJoZXVtYXRvbG9naXN0IGFzIHRvIHdoZXRoZXIgdG8KY29udGludWUgaGVyIG1ldGhvdHJleGF0ZSwgd2hpY2ggd2UgaGVsZCB0aGlzIHBhc3QgRnJpZGF5LiBNZXRob3RyZXhhdGUgaXMKa25vd24gb24gc29tZSBvY2Nhc2lvbnMgdG8gY2F1c2UgcG5ldW1vbml0aXMu"}}]} +{"resourceType": "DocumentReference", "id": "revision-rhinoplasty.txt", "status": "current", "description": "anon ID: 364aa545eca0a9744bc67c5ad914e2e9e35dd39a5c1f1a8f902e533a8641238d", "type": {"coding": [{"system": "http://loinc.org", "code": "34111-5"}]}, "subject": {"reference": "Patient/A"}, "context": {"encounter": [{"reference": "Encounter/A"}]}, "date": "2022-12-05T15:33:59.978-05:00", "content": [{"attachment": {"contentType": "text/plain; charset=utf-8", "data": "CgpQUkVPUEVSQVRJVkUgRElBR05PU0lTOiBOYXNhbCBkZWZvcm1pdHksIHN0YXR1cyBwb3N0IHJoaW5vcGxhc3R5LgoKUE9TVE9QRVJBVElWRSBESUFHTk9TSVM6IFNhbWUuCgpQUk9DRURVUkU6IFJldmlzaW9uIHJoaW5vcGxhc3R5IChDUFQgMzA0NTApLiBMZWZ0IGNvbmNoYWwgY2FydGlsYWdlCmhhcnZlc3QgKENQVCAyMTIzNSkuCgpBTkVTVEhFU0lBOiBHZW5lcmFsLgoKSU5ESUNBVElPTlMgRk9SIFRIRSBQUk9DRURVUkU6IFRoaXMgcGF0aWVudCBpcyBhbiBvdGhlcndpc2UgaGVhbHRoeSBtYWxlCndobyBoYWQgYSBwcmV2aW91cyBuYXNhbCBmcmFjdHVyZS4gRHVyaW5nIGhpcyBoZWFsaW5nLCBwZXJpb3BlcmF0aXZlbHkgaGUgZGlkCnN1c3RhaW4gYSBob2NrZXkgcHVjayB0byB0aGUgbm9zZSByZXN1bHRpbmcgaW4gYSBzYWRkbGUtbm9zZSBkZWZvcm1pdHkgd2l0aApzZXB0YWwgaGVtYXRvbWEuIFRoZSBwYXRpZW50IGhlYWxlZCBzdGF0dXMgcG9zdCByaGlub3BsYXN0eSBhcyBhIHJlc3VsdCBidXQKd2FzIGxlZnQgd2l0aCBhIHBlcnNpc3RlbnQgc2FkZGxlLW5vc2UgZG9yc2FsIGRlZmVjdC4gVGhlIHBhdGllbnQgd2FzCmNvbnNlbnRlZCBmb3IgdGhlIGFib3ZlLXN0YXRlZCBwcm9jZWR1cmUuIFRoZSByaXNrcywgYmVuZWZpdHMsIGFuZAphbHRlcm5hdGl2ZXMgd2VyZSBkaXNjdXNzZWQuCgpERVNDUklQVElPTiBPRiBQUk9DRURVUkU6IFRoZSBwYXRpZW50IHdhcyBwcmVwcGVkIGFuZCBkcmFwZWQgaW4gdGhlIHVzdWFsCnN0ZXJpbGUgZmFzaGlvbi4gVGhlIHBhdGllbnQgZGlkIGhhdmUgYXBwcm94aW1hdGVseSAxMiBtTCBvZiBMaWRvY2FpbmUgd2l0aAplcGluZXBocmluZSAxJSB3aXRoIDE6MTAwLDAwMCBpbmZpbHRyYXRlZCBpbnRvIHRoZSBuYXNhbCBzb2Z0IHRpc3N1ZXMuIEluCmFkZGl0aW9uIHRvIHRoaXMsIGNvY2FpbmUgcGxlZGdldHMgd2VyZSBwbGFjZWQgdG8gYXNzaXN0IHdpdGggaGVtb3N0YXNpcy4KCkF0IHRoaXMgcG9pbnQsIGF0dGVudGlvbiB3YXMgdHVybmVkIHRvIHRoZSBsZWZ0IGVhci4gQXBwcm94aW1hdGVseSAzIG1MIG9mIDElCkxpZG9jYWluZSB3aXRoIDE6MTAwLDAwMCBlcGluZXBocmluZSB3YXMgaW5maWx0cmF0ZWQgaW50byB0aGUgc3ViY3V0YW5lb3VzCnRpc3N1ZXMgb2YgdGhlIGNvbmNoYWwgYnVsYi4gQmV0YWRpbmUgd2FzIHV0aWxpemVkIGZvciBwcmVwYXJhdGlvbi4gQSAxNSBibGFkZQp3YXMgdXNlZCB0byBpbmNpc2UgYWxvbmcgdGhlIHBvc3RlcmlvciBjb25jaGFsIGFyZWEgYW5kIGEgRnJlZXIgZWxldmF0b3Igd2FzCnV0aWxpemVkIHRvIGxpZnQgdGhlIHNvZnQgdGlzc3VlcyBvZmYgdGhlIGNvbmNoYWwgY2FydGlsYWdlIGluIGEKc3VibXVjb3BlcmljaG9uZHJpYWwgcGxhbmUuIEkgdGhlbiBjb21wbGV0ZWQgdGhpcyBhbG9uZyB0aGUgcG9zdGVyaW9yIGFzcGVjdApvZiB0aGUgY29uY2hhbCBjYXJ0aWxhZ2UsIHdhcyB0cmFuc2VjdGVkIGluIHRoZSBjb25jaGEgY2F2dW0gYW5kIGNvbmNoYSBjeW1iYSwKYm90aCB3ZXJlIGhhcnZlc3RlZC4gVGhlc2Ugd2VyZSBwbGFjZWQgYXNpZGUgaW4gc2FsaW5lLiBIZW1vc3Rhc2lzIHdhcwpvYnRhaW5lZCB3aXRoIGJpcG9sYXIgZWxlY3Ryb2NhdXRlcml6YXRpb24uIEJvdmllIGVsZWN0cm9jYXV0ZXJpemF0aW9uIHdhcwphbHNvIGVtcGxveWVkIGFzIG5lZWRlZC4gVGhlIGVudGlyZSBsZW5ndGggb2YgdGhlIHdvdW5kIHdhcyB0aGVuIGNsb3NlZCB3aXRoCjUtMCBwbGFpbiBydW5uaW5nIGxvY2tpbmcgc3V0dXJlLiBUaGUgcGF0aWVudCB0aGVuIGhhZCBhIFRlbGZhIHBsYWNlZCBib3RoCmFudGVyaW9yIGFuZCBwb3N0ZXJpb3IgdG8gdGhlIGNvbmNoYWwgZGVmZWN0IGFuZCBwbGFjZWQgaW4gYSBzYW5kd2ljaCBkcmVzc2luZwp1dGlsaXppbmcgYSAyLTAgUHJvbGVuZSBzdXR1cmUuIEFudGliaW90aWMgb2ludG1lbnQgd2FzIGFwcGxpZWQgZ2VuZXJvdXNseS4KCk5leHQsIGF0dGVudGlvbiB3YXMgdHVybmVkIHRvIG9wZW5pbmcgYW5kIGxpZnRpbmcgdGhlIHNvZnQgdGlzc3VlcyBvZiB0aGUKbm9zZS4gQSB0eXBpY2FsIGV4dGVybmFsIGNvbHVtZWxsYSBpbnZlcnRlZCBWIGd1bGwtd2luZyBpbmNpc2lvbiB3YXMgcGxhY2VkIG9uCnRoZSBjb2x1bWVsbGEgYW5kIHRyYWlsZWQgaW50byBhIG1hcmdpbmFsIGluY2lzaW9uLiBUaGUgc29mdCB0aXNzdWVzIG9mIHRoZQpub3NlIHdlcmUgdGhlbiBlbGV2YXRlZCB1c2luZyBjdXJ2ZWQgc2hhcnAgc2Npc3NvcnMgYW5kIE1ldHplbmJhdW1zLiBTb2Z0CnRpc3N1ZXMgd2VyZSBlbGV2YXRlZCBvdmVyIHRoZSBsb3dlciBsYXRlcmFsIGNhcnRpbGFnZXMsIHVwcGVyIGxhdGVyYWwKY2FydGlsYWdlcyBvbnRvIHRoZSBuYXNhbCBkb3JzdW0uIEF0IHRoaXMgcG9pbnQsIGF0dGVudGlvbiB3YXMgdHVybmVkIHRvCm9zdGVvdG9taWVzIGFuZCBleGFtaW5hdGlvbiBvZiB0aGUgZXh0ZXJuYWwgY2FydGlsYWdlcy4KClRoZSBwYXRpZW50IGRpZCBoYXZlIHZlcnkgYnJvYWQgbG93ZXIgbGF0ZXJhbCBjYXJ0aWxhZ2VzIGxlYWRpbmcgdG8gYSBidWxib3VzCnRpcC4gVGhlIGxvd2VyIGxhdGVyYWwgY2FydGlsYWdlcyB3ZXJlIHRyaW1tZWQgaW4gYSBzeW1tZXRyaWNhbCBmYXNoaW9uCmxlYXZpbmcgYXQgbGVhc3QgOCBtbSBvZiBsb3dlciBsYXRlcmFsIGNhcnRpbGFnZSBiaWxhdGVyYWxseSBhbG9uZyB0aGUgbGF0ZXJhbAphc3BlY3QuIEhhdmluZyBjb21wbGV0ZWQgdGhpcywgdGhlIHBhdGllbnQgaGFkIG1lZGlhbCBhbmQgbGF0ZXJhbCBvc3Rlb3RvbWllcwpwZXJmb3JtZWQgd2l0aCBhIDItbW0gb3N0ZW90b21lLiBUaGVzZSB3ZXJlIGRvbmUgdHJhbnNtdWNvc2FsbHkgYWZ0ZXIKZWxldmF0aW5nIHRoZSB0cmFjdCB1c2luZyBhIENvdHRsZSBlbGV2YXRvci4gRGlyZWN0IGhlbW9zdGFzaXMgcHJlc3N1cmUgd2FzCmFwcGxpZWQgdG8gYXNzaXN0IHdpdGggYnJ1aXNpbmcuCgpOZXh0LCBhdHRlbnRpb24gd2FzIHR1cm5lZCB0byB0aXAgbWVjaGFuaXNtcy4gVGhlIHBhdGllbnQgaGFkIGEgc2VyaWVzIG9mCmRvdWJsZS1kb21lIHN1dHVyZXMgcGxhY2VkIGludG8gdGhlIG5hc2FsIHRpcC4gVGhlbiwgNS0wIERleG9uIHdhcyBlbXBsb3llZApmb3IgaW50cmFkb21hbCBzdXR1cmluZywgNS0wIGNsZWFyIFByb2xlbmUgd2FzIHVzZWQgZm9yIGludGVyZG9tYWwgc3V0dXJpbmcuCkhhdmluZyBjb21wbGV0ZWQgdGhpcywgYSA1LTAgY2xlYXIgUHJvbGVuZSBhbGFyIHNwYW5uaW5nIHN1dHVyZSB3YXMgZW1wbG95ZWQKdG8gbmFycm93IHRoZSBzdXBlcmlvciB0aXAgYXJlYS4KCk5leHQsIGF0dGVudGlvbiB3YXMgdHVybmVkIHRvIGRvcnNhbCBhdWdtZW50YXRpb24uIEEgR29yZS1UZXggc21hbGwgaW1wbGFudApoYWQgYmVlbiBzZWxlY3RlZCwgcHJldmlvdXNseSBpbmNpc2VkLiBUaGlzIHdhcyB0YWtlbiB0byB0aGUgYmFjayB0YWJsZSBhbmQKY2FydmVkIHVuZGVyIHN0ZXJpbGUgY29uZGl0aW9ucy4gVGhlIHBhdGllbnQgdGhlbiBoYWQgdGhlIGltcGxhbnQgcGxhY2VkIGludG8KdGhlIHN1cGVyLXRpcCBhcmVhIHRvIGFzc2lzdCB3aXRoIHN1cHBvcnQgb2YgdGhlIG5hc2FsIGRvcnN1bS4gSXQgd2FzIHBsYWNlZAppbnRvIGEgcHJlY2lzZSBwb2NrZXQgYW5kIHJlbWFpbmVkIGluIHRoZSBtaWRsaW5lLgoKTmV4dCwgYXR0ZW50aW9uIHdhcyB0dXJuZWQgdG8gcGVyZm9ybWluZyBhIGNvbHVtZWxsYSBzdHJ1dC4gVGhlIGNhcnRpbGFnZSBmcm9tCnRoZSBjb25jaGEgd2FzIHNoYXBlZCBpbnRvIGEgc3RydXQgYW5kIHBsYWNlZCBpbnRvIGEgcHJlY2lzaW9uIHBvY2tldCBiZXR3ZWVuCnRoZSBtZWRpYWwgZm9vdHBsYXRlIG9mIHRoZSBsb3dlciBsYXRlcmFsIGNhcnRpbGFnZS4gVGhpcyB3YXMgZml4ZWQgaW50bwpwb3NpdGlvbiB1dGlsaXppbmcgYSA1LTAgRGV4b24gc3V0dXJlLgoKSGF2aW5nIGNvbXBsZXRlZCBwbGFjZW1lbnQgb2YgYWxsIGF1Z21lbnRhdGlvbiBncmFmdHMsIHRoZSBwYXRpZW50IHdhcwpleGFtaW5lZCBmb3IgaGVtb3N0YXNpcy4gVGhlIGV4dGVybmFsIGNvbHVtZWxsYSBpbnZlcnRlZCBndWxsLXdpbmcgaW5jaXNpb24KYWxvbmcgdGhlIG5hc2FsIHRpcCB3YXMgY2xvc2VkIHdpdGggYSBzZXJpZXMgb2YgaW50ZXJydXB0ZWQgZXZlcnRpbmcgNi0wIGJsYWNrCm55bG9uIHN1dHVyZXMuIFRoZSBlbnRpcmUgbWFyZ2luYWwgaW5jaXNpb25zIGZvciBjb3NtZXRpYyByaGlub3BsYXN0eSB3ZXJlCmNsb3NlZCB1dGlsaXppbmcgYSBzZXJpZXMgb2YgNS0wIHBsYWluIGludGVycnVwdGVkIHN1dHVyZXMuCgpBdCB0aGUgdGVybWluYXRpb24gb2YgdGhlIGNhc2UsIHRoZSBlYXIgd2FzIGluc3BlY3RlZCBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZQpjb25jaGFsIGNhcnRpbGFnZSBoYXJ2ZXN0IHdhcyBoZW1vc3RhdGljLiBUaGVyZSB3YXMgbm8gZXZpZGVuY2Ugb2YgaGVtYXRvbWEsCmFuZCB0aGUgcGF0aWVudCBoYWQgYSBzZXJpZXMgb2YgYnJvd24gU3RlcmktU3RyaXBzIGFuZCBBcXVhcGxhc3QgY2FzdCBwbGFjZWQKb3ZlciB0aGUgbmFzYWwgZG9yc3VtLiBUaGUgaW5uZXIgbmFzYWwgYXJlYSB3YXMgdGhlbiBleGFtaW5lZCBhdCB0aGUKdGVybWluYXRpb24gb2YgdGhlIGNhc2UgYW5kIGl0IHNlZW1lZCB0byBiZSBoZW1vc3RhdGljIGFzIHdlbGwuCgpUaGUgcGF0aWVudCB3YXMgdHJhbnNmZXJyZWQgdG8gdGhlIFBBQ1UgaW4gc3RhYmxlIGNvbmRpdGlvbi4gSGUgd2FzIGNoYXJnZWQgdG8KaG9tZSBvbiBhbnRpYmlvdGljcyB0byBwcmV2ZW50IGluZmVjdGlvbiBib3RoIGZyb20gdGhlIGxlZnQgZWFyIGNvbmNoYWwKY2FydGlsYWdlIGhhcnZlc3QgYW5kIGFsc28gdGhlIEdvcmUtVGV4IGltcGxhbnQgYXJlYS4gSGUgd2FzIGFza2VkIHRvIGZvbGxvdwp1cCBpbiA0IGRheXMgZm9yIHJlbW92YWwgb2YgdGhlIGJvbHN0ZXIgb3Zlcmx5aW5nIHRoZSBjb25jaGFsIGNhcnRpbGFnZQpoYXJ2ZXN0Lg=="}}]} diff --git a/tests/data/nlp-regression/input/README.md b/tests/data/nlp-regression/input/README.md new file mode 100644 index 00000000..7f3f892d --- /dev/null +++ b/tests/data/nlp-regression/input/README.md @@ -0,0 +1,8 @@ +These DocRefs note texts were grabbed from curated (non-PHI) examples in the +[ctakes-examples](https://github.com/Machine-Learning-for-Medical-Language/ctakes-examples) +repo. + +The filename used is the DocRef `id` field. + +I chose four notes that had symptoms only caught by our custom bsv file +and one note that had no symptoms found, for variety. diff --git a/tests/data/nlp-regression/phi/codebook.json b/tests/data/nlp-regression/phi/codebook.json new file mode 100644 index 00000000..00fa9afb --- /dev/null +++ b/tests/data/nlp-regression/phi/codebook.json @@ -0,0 +1 @@ +{"version": 1, "id_salt": "41c2205831f93d9620beaa1cae9b3dc9721098ee191795562240a0452cd4fa17"}