FHIR Summary Reports
0.1.0 - ci-build

FHIR Summary Reports - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

: Library CQL age and gender stratifications - JSON Representation

Active as of 2025-10-16

Raw json | Download

{
  "resourceType" : "Library",
  "id" : "mii-lib-stratifier-age-gender",
  "text" : {
    "status" : "extensions",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n<div>\n    <table class=\"grid dict\">\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Title: </b></th>\n            <td style=\"padding-left: 4px;\">Patient Age and Gender Stratification Library</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Id: </b></th>\n            <td style=\"padding-left: 4px;\">mii-lib-stratifier-age-gender</td>\n        </tr>\n        \n\n        \n        \n        <tr>\n            <th scope=\"row\"><b>Version: </b></th>\n            <td style=\"padding-left: 4px;\">0.1.0</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Url: </b></th>\n            <td style=\"padding-left: 4px;\"><a href=\"Library-mii-lib-stratifier-age-gender.html\">Patient Age and Gender Stratification Library</a></td>\n        </tr>\n        \n\n        \n\n        \n\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Type: </b></th>\n            <td style=\"padding-left: 4px;\">\n                \n                    \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>system: </b> <span><a href=\"http://terminology.hl7.org/6.5.0/CodeSystem-library-type.html\">http://terminology.hl7.org/CodeSystem/library-type</a></span>\n                        </p>\n                        \n                        \n                        <p style=\"margin-bottom: 5px;\">\n                            <b>code: </b> <span>logic-library</span>\n                        </p>\n                        \n                        \n                    \n                \n                \n            </td>\n        </tr>\n        \n\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Date: </b></th>\n            <td style=\"padding-left: 4px;\">2025-10-16</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Publisher: </b></th>\n            <td style=\"padding-left: 4px;\">Medizininformatik Initiative</td>\n        </tr>\n        \n\n        \n        <tr>\n            <th scope=\"row\"><b>Description: </b></th>\n            <td style=\"padding-left: 4px;\"><div><p>CQL library for calculating patient ages and gender-based stratifications</p>\n</div></td>\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        <tr>\n          <th scope=\"row\"><b>Parameters: </b></th>\n          <td style=\"padding-left: 4px;\">\n            <table class=\"grid-dict\">\n              <tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>\n              \n                <tr><th>Measurement Period</th><th>Period</th><th>0</th><th>1</th><th>In</th></tr>\n              \n            </table>\n          </td>\n        </tr>\n        \n\n        \n        <tr>\n          <th scope=\"row\"><b>Data Requirements:</b></th>\n          <td style=\"padding-left: 4px;\">\n            <table class=\"grid-dict\">\n              <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>\n              \n                <tr>\n                  <th>Patient</th>\n                  <th>http://hl7.org/fhir/StructureDefinition/Patient</th>\n                  <th/>\n                  <th>\n                    \n                  </th>\n                </tr>\n              \n            </table>\n          </td>\n        </tr>\n        \n\n        \n        \n        <tr>\n          <td colspan=\"2\">\n            <table>\n              <tr><th><a id=\"cql-content\"><b>Content: </b></a> text/cql</th></tr>\n              <tr><td><pre><code class=\"language-cql\">library &quot;stratifier-age-gender&quot;\nusing FHIR version '4.0.0'\ninclude FHIRHelpers version '4.0.0'\n\ncontext Patient\n\ndefine InInitialPopulation:\n  true\n\ndefine BirthYear:\n  year from Patient.birthDate\n\n// Calculate the patient's age in years as of today\ndefine AgeInYears:\n  AgeInYearsAt(Today())\n\n// Calculate the patient's age in years at a specific date\ndefine function AgeInYearsAt(asOf DateTime):\n  if Patient.birthDate is null then null\n  else years between FHIRHelpers.ToDate(Patient.birthDate) and asOf\n\n// Calculate the patient's age in months\ndefine AgeInMonths:\n  AgeInMonthsAt(Today())\n\n// Calculate the patient's age in months at a specific date  \ndefine function AgeInMonthsAt(asOf DateTime):\n  if Patient.birthDate is null then null\n  else months between FHIRHelpers.ToDate(Patient.birthDate) and asOf\n\n// Calculate the patient's age in days\ndefine AgeInDays:\n  AgeInDaysAt(Today())\n\n// Calculate the patient's age in days at a specific date\ndefine function AgeInDaysAt(asOf DateTime):\n  if Patient.birthDate is null then null\n  else days between FHIRHelpers.ToDate(Patient.birthDate) and asOf\n\n// Alternative age calculation using date arithmetic\ndefine AgeInYearsSimple:\n  if Patient.birthDate is null then null\n  else year from Today() - year from FHIRHelpers.ToDate(Patient.birthDate)\n\n// Age stratification examples\ndefine AgeGroup:\n  case\n    when AgeInYears is null then null\n    when AgeInYears &lt; 18 then 'Pediatric'\n    when AgeInYears &gt;= 18 and AgeInYears &lt; 65 then 'Adult'\n    when AgeInYears &gt;= 65 then 'Geriatric'\n    else null\n  end\n\ndefine AgeDecade:\n  case\n    when AgeInYears is null then null\n    when AgeInYears &lt; 10 then '0-9'\n    when AgeInYears &gt;= 10 and AgeInYears &lt; 20 then '10-19'\n    when AgeInYears &gt;= 20 and AgeInYears &lt; 30 then '20-29'\n    when AgeInYears &gt;= 30 and AgeInYears &lt; 40 then '30-39'\n    when AgeInYears &gt;= 40 and AgeInYears &lt; 50 then '40-49'\n    when AgeInYears &gt;= 50 and AgeInYears &lt; 60 then '50-59'\n    when AgeInYears &gt;= 60 and AgeInYears &lt; 70 then '60-69'\n    when AgeInYears &gt;= 70 and AgeInYears &lt; 80 then '70-79'\n    when AgeInYears &gt;= 80 and AgeInYears &lt; 90 then '80-89'\n    when AgeInYears &gt;= 90 then '90+'\n    else null\n  end\n\n// 5-year age groups matching German census data structure\ndefine AgeFiveYearGroups:\n  case\n    when AgeInYears is null then null\n    when AgeInYears &gt;= 0 and AgeInYears &lt; 5 then '0-4'\n    when AgeInYears &gt;= 5 and AgeInYears &lt; 10 then '5-9'\n    when AgeInYears &gt;= 10 and AgeInYears &lt; 15 then '10-14'\n    when AgeInYears &gt;= 15 and AgeInYears &lt; 20 then '15-19'\n    when AgeInYears &gt;= 20 and AgeInYears &lt; 25 then '20-24'\n    when AgeInYears &gt;= 25 and AgeInYears &lt; 30 then '25-29'\n    when AgeInYears &gt;= 30 and AgeInYears &lt; 35 then '30-34'\n    when AgeInYears &gt;= 35 and AgeInYears &lt; 40 then '35-39'\n    when AgeInYears &gt;= 40 and AgeInYears &lt; 45 then '40-44'\n    when AgeInYears &gt;= 45 and AgeInYears &lt; 50 then '45-49'\n    when AgeInYears &gt;= 50 and AgeInYears &lt; 55 then '50-54'\n    when AgeInYears &gt;= 55 and AgeInYears &lt; 60 then '55-59'\n    when AgeInYears &gt;= 60 and AgeInYears &lt; 65 then '60-64'\n    when AgeInYears &gt;= 65 and AgeInYears &lt; 70 then '65-69'\n    when AgeInYears &gt;= 70 and AgeInYears &lt; 75 then '70-74'\n    when AgeInYears &gt;= 75 and AgeInYears &lt; 80 then '75-79'\n    when AgeInYears &gt;= 80 and AgeInYears &lt; 85 then '80-84'\n    when AgeInYears &gt;= 85 and AgeInYears &lt; 90 then '85-89'\n    when AgeInYears &gt;= 90 and AgeInYears &lt; 95 then '90-94'\n    when AgeInYears &gt;= 95 then '95+'\n    else null\n  end\n\n// Alternative shorter expression using mathematical approach\ndefine AgeFiveYearGroupsMath:\n  case\n    when AgeInYears is null then null\n    when AgeInYears &gt;= 95 then '95+'\n    else ToString((AgeInYears div 5) * 5) + '-' + ToString(((AgeInYears div 5) * 5) + 4)\n  end\n\n// Check if patient is an adult (18 or older)\ndefine IsAdult:\n  AgeInYears &gt;= 18\n\n// Check if patient is a minor (under 18)\ndefine IsMinor:\n  AgeInYears &lt; 18\n\n// Check if patient is elderly (65 or older)\ndefine IsElderly:\n  AgeInYears &gt;= 65\n\n// Gender for stratification\ndefine Gender:\n  Patient.gender\n</code></pre></td></tr>\n            </table>\n          </td>\n        </tr>\n        \n        \n        \n    </table>\n</div>\n</div>"
  },
  "url" : "https://www.medizininformatik-initiative.de/fhir/Library/StratifierAgeGender",
  "version" : "0.1.0",
  "name" : "StratifierAgeGender",
  "title" : "Patient Age and Gender Stratification Library",
  "status" : "active",
  "experimental" : false,
  "type" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/library-type",
        "code" : "logic-library"
      }
    ]
  },
  "date" : "2025-10-16",
  "publisher" : "Medizininformatik Initiative",
  "contact" : [
    {
      "name" : "Medizininformatik Initiative",
      "telecom" : [
        {
          "system" : "url",
          "value" : "https://www.medizininformatik-initiative.de/"
        }
      ]
    }
  ],
  "description" : "CQL library for calculating patient ages and gender-based stratifications",
  "parameter" : [
    {
      "name" : "Measurement Period",
      "use" : "in",
      "min" : 0,
      "max" : "1",
      "type" : "Period"
    }
  ],
  "dataRequirement" : [
    {
      "type" : "Patient",
      "profile" : [
        🔗 "http://hl7.org/fhir/StructureDefinition/Patient"
      ]
    }
  ],
  "content" : [
    {
      "contentType" : "text/cql",
      "data" : "bGlicmFyeSAic3RyYXRpZmllci1hZ2UtZ2VuZGVyIgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4wJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4wJwoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgSW5Jbml0aWFsUG9wdWxhdGlvbjoKICB0cnVlCgpkZWZpbmUgQmlydGhZZWFyOgogIHllYXIgZnJvbSBQYXRpZW50LmJpcnRoRGF0ZQoKLy8gQ2FsY3VsYXRlIHRoZSBwYXRpZW50J3MgYWdlIGluIHllYXJzIGFzIG9mIHRvZGF5CmRlZmluZSBBZ2VJblllYXJzOgogIEFnZUluWWVhcnNBdChUb2RheSgpKQoKLy8gQ2FsY3VsYXRlIHRoZSBwYXRpZW50J3MgYWdlIGluIHllYXJzIGF0IGEgc3BlY2lmaWMgZGF0ZQpkZWZpbmUgZnVuY3Rpb24gQWdlSW5ZZWFyc0F0KGFzT2YgRGF0ZVRpbWUpOgogIGlmIFBhdGllbnQuYmlydGhEYXRlIGlzIG51bGwgdGhlbiBudWxsCiAgZWxzZSB5ZWFycyBiZXR3ZWVuIEZISVJIZWxwZXJzLlRvRGF0ZShQYXRpZW50LmJpcnRoRGF0ZSkgYW5kIGFzT2YKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBtb250aHMKZGVmaW5lIEFnZUluTW9udGhzOgogIEFnZUluTW9udGhzQXQoVG9kYXkoKSkKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBtb250aHMgYXQgYSBzcGVjaWZpYyBkYXRlICAKZGVmaW5lIGZ1bmN0aW9uIEFnZUluTW9udGhzQXQoYXNPZiBEYXRlVGltZSk6CiAgaWYgUGF0aWVudC5iaXJ0aERhdGUgaXMgbnVsbCB0aGVuIG51bGwKICBlbHNlIG1vbnRocyBiZXR3ZWVuIEZISVJIZWxwZXJzLlRvRGF0ZShQYXRpZW50LmJpcnRoRGF0ZSkgYW5kIGFzT2YKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBkYXlzCmRlZmluZSBBZ2VJbkRheXM6CiAgQWdlSW5EYXlzQXQoVG9kYXkoKSkKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBkYXlzIGF0IGEgc3BlY2lmaWMgZGF0ZQpkZWZpbmUgZnVuY3Rpb24gQWdlSW5EYXlzQXQoYXNPZiBEYXRlVGltZSk6CiAgaWYgUGF0aWVudC5iaXJ0aERhdGUgaXMgbnVsbCB0aGVuIG51bGwKICBlbHNlIGRheXMgYmV0d2VlbiBGSElSSGVscGVycy5Ub0RhdGUoUGF0aWVudC5iaXJ0aERhdGUpIGFuZCBhc09mCgovLyBBbHRlcm5hdGl2ZSBhZ2UgY2FsY3VsYXRpb24gdXNpbmcgZGF0ZSBhcml0aG1ldGljCmRlZmluZSBBZ2VJblllYXJzU2ltcGxlOgogIGlmIFBhdGllbnQuYmlydGhEYXRlIGlzIG51bGwgdGhlbiBudWxsCiAgZWxzZSB5ZWFyIGZyb20gVG9kYXkoKSAtIHllYXIgZnJvbSBGSElSSGVscGVycy5Ub0RhdGUoUGF0aWVudC5iaXJ0aERhdGUpCgovLyBBZ2Ugc3RyYXRpZmljYXRpb24gZXhhbXBsZXMKZGVmaW5lIEFnZUdyb3VwOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzIDwgMTggdGhlbiAnUGVkaWF0cmljJwogICAgd2hlbiBBZ2VJblllYXJzID49IDE4IGFuZCBBZ2VJblllYXJzIDwgNjUgdGhlbiAnQWR1bHQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNjUgdGhlbiAnR2VyaWF0cmljJwogICAgZWxzZSBudWxsCiAgZW5kCgpkZWZpbmUgQWdlRGVjYWRlOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzIDwgMTAgdGhlbiAnMC05JwogICAgd2hlbiBBZ2VJblllYXJzID49IDEwIGFuZCBBZ2VJblllYXJzIDwgMjAgdGhlbiAnMTAtMTknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMjAgYW5kIEFnZUluWWVhcnMgPCAzMCB0aGVuICcyMC0yOScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAzMCBhbmQgQWdlSW5ZZWFycyA8IDQwIHRoZW4gJzMwLTM5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDQwIGFuZCBBZ2VJblllYXJzIDwgNTAgdGhlbiAnNDAtNDknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNTAgYW5kIEFnZUluWWVhcnMgPCA2MCB0aGVuICc1MC01OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA2MCBhbmQgQWdlSW5ZZWFycyA8IDcwIHRoZW4gJzYwLTY5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDcwIGFuZCBBZ2VJblllYXJzIDwgODAgdGhlbiAnNzAtNzknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gODAgYW5kIEFnZUluWWVhcnMgPCA5MCB0aGVuICc4MC04OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5MCB0aGVuICc5MCsnCiAgICBlbHNlIG51bGwKICBlbmQKCi8vIDUteWVhciBhZ2UgZ3JvdXBzIG1hdGNoaW5nIEdlcm1hbiBjZW5zdXMgZGF0YSBzdHJ1Y3R1cmUKZGVmaW5lIEFnZUZpdmVZZWFyR3JvdXBzOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzID49IDAgYW5kIEFnZUluWWVhcnMgPCA1IHRoZW4gJzAtNCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA1IGFuZCBBZ2VJblllYXJzIDwgMTAgdGhlbiAnNS05JwogICAgd2hlbiBBZ2VJblllYXJzID49IDEwIGFuZCBBZ2VJblllYXJzIDwgMTUgdGhlbiAnMTAtMTQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMTUgYW5kIEFnZUluWWVhcnMgPCAyMCB0aGVuICcxNS0xOScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAyMCBhbmQgQWdlSW5ZZWFycyA8IDI1IHRoZW4gJzIwLTI0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDI1IGFuZCBBZ2VJblllYXJzIDwgMzAgdGhlbiAnMjUtMjknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMzAgYW5kIEFnZUluWWVhcnMgPCAzNSB0aGVuICczMC0zNCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAzNSBhbmQgQWdlSW5ZZWFycyA8IDQwIHRoZW4gJzM1LTM5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDQwIGFuZCBBZ2VJblllYXJzIDwgNDUgdGhlbiAnNDAtNDQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNDUgYW5kIEFnZUluWWVhcnMgPCA1MCB0aGVuICc0NS00OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA1MCBhbmQgQWdlSW5ZZWFycyA8IDU1IHRoZW4gJzUwLTU0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDU1IGFuZCBBZ2VJblllYXJzIDwgNjAgdGhlbiAnNTUtNTknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNjAgYW5kIEFnZUluWWVhcnMgPCA2NSB0aGVuICc2MC02NCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA2NSBhbmQgQWdlSW5ZZWFycyA8IDcwIHRoZW4gJzY1LTY5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDcwIGFuZCBBZ2VJblllYXJzIDwgNzUgdGhlbiAnNzAtNzQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNzUgYW5kIEFnZUluWWVhcnMgPCA4MCB0aGVuICc3NS03OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA4MCBhbmQgQWdlSW5ZZWFycyA8IDg1IHRoZW4gJzgwLTg0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDg1IGFuZCBBZ2VJblllYXJzIDwgOTAgdGhlbiAnODUtODknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gOTAgYW5kIEFnZUluWWVhcnMgPCA5NSB0aGVuICc5MC05NCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5NSB0aGVuICc5NSsnCiAgICBlbHNlIG51bGwKICBlbmQKCi8vIEFsdGVybmF0aXZlIHNob3J0ZXIgZXhwcmVzc2lvbiB1c2luZyBtYXRoZW1hdGljYWwgYXBwcm9hY2gKZGVmaW5lIEFnZUZpdmVZZWFyR3JvdXBzTWF0aDoKICBjYXNlCiAgICB3aGVuIEFnZUluWWVhcnMgaXMgbnVsbCB0aGVuIG51bGwKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5NSB0aGVuICc5NSsnCiAgICBlbHNlIFRvU3RyaW5nKChBZ2VJblllYXJzIGRpdiA1KSAqIDUpICsgJy0nICsgVG9TdHJpbmcoKChBZ2VJblllYXJzIGRpdiA1KSAqIDUpICsgNCkKICBlbmQKCi8vIENoZWNrIGlmIHBhdGllbnQgaXMgYW4gYWR1bHQgKDE4IG9yIG9sZGVyKQpkZWZpbmUgSXNBZHVsdDoKICBBZ2VJblllYXJzID49IDE4CgovLyBDaGVjayBpZiBwYXRpZW50IGlzIGEgbWlub3IgKHVuZGVyIDE4KQpkZWZpbmUgSXNNaW5vcjoKICBBZ2VJblllYXJzIDwgMTgKCi8vIENoZWNrIGlmIHBhdGllbnQgaXMgZWxkZXJseSAoNjUgb3Igb2xkZXIpCmRlZmluZSBJc0VsZGVybHk6CiAgQWdlSW5ZZWFycyA+PSA2NQoKLy8gR2VuZGVyIGZvciBzdHJhdGlmaWNhdGlvbgpkZWZpbmUgR2VuZGVyOgogIFBhdGllbnQuZ2VuZGVyCg=="
    }
  ]
}