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 - XML Representation

Active as of 2025-10-16

Raw xml | Download


<Library xmlns="http://hl7.org/fhir">
  <id value="mii-lib-stratifier-age-gender"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml">
<div>
    <table class="grid dict">
        
        
        <tr>
            <th scope="row"><b>Title: </b></th>
            <td style="padding-left: 4px;">Patient Age and Gender Stratification Library</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Id: </b></th>
            <td style="padding-left: 4px;">mii-lib-stratifier-age-gender</td>
        </tr>
        

        
        
        <tr>
            <th scope="row"><b>Version: </b></th>
            <td style="padding-left: 4px;">0.1.0</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Url: </b></th>
            <td style="padding-left: 4px;"><a href="Library-mii-lib-stratifier-age-gender.html">Patient Age and Gender Stratification Library</a></td>
        </tr>
        

        

        

        

        

        
        <tr>
            <th scope="row"><b>Type: </b></th>
            <td style="padding-left: 4px;">
                
                    
                        
                        <p style="margin-bottom: 5px;">
                            <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>
                        </p>
                        
                        
                        <p style="margin-bottom: 5px;">
                            <b>code: </b> <span>logic-library</span>
                        </p>
                        
                        
                    
                
                
            </td>
        </tr>
        

        

        
        <tr>
            <th scope="row"><b>Date: </b></th>
            <td style="padding-left: 4px;">2025-10-16</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Publisher: </b></th>
            <td style="padding-left: 4px;">Medizininformatik Initiative</td>
        </tr>
        

        
        <tr>
            <th scope="row"><b>Description: </b></th>
            <td style="padding-left: 4px;"><div><p>CQL library for calculating patient ages and gender-based stratifications</p>
</div></td>
        </tr>
        

        

        

        

        

        

        

        

        

        

        

        

        
        <tr>
          <th scope="row"><b>Parameters: </b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <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>
              
                <tr><th>Measurement Period</th><th>Period</th><th>0</th><th>1</th><th>In</th></tr>
              
            </table>
          </td>
        </tr>
        

        
        <tr>
          <th scope="row"><b>Data Requirements:</b></th>
          <td style="padding-left: 4px;">
            <table class="grid-dict">
              <tr><th><b>Type</b></th><th><b>Profile</b></th><th><b>MS</b></th><th><b>Code Filter</b></th></tr>
              
                <tr>
                  <th>Patient</th>
                  <th>http://hl7.org/fhir/StructureDefinition/Patient</th>
                  <th/>
                  <th>
                    
                  </th>
                </tr>
              
            </table>
          </td>
        </tr>
        

        
        
        <tr>
          <td colspan="2">
            <table>
              <tr><th><a id="cql-content"><b>Content: </b></a> text/cql</th></tr>
              <tr><td><pre><code class="language-cql">library &quot;stratifier-age-gender&quot;
using FHIR version '4.0.0'
include FHIRHelpers version '4.0.0'

context Patient

define InInitialPopulation:
  true

define BirthYear:
  year from Patient.birthDate

// Calculate the patient's age in years as of today
define AgeInYears:
  AgeInYearsAt(Today())

// Calculate the patient's age in years at a specific date
define function AgeInYearsAt(asOf DateTime):
  if Patient.birthDate is null then null
  else years between FHIRHelpers.ToDate(Patient.birthDate) and asOf

// Calculate the patient's age in months
define AgeInMonths:
  AgeInMonthsAt(Today())

// Calculate the patient's age in months at a specific date  
define function AgeInMonthsAt(asOf DateTime):
  if Patient.birthDate is null then null
  else months between FHIRHelpers.ToDate(Patient.birthDate) and asOf

// Calculate the patient's age in days
define AgeInDays:
  AgeInDaysAt(Today())

// Calculate the patient's age in days at a specific date
define function AgeInDaysAt(asOf DateTime):
  if Patient.birthDate is null then null
  else days between FHIRHelpers.ToDate(Patient.birthDate) and asOf

// Alternative age calculation using date arithmetic
define AgeInYearsSimple:
  if Patient.birthDate is null then null
  else year from Today() - year from FHIRHelpers.ToDate(Patient.birthDate)

// Age stratification examples
define AgeGroup:
  case
    when AgeInYears is null then null
    when AgeInYears &lt; 18 then 'Pediatric'
    when AgeInYears &gt;= 18 and AgeInYears &lt; 65 then 'Adult'
    when AgeInYears &gt;= 65 then 'Geriatric'
    else null
  end

define AgeDecade:
  case
    when AgeInYears is null then null
    when AgeInYears &lt; 10 then '0-9'
    when AgeInYears &gt;= 10 and AgeInYears &lt; 20 then '10-19'
    when AgeInYears &gt;= 20 and AgeInYears &lt; 30 then '20-29'
    when AgeInYears &gt;= 30 and AgeInYears &lt; 40 then '30-39'
    when AgeInYears &gt;= 40 and AgeInYears &lt; 50 then '40-49'
    when AgeInYears &gt;= 50 and AgeInYears &lt; 60 then '50-59'
    when AgeInYears &gt;= 60 and AgeInYears &lt; 70 then '60-69'
    when AgeInYears &gt;= 70 and AgeInYears &lt; 80 then '70-79'
    when AgeInYears &gt;= 80 and AgeInYears &lt; 90 then '80-89'
    when AgeInYears &gt;= 90 then '90+'
    else null
  end

// 5-year age groups matching German census data structure
define AgeFiveYearGroups:
  case
    when AgeInYears is null then null
    when AgeInYears &gt;= 0 and AgeInYears &lt; 5 then '0-4'
    when AgeInYears &gt;= 5 and AgeInYears &lt; 10 then '5-9'
    when AgeInYears &gt;= 10 and AgeInYears &lt; 15 then '10-14'
    when AgeInYears &gt;= 15 and AgeInYears &lt; 20 then '15-19'
    when AgeInYears &gt;= 20 and AgeInYears &lt; 25 then '20-24'
    when AgeInYears &gt;= 25 and AgeInYears &lt; 30 then '25-29'
    when AgeInYears &gt;= 30 and AgeInYears &lt; 35 then '30-34'
    when AgeInYears &gt;= 35 and AgeInYears &lt; 40 then '35-39'
    when AgeInYears &gt;= 40 and AgeInYears &lt; 45 then '40-44'
    when AgeInYears &gt;= 45 and AgeInYears &lt; 50 then '45-49'
    when AgeInYears &gt;= 50 and AgeInYears &lt; 55 then '50-54'
    when AgeInYears &gt;= 55 and AgeInYears &lt; 60 then '55-59'
    when AgeInYears &gt;= 60 and AgeInYears &lt; 65 then '60-64'
    when AgeInYears &gt;= 65 and AgeInYears &lt; 70 then '65-69'
    when AgeInYears &gt;= 70 and AgeInYears &lt; 75 then '70-74'
    when AgeInYears &gt;= 75 and AgeInYears &lt; 80 then '75-79'
    when AgeInYears &gt;= 80 and AgeInYears &lt; 85 then '80-84'
    when AgeInYears &gt;= 85 and AgeInYears &lt; 90 then '85-89'
    when AgeInYears &gt;= 90 and AgeInYears &lt; 95 then '90-94'
    when AgeInYears &gt;= 95 then '95+'
    else null
  end

// Alternative shorter expression using mathematical approach
define AgeFiveYearGroupsMath:
  case
    when AgeInYears is null then null
    when AgeInYears &gt;= 95 then '95+'
    else ToString((AgeInYears div 5) * 5) + '-' + ToString(((AgeInYears div 5) * 5) + 4)
  end

// Check if patient is an adult (18 or older)
define IsAdult:
  AgeInYears &gt;= 18

// Check if patient is a minor (under 18)
define IsMinor:
  AgeInYears &lt; 18

// Check if patient is elderly (65 or older)
define IsElderly:
  AgeInYears &gt;= 65

// Gender for stratification
define Gender:
  Patient.gender
</code></pre></td></tr>
            </table>
          </td>
        </tr>
        
        
        
    </table>
</div>
</div>
  </text>
  <url
       value="https://www.medizininformatik-initiative.de/fhir/Library/StratifierAgeGender"/>
  <version value="0.1.0"/>
  <name value="StratifierAgeGender"/>
  <title value="Patient Age and Gender Stratification Library"/>
  <status value="active"/>
  <experimental value="false"/>
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type"/>
      <code value="logic-library"/>
    </coding>
  </type>
  <date value="2025-10-16"/>
  <publisher value="Medizininformatik Initiative"/>
  <contact>
    <name value="Medizininformatik Initiative"/>
    <telecom>
      <system value="url"/>
      <value value="https://www.medizininformatik-initiative.de/"/>
    </telecom>
  </contact>
  <description
               value="CQL library for calculating patient ages and gender-based stratifications"/>
  <parameter>
    <name value="Measurement Period"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <type value="Period"/>
  </parameter>
  <dataRequirement>
    <type value="Patient"/>
    <profile value="http://hl7.org/fhir/StructureDefinition/Patient"/>
  </dataRequirement>
  <content>
    <contentType value="text/cql"/>
    <data
          value="bGlicmFyeSAic3RyYXRpZmllci1hZ2UtZ2VuZGVyIgp1c2luZyBGSElSIHZlcnNpb24gJzQuMC4wJwppbmNsdWRlIEZISVJIZWxwZXJzIHZlcnNpb24gJzQuMC4wJwoKY29udGV4dCBQYXRpZW50CgpkZWZpbmUgSW5Jbml0aWFsUG9wdWxhdGlvbjoKICB0cnVlCgpkZWZpbmUgQmlydGhZZWFyOgogIHllYXIgZnJvbSBQYXRpZW50LmJpcnRoRGF0ZQoKLy8gQ2FsY3VsYXRlIHRoZSBwYXRpZW50J3MgYWdlIGluIHllYXJzIGFzIG9mIHRvZGF5CmRlZmluZSBBZ2VJblllYXJzOgogIEFnZUluWWVhcnNBdChUb2RheSgpKQoKLy8gQ2FsY3VsYXRlIHRoZSBwYXRpZW50J3MgYWdlIGluIHllYXJzIGF0IGEgc3BlY2lmaWMgZGF0ZQpkZWZpbmUgZnVuY3Rpb24gQWdlSW5ZZWFyc0F0KGFzT2YgRGF0ZVRpbWUpOgogIGlmIFBhdGllbnQuYmlydGhEYXRlIGlzIG51bGwgdGhlbiBudWxsCiAgZWxzZSB5ZWFycyBiZXR3ZWVuIEZISVJIZWxwZXJzLlRvRGF0ZShQYXRpZW50LmJpcnRoRGF0ZSkgYW5kIGFzT2YKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBtb250aHMKZGVmaW5lIEFnZUluTW9udGhzOgogIEFnZUluTW9udGhzQXQoVG9kYXkoKSkKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBtb250aHMgYXQgYSBzcGVjaWZpYyBkYXRlICAKZGVmaW5lIGZ1bmN0aW9uIEFnZUluTW9udGhzQXQoYXNPZiBEYXRlVGltZSk6CiAgaWYgUGF0aWVudC5iaXJ0aERhdGUgaXMgbnVsbCB0aGVuIG51bGwKICBlbHNlIG1vbnRocyBiZXR3ZWVuIEZISVJIZWxwZXJzLlRvRGF0ZShQYXRpZW50LmJpcnRoRGF0ZSkgYW5kIGFzT2YKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBkYXlzCmRlZmluZSBBZ2VJbkRheXM6CiAgQWdlSW5EYXlzQXQoVG9kYXkoKSkKCi8vIENhbGN1bGF0ZSB0aGUgcGF0aWVudCdzIGFnZSBpbiBkYXlzIGF0IGEgc3BlY2lmaWMgZGF0ZQpkZWZpbmUgZnVuY3Rpb24gQWdlSW5EYXlzQXQoYXNPZiBEYXRlVGltZSk6CiAgaWYgUGF0aWVudC5iaXJ0aERhdGUgaXMgbnVsbCB0aGVuIG51bGwKICBlbHNlIGRheXMgYmV0d2VlbiBGSElSSGVscGVycy5Ub0RhdGUoUGF0aWVudC5iaXJ0aERhdGUpIGFuZCBhc09mCgovLyBBbHRlcm5hdGl2ZSBhZ2UgY2FsY3VsYXRpb24gdXNpbmcgZGF0ZSBhcml0aG1ldGljCmRlZmluZSBBZ2VJblllYXJzU2ltcGxlOgogIGlmIFBhdGllbnQuYmlydGhEYXRlIGlzIG51bGwgdGhlbiBudWxsCiAgZWxzZSB5ZWFyIGZyb20gVG9kYXkoKSAtIHllYXIgZnJvbSBGSElSSGVscGVycy5Ub0RhdGUoUGF0aWVudC5iaXJ0aERhdGUpCgovLyBBZ2Ugc3RyYXRpZmljYXRpb24gZXhhbXBsZXMKZGVmaW5lIEFnZUdyb3VwOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzIDwgMTggdGhlbiAnUGVkaWF0cmljJwogICAgd2hlbiBBZ2VJblllYXJzID49IDE4IGFuZCBBZ2VJblllYXJzIDwgNjUgdGhlbiAnQWR1bHQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNjUgdGhlbiAnR2VyaWF0cmljJwogICAgZWxzZSBudWxsCiAgZW5kCgpkZWZpbmUgQWdlRGVjYWRlOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzIDwgMTAgdGhlbiAnMC05JwogICAgd2hlbiBBZ2VJblllYXJzID49IDEwIGFuZCBBZ2VJblllYXJzIDwgMjAgdGhlbiAnMTAtMTknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMjAgYW5kIEFnZUluWWVhcnMgPCAzMCB0aGVuICcyMC0yOScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAzMCBhbmQgQWdlSW5ZZWFycyA8IDQwIHRoZW4gJzMwLTM5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDQwIGFuZCBBZ2VJblllYXJzIDwgNTAgdGhlbiAnNDAtNDknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNTAgYW5kIEFnZUluWWVhcnMgPCA2MCB0aGVuICc1MC01OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA2MCBhbmQgQWdlSW5ZZWFycyA8IDcwIHRoZW4gJzYwLTY5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDcwIGFuZCBBZ2VJblllYXJzIDwgODAgdGhlbiAnNzAtNzknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gODAgYW5kIEFnZUluWWVhcnMgPCA5MCB0aGVuICc4MC04OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5MCB0aGVuICc5MCsnCiAgICBlbHNlIG51bGwKICBlbmQKCi8vIDUteWVhciBhZ2UgZ3JvdXBzIG1hdGNoaW5nIEdlcm1hbiBjZW5zdXMgZGF0YSBzdHJ1Y3R1cmUKZGVmaW5lIEFnZUZpdmVZZWFyR3JvdXBzOgogIGNhc2UKICAgIHdoZW4gQWdlSW5ZZWFycyBpcyBudWxsIHRoZW4gbnVsbAogICAgd2hlbiBBZ2VJblllYXJzID49IDAgYW5kIEFnZUluWWVhcnMgPCA1IHRoZW4gJzAtNCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA1IGFuZCBBZ2VJblllYXJzIDwgMTAgdGhlbiAnNS05JwogICAgd2hlbiBBZ2VJblllYXJzID49IDEwIGFuZCBBZ2VJblllYXJzIDwgMTUgdGhlbiAnMTAtMTQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMTUgYW5kIEFnZUluWWVhcnMgPCAyMCB0aGVuICcxNS0xOScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAyMCBhbmQgQWdlSW5ZZWFycyA8IDI1IHRoZW4gJzIwLTI0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDI1IGFuZCBBZ2VJblllYXJzIDwgMzAgdGhlbiAnMjUtMjknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gMzAgYW5kIEFnZUluWWVhcnMgPCAzNSB0aGVuICczMC0zNCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSAzNSBhbmQgQWdlSW5ZZWFycyA8IDQwIHRoZW4gJzM1LTM5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDQwIGFuZCBBZ2VJblllYXJzIDwgNDUgdGhlbiAnNDAtNDQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNDUgYW5kIEFnZUluWWVhcnMgPCA1MCB0aGVuICc0NS00OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA1MCBhbmQgQWdlSW5ZZWFycyA8IDU1IHRoZW4gJzUwLTU0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDU1IGFuZCBBZ2VJblllYXJzIDwgNjAgdGhlbiAnNTUtNTknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNjAgYW5kIEFnZUluWWVhcnMgPCA2NSB0aGVuICc2MC02NCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA2NSBhbmQgQWdlSW5ZZWFycyA8IDcwIHRoZW4gJzY1LTY5JwogICAgd2hlbiBBZ2VJblllYXJzID49IDcwIGFuZCBBZ2VJblllYXJzIDwgNzUgdGhlbiAnNzAtNzQnCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gNzUgYW5kIEFnZUluWWVhcnMgPCA4MCB0aGVuICc3NS03OScKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA4MCBhbmQgQWdlSW5ZZWFycyA8IDg1IHRoZW4gJzgwLTg0JwogICAgd2hlbiBBZ2VJblllYXJzID49IDg1IGFuZCBBZ2VJblllYXJzIDwgOTAgdGhlbiAnODUtODknCiAgICB3aGVuIEFnZUluWWVhcnMgPj0gOTAgYW5kIEFnZUluWWVhcnMgPCA5NSB0aGVuICc5MC05NCcKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5NSB0aGVuICc5NSsnCiAgICBlbHNlIG51bGwKICBlbmQKCi8vIEFsdGVybmF0aXZlIHNob3J0ZXIgZXhwcmVzc2lvbiB1c2luZyBtYXRoZW1hdGljYWwgYXBwcm9hY2gKZGVmaW5lIEFnZUZpdmVZZWFyR3JvdXBzTWF0aDoKICBjYXNlCiAgICB3aGVuIEFnZUluWWVhcnMgaXMgbnVsbCB0aGVuIG51bGwKICAgIHdoZW4gQWdlSW5ZZWFycyA+PSA5NSB0aGVuICc5NSsnCiAgICBlbHNlIFRvU3RyaW5nKChBZ2VJblllYXJzIGRpdiA1KSAqIDUpICsgJy0nICsgVG9TdHJpbmcoKChBZ2VJblllYXJzIGRpdiA1KSAqIDUpICsgNCkKICBlbmQKCi8vIENoZWNrIGlmIHBhdGllbnQgaXMgYW4gYWR1bHQgKDE4IG9yIG9sZGVyKQpkZWZpbmUgSXNBZHVsdDoKICBBZ2VJblllYXJzID49IDE4CgovLyBDaGVjayBpZiBwYXRpZW50IGlzIGEgbWlub3IgKHVuZGVyIDE4KQpkZWZpbmUgSXNNaW5vcjoKICBBZ2VJblllYXJzIDwgMTgKCi8vIENoZWNrIGlmIHBhdGllbnQgaXMgZWxkZXJseSAoNjUgb3Igb2xkZXIpCmRlZmluZSBJc0VsZGVybHk6CiAgQWdlSW5ZZWFycyA+PSA2NQoKLy8gR2VuZGVyIGZvciBzdHJhdGlmaWNhdGlvbgpkZWZpbmUgR2VuZGVyOgogIFBhdGllbnQuZ2VuZGVyCg=="/>
  </content>
</Library>