Draft dQM CMS Content Implementation Guide
2025.1.0 - CI Build

Draft dQM CMS Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2025.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/dqm-content-cms-2025/ and changes regularly. See the Directory of published versions

: CMS129FHIRProstCaBoneScanUse - JSON Representation

Draft as of 2026-09-19

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "CMS129FHIRProstCaBoneScanUse",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n  <table class=\"narrative-table\">\n    <tbody>\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"metadata\"> </a>Metadata</th>\n\n\n</tr>\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Version</th>\n\n\n\n<td class=\"content-container\">1.1.000</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Status</th>\n\n\n\n<td class=\"content-container\">Draft</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Type</th>\n\n\n\n<td class=\"content-container\">\n    <a href=\"http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a>#logic-library\n\n\n</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\"><a name=\"parameters\"> </a>Parameters</th>\n\n\n</tr>\n\n\n<tr>\n\n\n<th scope=\"row\" class=\"row-header\">Parameter</th>\n\n\n\n<td class=\"content-container\">None</td>\n\n\n</tr>\n\n\n\n\n\n\n\n\n  <tr>\n\n\n<th colspan=\"2\" scope=\"row\" class=\"row-header\">Library Content</th>\n\n\n</tr>\n  \n    \n    <tr>\n      <th scope=\"row\" class=\"row-header\">CQL Content</th>\n      <td>\n        <a name=\"cql-content\"> </a>\n        <pre style=\"border: none;\" class=\"content-container highlight language-cql\"><code class=\"language-cql\">/*\nNOTE: For use by March 2026 US Realm Connectathon participants for internal use only. Not for use or distribution in commercial products.\n*/\nlibrary CMS129FHIRProstCaBoneScanUse version '1.1.000'\n\nusing USQualityCore version '0.1.0-cibuild'\nusing USCore version '6.1.0-derived'\nusing FHIR version '4.0.1'\n\ninclude hl7.fhir.uv.cql.FHIRHelpers version '4.0.1' called FHIRHelpers\ninclude hl7.fhir.uv.cql.FHIRCommon version '2.0.0' called FHIRCommon\ninclude hl7.fhir.us.cql.USCoreCommon version '2.0.0-ballot' called USCoreCommon\ninclude hl7.fhir.us.cql.USCoreElements version '2.0.0-ballot' called USCoreElements\n\ninclude USQualityCoreCommon version '0.1.0-cibuild' called USQualityCoreCommon\ninclude SupplementalDataElements version '6.1.000' called SDE\ninclude Status version '2.1.000' called Status\n\ncodesystem &quot;LOINC&quot;: 'http://loinc.org'\ncodesystem &quot;SNOMEDCT&quot;: 'http://snomed.info/sct'\ncodesystem &quot;UCUM&quot;: 'http://unitsofmeasure.org'\n\nvalueset &quot;Bone Scan&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.320'\nvalueset &quot;Pain Warranting Further Investigation for Prostate Cancer&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.451'\nvalueset &quot;Prostate Cancer&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.319'\nvalueset &quot;Prostate Cancer Treatment&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.398'\nvalueset &quot;Prostate Specific Antigen Test&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.401'\nvalueset &quot;Salvage Therapy&quot;: 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.399'\n\ncode &quot;American Joint Committee on Cancer cT1a (qualifier value)&quot;: '1228892002' from &quot;SNOMEDCT&quot; display 'American Joint Committee on Cancer cT1a (qualifier value)'\ncode &quot;American Joint Committee on Cancer cT1b (qualifier value)&quot;: '1228895000' from &quot;SNOMEDCT&quot; display 'American Joint Committee on Cancer cT1b (qualifier value)'\ncode &quot;American Joint Committee on Cancer cT1c (qualifier value)&quot;: '1228899006' from &quot;SNOMEDCT&quot; display 'American Joint Committee on Cancer cT1c (qualifier value)'\ncode &quot;American Joint Committee on Cancer cT2a (qualifier value)&quot;: '1228931008' from &quot;SNOMEDCT&quot; display 'American Joint Committee on Cancer cT2a (qualifier value)'\ncode &quot;Gleason score in Specimen Qualitative&quot;: '35266-6' from &quot;LOINC&quot; display 'Gleason score in Specimen Qualitative'\ncode &quot;Procedure reason record (record artifact)&quot;: '433611000124109' from &quot;SNOMEDCT&quot; display 'Procedure reason record (record artifact)'\ncode &quot;Tumor staging (tumor staging)&quot;: '254292007' from &quot;SNOMEDCT&quot; display 'Tumor staging (tumor staging)'\n\nparameter &quot;Measurement Period&quot; Interval&lt;DateTime&gt;\n  default Interval[@2026-01-01T00:00:00.000Z, @2027-01-01T00:00:00.000Z)\n\ncontext Patient\n\ndefine &quot;SDE Ethnicity&quot;:\n  SDE.&quot;SDE Ethnicity&quot;\n\ndefine &quot;SDE Payer&quot;:\n  SDE.&quot;SDE Payer&quot;\n\ndefine &quot;SDE Race&quot;:\n  SDE.&quot;SDE Race&quot;\n\ndefine &quot;SDE Sex&quot;:\n  SDE.&quot;SDE Sex&quot;\n\ndefine &quot;Initial Population&quot;:\n  exists &quot;Prostate Cancer Diagnosis&quot;\n\ndefine &quot;Denominator&quot;:\n  &quot;Initial Population&quot;\n    and &quot;First Prostate Cancer Treatment during day of Measurement Period&quot; is not null\n    and &quot;Most Recent Prostate Cancer Staging Tumor Size T1a to T2a&quot; is not null\n    and &quot;Most Recent PSA Test Result is Low&quot;\n    and &quot;Most Recent Gleason Score is Low&quot;\n\ndefine &quot;Numerator&quot;:\n  not exists &quot;Bone Scan Study Performed&quot;\n\ndefine &quot;Denominator Exceptions&quot;:\n  &quot;Has Diagnosis of Pain related to Prostate Cancer&quot;\n    or &quot;Has Salvage Therapy Performed after Prostate Cancer Diagnosis&quot;\n    or &quot;Has Bone Scan Study Performed with Documented Reason&quot;\n\ndefine &quot;Bone Scan Study Performed&quot;:\n  [ObservationClinicalResult: &quot;Bone Scan&quot;] BoneScan\n    with &quot;Prostate Cancer Diagnosis&quot; ActiveProstateCancer\n      such that BoneScan.effective.toInterval ( ) starts after start of ActiveProstateCancer.prevalenceInterval ( )\n    where BoneScan.effective.toInterval ( ) ends during day of &quot;Measurement Period&quot;\n      and BoneScan.status in { 'final', 'amended', 'corrected' }\n\ndefine &quot;Has Bone Scan Study Performed with Documented Reason&quot;:\n  exists &quot;Bone Scan Study Performed&quot; BoneScanAfterDiagnosis\n    where BoneScanAfterDiagnosis.value ~ &quot;Procedure reason record (record artifact)&quot;\n\ndefine &quot;Has Diagnosis of Pain related to Prostate Cancer&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  //   exists ( ( [ConditionProblemsHealthConcerns: &quot;Pain Warranting Further Investigation for Prostate Cancer&quot;]\n  //       union [ConditionEncounterDiagnosis: &quot;Pain Warranting Further Investigation for Prostate Cancer&quot;] ) ProstateCancerPain\n  exists ( ( [FHIR.Condition: &quot;Pain Warranting Further Investigation for Prostate Cancer&quot;] ) ProstateCancerPain\n      with &quot;Prostate Cancer Diagnosis&quot; ActiveProstateCancer\n        such that ProstateCancerPain.prevalenceInterval ( ) starts after start of ActiveProstateCancer.prevalenceInterval ( )\n          and ProstateCancerPain.isVerified ( )\n  )\n\ndefine &quot;First Prostate Cancer Treatment during day of Measurement Period&quot;:\n  First([Procedure: &quot;Prostate Cancer Treatment&quot;] ProstateCancerTreatment\n      where ProstateCancerTreatment.performed.toInterval ( ) ends during day of &quot;Measurement Period&quot;\n        and ProstateCancerTreatment.status = 'completed'\n      sort by start of performed.toInterval ( )\n  )\n\ndefine &quot;Most Recent PSA Test Result is Low&quot;:\n  ( Last([LaboratoryResultObservation: &quot;Prostate Specific Antigen Test&quot;] PSATest\n      with &quot;Most Recent Prostate Cancer Staging Tumor Size T1a to T2a&quot; MostRecentProstateCancerStaging\n        such that PSATest.effective.toInterval ( ) starts before MostRecentProstateCancerStaging.effective.toInterval ( )\n          and PSATest.status in { 'final', 'amended', 'corrected' }\n      sort by start of effective.toInterval ( )\n  ) ) LastPSATest\n    return LastPSATest.value as Quantity &lt; 10 'ng/mL'\n\ndefine &quot;Has Salvage Therapy Performed after Prostate Cancer Diagnosis&quot;:\n  exists ( [Procedure: &quot;Salvage Therapy&quot;] SalvageTherapy\n      with &quot;Prostate Cancer Diagnosis&quot; ActiveProstateCancer\n        such that SalvageTherapy.performed.toInterval ( ) starts after start of ActiveProstateCancer.prevalenceInterval ( )\n          and SalvageTherapy.status = 'completed'\n  )\n\ndefine &quot;Most Recent Gleason Score is Low&quot;:\n  ( Last([ObservationClinicalResult: &quot;Gleason score in Specimen Qualitative&quot;] GleasonScore\n      with &quot;First Prostate Cancer Treatment during day of Measurement Period&quot; FirstProstateCancerTreatment\n        such that GleasonScore.effective.toInterval ( ) starts before start of FirstProstateCancerTreatment.performed.toInterval ( )\n          and GleasonScore.status in { 'final', 'amended', 'corrected' }\n      sort by start of effective.toInterval ( )\n  ) ) LastGleasonScore\n    return LastGleasonScore.value as FHIR.integer &lt;= 6\n\ndefine &quot;Most Recent Prostate Cancer Staging Tumor Size T1a to T2a&quot;:\n  ( Last(([ObservationClinicalResult: &quot;Tumor staging (tumor staging)&quot;] TumorStaging\n    // TODO: determine feasibility of ObservationClinicalResult having basedOn reference to Condition\n    // where exists(&quot;Prostate Cancer Diagnosis&quot; ActiveProstateCancer where TumorStaging.basedOn.references(ActiveProstateCancer))\n    \n    ) ProstateCancerStaging\n      with &quot;First Prostate Cancer Treatment during day of Measurement Period&quot; FirstProstateCancerTreatment\n        such that ProstateCancerStaging.effective.toInterval ( ) starts before start of FirstProstateCancerTreatment.performed.toInterval ( )\n          and ProstateCancerStaging.status in { 'final', 'amended', 'corrected' }\n      sort by start of effective.toInterval ( )\n  ) ) LastProstateCancerStaging\n    where ( LastProstateCancerStaging.value ~ &quot;American Joint Committee on Cancer cT1a (qualifier value)&quot;\n        or LastProstateCancerStaging.value ~ &quot;American Joint Committee on Cancer cT1b (qualifier value)&quot;\n        or LastProstateCancerStaging.value ~ &quot;American Joint Committee on Cancer cT1c (qualifier value)&quot;\n        or LastProstateCancerStaging.value ~ &quot;American Joint Committee on Cancer cT2a (qualifier value)&quot;\n    )\n\ndefine &quot;Prostate Cancer Diagnosis&quot;:\n  // [E-13] base FHIR.Condition retrieve (defect-tracking/engine-issues.md E-13)\n  // Original:\n  //   [ConditionProblemsHealthConcerns: &quot;Prostate Cancer&quot;] ProstateCancer\n  [FHIR.Condition: &quot;Prostate Cancer&quot;] ProstateCancer\n    where ProstateCancer.prevalenceInterval ( ) overlaps day of &quot;Measurement Period&quot;\n      and ProstateCancer.isVerified ( )\n\n/*\n@note: When possible, this function should be migrated to QICoreCommon.\n@description: Returns true if the given Condition has a verification status of &quot;confirmed&quot;, &quot;unconfirmed&quot;, &quot;provisional&quot;, or &quot;differential&quot;\n*/\n\n\ndefine fluent function isVerified(condition Choice&lt;ConditionEncounterDiagnosis, ConditionProblemsHealthConcerns&gt;):\n  condition.verificationStatus is not null implies ( condition.verificationStatus ~ Status.&quot;confirmed&quot;\n      or condition.verificationStatus ~ Status.&quot;unconfirmed&quot;\n      or condition.verificationStatus ~ Status.&quot;provisional&quot;\n      or condition.verificationStatus ~ Status.&quot;differential&quot;\n  )</code></pre>\n      </td>\n    </tr>\n    \n  \n\n\n\n<tr>\n  <th colspan=\"2\" scope=\"row\" class=\"row-header\">Generated using version 0.5.6 of the sample-content-ig Liquid templates</th>\n</tr>\n\n    </tbody>\n  </table>\n</div>"
  },
  "extension" : [
    {
      "url" : "http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-softwaresystem",
      "valueReference" : {
        "reference" : "Device/cqf-tooling"
      }
    }
  ],
  "url" : "https://madie.cms.gov/Library/CMS129FHIRProstCaBoneScanUse",
  "version" : "1.1.000",
  "name" : "CMS129FHIRProstCaBoneScanUse",
  "status" : "draft",
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2026-09-19T16:31:14+00:00",
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "LyoKTk9URTogRm9yIHVzZSBieSBNYXJjaCAyMDI2IFVTIFJlYWxtIENvbm5lY3RhdGhvbiBwYXJ0aWNpcGFudHMgZm9yIGludGVybmFsIHVzZSBvbmx5LiBOb3QgZm9yIHVzZSBvciBkaXN0cmlidXRpb24gaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKi8KbGlicmFyeSBDTVMxMjlGSElSUHJvc3RDYUJvbmVTY2FuVXNlIHZlcnNpb24gJzEuMS4wMDAnCgp1c2luZyBVU1F1YWxpdHlDb3JlIHZlcnNpb24gJzAuMS4wLWNpYnVpbGQnCnVzaW5nIFVTQ29yZSB2ZXJzaW9uICc2LjEuMC1kZXJpdmVkJwp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4xJwoKaW5jbHVkZSBobDcuZmhpci51di5jcWwuRkhJUkhlbHBlcnMgdmVyc2lvbiAnNC4wLjEnIGNhbGxlZCBGSElSSGVscGVycwppbmNsdWRlIGhsNy5maGlyLnV2LmNxbC5GSElSQ29tbW9uIHZlcnNpb24gJzIuMC4wJyBjYWxsZWQgRkhJUkNvbW1vbgppbmNsdWRlIGhsNy5maGlyLnVzLmNxbC5VU0NvcmVDb21tb24gdmVyc2lvbiAnMi4wLjAtYmFsbG90JyBjYWxsZWQgVVNDb3JlQ29tbW9uCmluY2x1ZGUgaGw3LmZoaXIudXMuY3FsLlVTQ29yZUVsZW1lbnRzIHZlcnNpb24gJzIuMC4wLWJhbGxvdCcgY2FsbGVkIFVTQ29yZUVsZW1lbnRzCgppbmNsdWRlIFVTUXVhbGl0eUNvcmVDb21tb24gdmVyc2lvbiAnMC4xLjAtY2lidWlsZCcgY2FsbGVkIFVTUXVhbGl0eUNvcmVDb21tb24KaW5jbHVkZSBTdXBwbGVtZW50YWxEYXRhRWxlbWVudHMgdmVyc2lvbiAnNi4xLjAwMCcgY2FsbGVkIFNERQppbmNsdWRlIFN0YXR1cyB2ZXJzaW9uICcyLjEuMDAwJyBjYWxsZWQgU3RhdHVzCgpjb2Rlc3lzdGVtICJMT0lOQyI6ICdodHRwOi8vbG9pbmMub3JnJwpjb2Rlc3lzdGVtICJTTk9NRURDVCI6ICdodHRwOi8vc25vbWVkLmluZm8vc2N0Jwpjb2Rlc3lzdGVtICJVQ1VNIjogJ2h0dHA6Ly91bml0c29mbWVhc3VyZS5vcmcnCgp2YWx1ZXNldCAiQm9uZSBTY2FuIjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjMyMCcKdmFsdWVzZXQgIlBhaW4gV2FycmFudGluZyBGdXJ0aGVyIEludmVzdGlnYXRpb24gZm9yIFByb3N0YXRlIENhbmNlciI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy40NTEnCnZhbHVlc2V0ICJQcm9zdGF0ZSBDYW5jZXIiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuMzE5Jwp2YWx1ZXNldCAiUHJvc3RhdGUgQ2FuY2VyIFRyZWF0bWVudCI6ICdodHRwOi8vY3RzLm5sbS5uaWguZ292L2ZoaXIvVmFsdWVTZXQvMi4xNi44NDAuMS4xMTM4ODMuMy41MjYuMy4zOTgnCnZhbHVlc2V0ICJQcm9zdGF0ZSBTcGVjaWZpYyBBbnRpZ2VuIFRlc3QiOiAnaHR0cDovL2N0cy5ubG0ubmloLmdvdi9maGlyL1ZhbHVlU2V0LzIuMTYuODQwLjEuMTEzODgzLjMuNTI2LjMuNDAxJwp2YWx1ZXNldCAiU2FsdmFnZSBUaGVyYXB5IjogJ2h0dHA6Ly9jdHMubmxtLm5paC5nb3YvZmhpci9WYWx1ZVNldC8yLjE2Ljg0MC4xLjExMzg4My4zLjUyNi4zLjM5OScKCmNvZGUgIkFtZXJpY2FuIEpvaW50IENvbW1pdHRlZSBvbiBDYW5jZXIgY1QxYSAocXVhbGlmaWVyIHZhbHVlKSI6ICcxMjI4ODkyMDAyJyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnQW1lcmljYW4gSm9pbnQgQ29tbWl0dGVlIG9uIENhbmNlciBjVDFhIChxdWFsaWZpZXIgdmFsdWUpJwpjb2RlICJBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMWIgKHF1YWxpZmllciB2YWx1ZSkiOiAnMTIyODg5NTAwMCcgZnJvbSAiU05PTUVEQ1QiIGRpc3BsYXkgJ0FtZXJpY2FuIEpvaW50IENvbW1pdHRlZSBvbiBDYW5jZXIgY1QxYiAocXVhbGlmaWVyIHZhbHVlKScKY29kZSAiQW1lcmljYW4gSm9pbnQgQ29tbWl0dGVlIG9uIENhbmNlciBjVDFjIChxdWFsaWZpZXIgdmFsdWUpIjogJzEyMjg4OTkwMDYnIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMWMgKHF1YWxpZmllciB2YWx1ZSknCmNvZGUgIkFtZXJpY2FuIEpvaW50IENvbW1pdHRlZSBvbiBDYW5jZXIgY1QyYSAocXVhbGlmaWVyIHZhbHVlKSI6ICcxMjI4OTMxMDA4JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnQW1lcmljYW4gSm9pbnQgQ29tbWl0dGVlIG9uIENhbmNlciBjVDJhIChxdWFsaWZpZXIgdmFsdWUpJwpjb2RlICJHbGVhc29uIHNjb3JlIGluIFNwZWNpbWVuIFF1YWxpdGF0aXZlIjogJzM1MjY2LTYnIGZyb20gIkxPSU5DIiBkaXNwbGF5ICdHbGVhc29uIHNjb3JlIGluIFNwZWNpbWVuIFF1YWxpdGF0aXZlJwpjb2RlICJQcm9jZWR1cmUgcmVhc29uIHJlY29yZCAocmVjb3JkIGFydGlmYWN0KSI6ICc0MzM2MTEwMDAxMjQxMDknIGZyb20gIlNOT01FRENUIiBkaXNwbGF5ICdQcm9jZWR1cmUgcmVhc29uIHJlY29yZCAocmVjb3JkIGFydGlmYWN0KScKY29kZSAiVHVtb3Igc3RhZ2luZyAodHVtb3Igc3RhZ2luZykiOiAnMjU0MjkyMDA3JyBmcm9tICJTTk9NRURDVCIgZGlzcGxheSAnVHVtb3Igc3RhZ2luZyAodHVtb3Igc3RhZ2luZyknCgpwYXJhbWV0ZXIgIk1lYXN1cmVtZW50IFBlcmlvZCIgSW50ZXJ2YWw8RGF0ZVRpbWU+CiAgZGVmYXVsdCBJbnRlcnZhbFtAMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaLCBAMjAyNy0wMS0wMVQwMDowMDowMC4wMDBaKQoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgIlNERSBFdGhuaWNpdHkiOgogIFNERS4iU0RFIEV0aG5pY2l0eSIKCmRlZmluZSAiU0RFIFBheWVyIjoKICBTREUuIlNERSBQYXllciIKCmRlZmluZSAiU0RFIFJhY2UiOgogIFNERS4iU0RFIFJhY2UiCgpkZWZpbmUgIlNERSBTZXgiOgogIFNERS4iU0RFIFNleCIKCmRlZmluZSAiSW5pdGlhbCBQb3B1bGF0aW9uIjoKICBleGlzdHMgIlByb3N0YXRlIENhbmNlciBEaWFnbm9zaXMiCgpkZWZpbmUgIkRlbm9taW5hdG9yIjoKICAiSW5pdGlhbCBQb3B1bGF0aW9uIgogICAgYW5kICJGaXJzdCBQcm9zdGF0ZSBDYW5jZXIgVHJlYXRtZW50IGR1cmluZyBkYXkgb2YgTWVhc3VyZW1lbnQgUGVyaW9kIiBpcyBub3QgbnVsbAogICAgYW5kICJNb3N0IFJlY2VudCBQcm9zdGF0ZSBDYW5jZXIgU3RhZ2luZyBUdW1vciBTaXplIFQxYSB0byBUMmEiIGlzIG5vdCBudWxsCiAgICBhbmQgIk1vc3QgUmVjZW50IFBTQSBUZXN0IFJlc3VsdCBpcyBMb3ciCiAgICBhbmQgIk1vc3QgUmVjZW50IEdsZWFzb24gU2NvcmUgaXMgTG93IgoKZGVmaW5lICJOdW1lcmF0b3IiOgogIG5vdCBleGlzdHMgIkJvbmUgU2NhbiBTdHVkeSBQZXJmb3JtZWQiCgpkZWZpbmUgIkRlbm9taW5hdG9yIEV4Y2VwdGlvbnMiOgogICJIYXMgRGlhZ25vc2lzIG9mIFBhaW4gcmVsYXRlZCB0byBQcm9zdGF0ZSBDYW5jZXIiCiAgICBvciAiSGFzIFNhbHZhZ2UgVGhlcmFweSBQZXJmb3JtZWQgYWZ0ZXIgUHJvc3RhdGUgQ2FuY2VyIERpYWdub3NpcyIKICAgIG9yICJIYXMgQm9uZSBTY2FuIFN0dWR5IFBlcmZvcm1lZCB3aXRoIERvY3VtZW50ZWQgUmVhc29uIgoKZGVmaW5lICJCb25lIFNjYW4gU3R1ZHkgUGVyZm9ybWVkIjoKICBbT2JzZXJ2YXRpb25DbGluaWNhbFJlc3VsdDogIkJvbmUgU2NhbiJdIEJvbmVTY2FuCiAgICB3aXRoICJQcm9zdGF0ZSBDYW5jZXIgRGlhZ25vc2lzIiBBY3RpdmVQcm9zdGF0ZUNhbmNlcgogICAgICBzdWNoIHRoYXQgQm9uZVNjYW4uZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBhZnRlciBzdGFydCBvZiBBY3RpdmVQcm9zdGF0ZUNhbmNlci5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApCiAgICB3aGVyZSBCb25lU2Nhbi5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkgZW5kcyBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgIGFuZCBCb25lU2Nhbi5zdGF0dXMgaW4geyAnZmluYWwnLCAnYW1lbmRlZCcsICdjb3JyZWN0ZWQnIH0KCmRlZmluZSAiSGFzIEJvbmUgU2NhbiBTdHVkeSBQZXJmb3JtZWQgd2l0aCBEb2N1bWVudGVkIFJlYXNvbiI6CiAgZXhpc3RzICJCb25lIFNjYW4gU3R1ZHkgUGVyZm9ybWVkIiBCb25lU2NhbkFmdGVyRGlhZ25vc2lzCiAgICB3aGVyZSBCb25lU2NhbkFmdGVyRGlhZ25vc2lzLnZhbHVlIH4gIlByb2NlZHVyZSByZWFzb24gcmVjb3JkIChyZWNvcmQgYXJ0aWZhY3QpIgoKZGVmaW5lICJIYXMgRGlhZ25vc2lzIG9mIFBhaW4gcmVsYXRlZCB0byBQcm9zdGF0ZSBDYW5jZXIiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICAgZXhpc3RzICggKCBbQ29uZGl0aW9uUHJvYmxlbXNIZWFsdGhDb25jZXJuczogIlBhaW4gV2FycmFudGluZyBGdXJ0aGVyIEludmVzdGlnYXRpb24gZm9yIFByb3N0YXRlIENhbmNlciJdCiAgLy8gICAgICAgdW5pb24gW0NvbmRpdGlvbkVuY291bnRlckRpYWdub3NpczogIlBhaW4gV2FycmFudGluZyBGdXJ0aGVyIEludmVzdGlnYXRpb24gZm9yIFByb3N0YXRlIENhbmNlciJdICkgUHJvc3RhdGVDYW5jZXJQYWluCiAgZXhpc3RzICggKCBbRkhJUi5Db25kaXRpb246ICJQYWluIFdhcnJhbnRpbmcgRnVydGhlciBJbnZlc3RpZ2F0aW9uIGZvciBQcm9zdGF0ZSBDYW5jZXIiXSApIFByb3N0YXRlQ2FuY2VyUGFpbgogICAgICB3aXRoICJQcm9zdGF0ZSBDYW5jZXIgRGlhZ25vc2lzIiBBY3RpdmVQcm9zdGF0ZUNhbmNlcgogICAgICAgIHN1Y2ggdGhhdCBQcm9zdGF0ZUNhbmNlclBhaW4ucHJldmFsZW5jZUludGVydmFsICggKSBzdGFydHMgYWZ0ZXIgc3RhcnQgb2YgQWN0aXZlUHJvc3RhdGVDYW5jZXIucHJldmFsZW5jZUludGVydmFsICggKQogICAgICAgICAgYW5kIFByb3N0YXRlQ2FuY2VyUGFpbi5pc1ZlcmlmaWVkICggKQogICkKCmRlZmluZSAiRmlyc3QgUHJvc3RhdGUgQ2FuY2VyIFRyZWF0bWVudCBkdXJpbmcgZGF5IG9mIE1lYXN1cmVtZW50IFBlcmlvZCI6CiAgRmlyc3QoW1Byb2NlZHVyZTogIlByb3N0YXRlIENhbmNlciBUcmVhdG1lbnQiXSBQcm9zdGF0ZUNhbmNlclRyZWF0bWVudAogICAgICB3aGVyZSBQcm9zdGF0ZUNhbmNlclRyZWF0bWVudC5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkgZW5kcyBkdXJpbmcgZGF5IG9mICJNZWFzdXJlbWVudCBQZXJpb2QiCiAgICAgICAgYW5kIFByb3N0YXRlQ2FuY2VyVHJlYXRtZW50LnN0YXR1cyA9ICdjb21wbGV0ZWQnCiAgICAgIHNvcnQgYnkgc3RhcnQgb2YgcGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgKQoKZGVmaW5lICJNb3N0IFJlY2VudCBQU0EgVGVzdCBSZXN1bHQgaXMgTG93IjoKICAoIExhc3QoW0xhYm9yYXRvcnlSZXN1bHRPYnNlcnZhdGlvbjogIlByb3N0YXRlIFNwZWNpZmljIEFudGlnZW4gVGVzdCJdIFBTQVRlc3QKICAgICAgd2l0aCAiTW9zdCBSZWNlbnQgUHJvc3RhdGUgQ2FuY2VyIFN0YWdpbmcgVHVtb3IgU2l6ZSBUMWEgdG8gVDJhIiBNb3N0UmVjZW50UHJvc3RhdGVDYW5jZXJTdGFnaW5nCiAgICAgICAgc3VjaCB0aGF0IFBTQVRlc3QuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBiZWZvcmUgTW9zdFJlY2VudFByb3N0YXRlQ2FuY2VyU3RhZ2luZy5lZmZlY3RpdmUudG9JbnRlcnZhbCAoICkKICAgICAgICAgIGFuZCBQU0FUZXN0LnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICkgKSBMYXN0UFNBVGVzdAogICAgcmV0dXJuIExhc3RQU0FUZXN0LnZhbHVlIGFzIFF1YW50aXR5IDwgMTAgJ25nL21MJwoKZGVmaW5lICJIYXMgU2FsdmFnZSBUaGVyYXB5IFBlcmZvcm1lZCBhZnRlciBQcm9zdGF0ZSBDYW5jZXIgRGlhZ25vc2lzIjoKICBleGlzdHMgKCBbUHJvY2VkdXJlOiAiU2FsdmFnZSBUaGVyYXB5Il0gU2FsdmFnZVRoZXJhcHkKICAgICAgd2l0aCAiUHJvc3RhdGUgQ2FuY2VyIERpYWdub3NpcyIgQWN0aXZlUHJvc3RhdGVDYW5jZXIKICAgICAgICBzdWNoIHRoYXQgU2FsdmFnZVRoZXJhcHkucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBhZnRlciBzdGFydCBvZiBBY3RpdmVQcm9zdGF0ZUNhbmNlci5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApCiAgICAgICAgICBhbmQgU2FsdmFnZVRoZXJhcHkuc3RhdHVzID0gJ2NvbXBsZXRlZCcKICApCgpkZWZpbmUgIk1vc3QgUmVjZW50IEdsZWFzb24gU2NvcmUgaXMgTG93IjoKICAoIExhc3QoW09ic2VydmF0aW9uQ2xpbmljYWxSZXN1bHQ6ICJHbGVhc29uIHNjb3JlIGluIFNwZWNpbWVuIFF1YWxpdGF0aXZlIl0gR2xlYXNvblNjb3JlCiAgICAgIHdpdGggIkZpcnN0IFByb3N0YXRlIENhbmNlciBUcmVhdG1lbnQgZHVyaW5nIGRheSBvZiBNZWFzdXJlbWVudCBQZXJpb2QiIEZpcnN0UHJvc3RhdGVDYW5jZXJUcmVhdG1lbnQKICAgICAgICBzdWNoIHRoYXQgR2xlYXNvblNjb3JlLmVmZmVjdGl2ZS50b0ludGVydmFsICggKSBzdGFydHMgYmVmb3JlIHN0YXJ0IG9mIEZpcnN0UHJvc3RhdGVDYW5jZXJUcmVhdG1lbnQucGVyZm9ybWVkLnRvSW50ZXJ2YWwgKCApCiAgICAgICAgICBhbmQgR2xlYXNvblNjb3JlLnN0YXR1cyBpbiB7ICdmaW5hbCcsICdhbWVuZGVkJywgJ2NvcnJlY3RlZCcgfQogICAgICBzb3J0IGJ5IHN0YXJ0IG9mIGVmZmVjdGl2ZS50b0ludGVydmFsICggKQogICkgKSBMYXN0R2xlYXNvblNjb3JlCiAgICByZXR1cm4gTGFzdEdsZWFzb25TY29yZS52YWx1ZSBhcyBGSElSLmludGVnZXIgPD0gNgoKZGVmaW5lICJNb3N0IFJlY2VudCBQcm9zdGF0ZSBDYW5jZXIgU3RhZ2luZyBUdW1vciBTaXplIFQxYSB0byBUMmEiOgogICggTGFzdCgoW09ic2VydmF0aW9uQ2xpbmljYWxSZXN1bHQ6ICJUdW1vciBzdGFnaW5nICh0dW1vciBzdGFnaW5nKSJdIFR1bW9yU3RhZ2luZwogICAgLy8gVE9ETzogZGV0ZXJtaW5lIGZlYXNpYmlsaXR5IG9mIE9ic2VydmF0aW9uQ2xpbmljYWxSZXN1bHQgaGF2aW5nIGJhc2VkT24gcmVmZXJlbmNlIHRvIENvbmRpdGlvbgogICAgLy8gd2hlcmUgZXhpc3RzKCJQcm9zdGF0ZSBDYW5jZXIgRGlhZ25vc2lzIiBBY3RpdmVQcm9zdGF0ZUNhbmNlciB3aGVyZSBUdW1vclN0YWdpbmcuYmFzZWRPbi5yZWZlcmVuY2VzKEFjdGl2ZVByb3N0YXRlQ2FuY2VyKSkKICAgIAogICAgKSBQcm9zdGF0ZUNhbmNlclN0YWdpbmcKICAgICAgd2l0aCAiRmlyc3QgUHJvc3RhdGUgQ2FuY2VyIFRyZWF0bWVudCBkdXJpbmcgZGF5IG9mIE1lYXN1cmVtZW50IFBlcmlvZCIgRmlyc3RQcm9zdGF0ZUNhbmNlclRyZWF0bWVudAogICAgICAgIHN1Y2ggdGhhdCBQcm9zdGF0ZUNhbmNlclN0YWdpbmcuZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApIHN0YXJ0cyBiZWZvcmUgc3RhcnQgb2YgRmlyc3RQcm9zdGF0ZUNhbmNlclRyZWF0bWVudC5wZXJmb3JtZWQudG9JbnRlcnZhbCAoICkKICAgICAgICAgIGFuZCBQcm9zdGF0ZUNhbmNlclN0YWdpbmcuc3RhdHVzIGluIHsgJ2ZpbmFsJywgJ2FtZW5kZWQnLCAnY29ycmVjdGVkJyB9CiAgICAgIHNvcnQgYnkgc3RhcnQgb2YgZWZmZWN0aXZlLnRvSW50ZXJ2YWwgKCApCiAgKSApIExhc3RQcm9zdGF0ZUNhbmNlclN0YWdpbmcKICAgIHdoZXJlICggTGFzdFByb3N0YXRlQ2FuY2VyU3RhZ2luZy52YWx1ZSB+ICJBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMWEgKHF1YWxpZmllciB2YWx1ZSkiCiAgICAgICAgb3IgTGFzdFByb3N0YXRlQ2FuY2VyU3RhZ2luZy52YWx1ZSB+ICJBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMWIgKHF1YWxpZmllciB2YWx1ZSkiCiAgICAgICAgb3IgTGFzdFByb3N0YXRlQ2FuY2VyU3RhZ2luZy52YWx1ZSB+ICJBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMWMgKHF1YWxpZmllciB2YWx1ZSkiCiAgICAgICAgb3IgTGFzdFByb3N0YXRlQ2FuY2VyU3RhZ2luZy52YWx1ZSB+ICJBbWVyaWNhbiBKb2ludCBDb21taXR0ZWUgb24gQ2FuY2VyIGNUMmEgKHF1YWxpZmllciB2YWx1ZSkiCiAgICApCgpkZWZpbmUgIlByb3N0YXRlIENhbmNlciBEaWFnbm9zaXMiOgogIC8vIFtFLTEzXSBiYXNlIEZISVIuQ29uZGl0aW9uIHJldHJpZXZlIChkZWZlY3QtdHJhY2tpbmcvZW5naW5lLWlzc3Vlcy5tZCBFLTEzKQogIC8vIE9yaWdpbmFsOgogIC8vICAgW0NvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM6ICJQcm9zdGF0ZSBDYW5jZXIiXSBQcm9zdGF0ZUNhbmNlcgogIFtGSElSLkNvbmRpdGlvbjogIlByb3N0YXRlIENhbmNlciJdIFByb3N0YXRlQ2FuY2VyCiAgICB3aGVyZSBQcm9zdGF0ZUNhbmNlci5wcmV2YWxlbmNlSW50ZXJ2YWwgKCApIG92ZXJsYXBzIGRheSBvZiAiTWVhc3VyZW1lbnQgUGVyaW9kIgogICAgICBhbmQgUHJvc3RhdGVDYW5jZXIuaXNWZXJpZmllZCAoICkKCi8qCkBub3RlOiBXaGVuIHBvc3NpYmxlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtaWdyYXRlZCB0byBRSUNvcmVDb21tb24uCkBkZXNjcmlwdGlvbjogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBDb25kaXRpb24gaGFzIGEgdmVyaWZpY2F0aW9uIHN0YXR1cyBvZiAiY29uZmlybWVkIiwgInVuY29uZmlybWVkIiwgInByb3Zpc2lvbmFsIiwgb3IgImRpZmZlcmVudGlhbCIKKi8KCgpkZWZpbmUgZmx1ZW50IGZ1bmN0aW9uIGlzVmVyaWZpZWQoY29uZGl0aW9uIENob2ljZTxDb25kaXRpb25FbmNvdW50ZXJEaWFnbm9zaXMsIENvbmRpdGlvblByb2JsZW1zSGVhbHRoQ29uY2VybnM+KToKICBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIGlzIG5vdCBudWxsIGltcGxpZXMgKCBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJjb25maXJtZWQiCiAgICAgIG9yIGNvbmRpdGlvbi52ZXJpZmljYXRpb25TdGF0dXMgfiBTdGF0dXMuInVuY29uZmlybWVkIgogICAgICBvciBjb25kaXRpb24udmVyaWZpY2F0aW9uU3RhdHVzIH4gU3RhdHVzLiJwcm92aXNpb25hbCIKICAgICAgb3IgY29uZGl0aW9uLnZlcmlmaWNhdGlvblN0YXR1cyB+IFN0YXR1cy4iZGlmZmVyZW50aWFsIgogICk=",
      "url" : "https://madie.cms.gov/Library-CMS129FHIRProstCaBoneScanUse.cql"
    }
  ]
}