[906] | 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
---|
| 2 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
---|
| 3 | xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
---|
| 4 | xmlns:schold="http://www.ascc.net/xml/schematron"
|
---|
| 5 | xmlns:iso="http://purl.oclc.org/dsdl/schematron"
|
---|
| 6 | xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
---|
| 7 | xmlns:cda="urn:hl7-org:v3"
|
---|
| 8 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
---|
| 9 | version="1.0"><!--Implementers: please note that overriding process-prolog or process-root is
|
---|
| 10 | the preferred method for meta-stylesheets to use where possible. -->
|
---|
| 11 | <xsl:param name="archiveDirParameter"/>
|
---|
| 12 | <xsl:param name="archiveNameParameter"/>
|
---|
| 13 | <xsl:param name="fileNameParameter"/>
|
---|
| 14 | <xsl:param name="fileDirParameter"/>
|
---|
| 15 | <xsl:variable name="document-uri">
|
---|
| 16 | <xsl:value-of select="document-uri(/)"/>
|
---|
| 17 | </xsl:variable>
|
---|
| 18 |
|
---|
| 19 | <!--PHASES-->
|
---|
| 20 |
|
---|
| 21 |
|
---|
| 22 | <!--PROLOG-->
|
---|
| 23 | <xsl:output method="text"/>
|
---|
| 24 |
|
---|
| 25 | <!--XSD TYPES FOR XSLT2-->
|
---|
| 26 |
|
---|
| 27 |
|
---|
| 28 | <!--KEYS AND FUNCTIONS-->
|
---|
| 29 |
|
---|
| 30 |
|
---|
| 31 | <!--DEFAULT RULES-->
|
---|
| 32 |
|
---|
| 33 |
|
---|
| 34 | <!--MODE: SCHEMATRON-SELECT-FULL-PATH-->
|
---|
| 35 | <!--This mode can be used to generate an ugly though full XPath for locators-->
|
---|
| 36 | <xsl:template match="*" mode="schematron-select-full-path">
|
---|
| 37 | <xsl:apply-templates select="." mode="schematron-get-full-path"/>
|
---|
| 38 | </xsl:template>
|
---|
| 39 |
|
---|
| 40 | <!--MODE: SCHEMATRON-FULL-PATH-->
|
---|
| 41 | <!--This mode can be used to generate an ugly though full XPath for locators-->
|
---|
| 42 | <xsl:template match="*" mode="schematron-get-full-path">
|
---|
| 43 | <xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
|
---|
| 44 | <xsl:text>/</xsl:text>
|
---|
| 45 | <xsl:choose>
|
---|
| 46 | <xsl:when test="namespace-uri()=''">
|
---|
| 47 | <xsl:value-of select="name()"/>
|
---|
| 48 | <xsl:variable name="p_1" select="1+ count(preceding-sibling::*[name()=name(current())])"/>
|
---|
| 49 | <xsl:if test="$p_1>1 or following-sibling::*[name()=name(current())]">[<xsl:value-of select="$p_1"/>]</xsl:if>
|
---|
| 50 | </xsl:when>
|
---|
| 51 | <xsl:otherwise>
|
---|
| 52 | <xsl:text>*[local-name()='</xsl:text>
|
---|
| 53 | <xsl:value-of select="local-name()"/>
|
---|
| 54 | <xsl:text>']</xsl:text>
|
---|
| 55 | <xsl:variable name="p_2"
|
---|
| 56 | select="1+ count(preceding-sibling::*[local-name()=local-name(current())])"/>
|
---|
| 57 | <xsl:if test="$p_2>1 or following-sibling::*[local-name()=local-name(current())]">[<xsl:value-of select="$p_2"/>]</xsl:if>
|
---|
| 58 | </xsl:otherwise>
|
---|
| 59 | </xsl:choose>
|
---|
| 60 | </xsl:template>
|
---|
| 61 | <xsl:template match="@*" mode="schematron-get-full-path">
|
---|
| 62 | <xsl:text>/</xsl:text>
|
---|
| 63 | <xsl:choose>
|
---|
| 64 | <xsl:when test="namespace-uri()=''">@<xsl:value-of select="name()"/>
|
---|
| 65 | </xsl:when>
|
---|
| 66 | <xsl:otherwise>
|
---|
| 67 | <xsl:text>@*[local-name()='</xsl:text>
|
---|
| 68 | <xsl:value-of select="local-name()"/>
|
---|
| 69 | <xsl:text>' and namespace-uri()='</xsl:text>
|
---|
| 70 | <xsl:value-of select="namespace-uri()"/>
|
---|
| 71 | <xsl:text>']</xsl:text>
|
---|
| 72 | </xsl:otherwise>
|
---|
| 73 | </xsl:choose>
|
---|
| 74 | </xsl:template>
|
---|
| 75 |
|
---|
| 76 | <!--MODE: SCHEMATRON-FULL-PATH-2-->
|
---|
| 77 | <!--This mode can be used to generate prefixed XPath for humans-->
|
---|
| 78 | <xsl:template match="node() | @*" mode="schematron-get-full-path-2">
|
---|
| 79 | <xsl:for-each select="ancestor-or-self::*">
|
---|
| 80 | <xsl:text>/</xsl:text>
|
---|
| 81 | <xsl:value-of select="name(.)"/>
|
---|
| 82 | <xsl:if test="preceding-sibling::*[name(.)=name(current())]">
|
---|
| 83 | <xsl:text>[</xsl:text>
|
---|
| 84 | <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
|
---|
| 85 | <xsl:text>]</xsl:text>
|
---|
| 86 | </xsl:if>
|
---|
| 87 | </xsl:for-each>
|
---|
| 88 | <xsl:if test="not(self::*)">
|
---|
| 89 | <xsl:text/>/@<xsl:value-of select="name(.)"/>
|
---|
| 90 | </xsl:if>
|
---|
| 91 | </xsl:template>
|
---|
| 92 | <!--MODE: SCHEMATRON-FULL-PATH-3-->
|
---|
| 93 | <!--This mode can be used to generate prefixed XPath for humans
|
---|
| 94 | (Top-level element has index)-->
|
---|
| 95 | <xsl:template match="node() | @*" mode="schematron-get-full-path-3">
|
---|
| 96 | <xsl:for-each select="ancestor-or-self::*">
|
---|
| 97 | <xsl:text>/</xsl:text>
|
---|
| 98 | <xsl:value-of select="name(.)"/>
|
---|
| 99 | <xsl:if test="parent::*">
|
---|
| 100 | <xsl:text>[</xsl:text>
|
---|
| 101 | <xsl:value-of select="count(preceding-sibling::*[name(.)=name(current())])+1"/>
|
---|
| 102 | <xsl:text>]</xsl:text>
|
---|
| 103 | </xsl:if>
|
---|
| 104 | </xsl:for-each>
|
---|
| 105 | <xsl:if test="not(self::*)">
|
---|
| 106 | <xsl:text/>/@<xsl:value-of select="name(.)"/>
|
---|
| 107 | </xsl:if>
|
---|
| 108 | </xsl:template>
|
---|
| 109 |
|
---|
| 110 | <!--MODE: GENERATE-ID-FROM-PATH -->
|
---|
| 111 | <xsl:template match="/" mode="generate-id-from-path"/>
|
---|
| 112 | <xsl:template match="text()" mode="generate-id-from-path">
|
---|
| 113 | <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
|
---|
| 114 | <xsl:value-of select="concat('.text-', 1+count(preceding-sibling::text()), '-')"/>
|
---|
| 115 | </xsl:template>
|
---|
| 116 | <xsl:template match="comment()" mode="generate-id-from-path">
|
---|
| 117 | <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
|
---|
| 118 | <xsl:value-of select="concat('.comment-', 1+count(preceding-sibling::comment()), '-')"/>
|
---|
| 119 | </xsl:template>
|
---|
| 120 | <xsl:template match="processing-instruction()" mode="generate-id-from-path">
|
---|
| 121 | <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
|
---|
| 122 | <xsl:value-of select="concat('.processing-instruction-', 1+count(preceding-sibling::processing-instruction()), '-')"/>
|
---|
| 123 | </xsl:template>
|
---|
| 124 | <xsl:template match="@*" mode="generate-id-from-path">
|
---|
| 125 | <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
|
---|
| 126 | <xsl:value-of select="concat('.@', name())"/>
|
---|
| 127 | </xsl:template>
|
---|
| 128 | <xsl:template match="*" mode="generate-id-from-path" priority="-0.5">
|
---|
| 129 | <xsl:apply-templates select="parent::*" mode="generate-id-from-path"/>
|
---|
| 130 | <xsl:text>.</xsl:text>
|
---|
| 131 | <xsl:value-of select="concat('.',name(),'-',1+count(preceding-sibling::*[name()=name(current())]),'-')"/>
|
---|
| 132 | </xsl:template>
|
---|
| 133 |
|
---|
| 134 | <!--MODE: GENERATE-ID-2 -->
|
---|
| 135 | <xsl:template match="/" mode="generate-id-2">U</xsl:template>
|
---|
| 136 | <xsl:template match="*" mode="generate-id-2" priority="2">
|
---|
| 137 | <xsl:text>U</xsl:text>
|
---|
| 138 | <xsl:number level="multiple" count="*"/>
|
---|
| 139 | </xsl:template>
|
---|
| 140 | <xsl:template match="node()" mode="generate-id-2">
|
---|
| 141 | <xsl:text>U.</xsl:text>
|
---|
| 142 | <xsl:number level="multiple" count="*"/>
|
---|
| 143 | <xsl:text>n</xsl:text>
|
---|
| 144 | <xsl:number count="node()"/>
|
---|
| 145 | </xsl:template>
|
---|
| 146 | <xsl:template match="@*" mode="generate-id-2">
|
---|
| 147 | <xsl:text>U.</xsl:text>
|
---|
| 148 | <xsl:number level="multiple" count="*"/>
|
---|
| 149 | <xsl:text>_</xsl:text>
|
---|
| 150 | <xsl:value-of select="string-length(local-name(.))"/>
|
---|
| 151 | <xsl:text>_</xsl:text>
|
---|
| 152 | <xsl:value-of select="translate(name(),':','.')"/>
|
---|
| 153 | </xsl:template>
|
---|
| 154 | <!--Strip characters--><xsl:template match="text()" priority="-1"/>
|
---|
| 155 |
|
---|
| 156 | <!--SCHEMA SETUP-->
|
---|
| 157 | <xsl:template match="/">
|
---|
| 158 | <xsl:apply-templates select="/" mode="M6"/>
|
---|
| 159 | <xsl:apply-templates select="/" mode="M7"/>
|
---|
| 160 | <xsl:apply-templates select="/" mode="M8"/>
|
---|
| 161 | </xsl:template>
|
---|
| 162 |
|
---|
| 163 | <!--SCHEMATRON PATTERNS-->
|
---|
| 164 |
|
---|
| 165 |
|
---|
| 166 | <!--PATTERN p-2.16.840.1.113883.10.20.12-errorsHL7 QRDA Category I Header (Section 2) - errors validation phase-->
|
---|
| 167 |
|
---|
| 168 |
|
---|
| 169 | <!--RULE -->
|
---|
| 170 | <xsl:template match="/" priority="1006" mode="M6">
|
---|
| 171 |
|
---|
| 172 | <!--ASSERT -->
|
---|
| 173 | <xsl:choose>
|
---|
[909] | 174 | <xsl:when test=".//cda:realmCode[@code = "US"]"/>
|
---|
[906] | 175 | <xsl:otherwise>
|
---|
| 176 | <xsl:message>
|
---|
[909] | 177 | Error: CONF-QRDA1-I: The realmCode element SHALL be present where the value of @code is US.
|
---|
| 178 | (.//cda:realmCode[@code = "US"])</xsl:message>
|
---|
[906] | 179 | </xsl:otherwise>
|
---|
| 180 | </xsl:choose>
|
---|
| 181 |
|
---|
[909] | 182 | <!--ASSERT -->
|
---|
[906] | 183 | <xsl:choose>
|
---|
[909] | 184 | <xsl:when test=".//cda:typeId[@root = "2.16.840.1.113883.1.3" and @extension = "POCD_HD000040"]"/>
|
---|
[906] | 185 | <xsl:otherwise>
|
---|
| 186 | <xsl:message>
|
---|
[909] | 187 | Error: CONF-QRDA1-2: The value of typeId/@root SHALL be 2.16.840.1.113883.1.3 and value of
|
---|
| 188 | typeId/@extension SHALL be POCD_HD000040.
|
---|
| 189 | (.//cda:typeId[@root = "2.16.840.1.113883.1.3" and @extension = "POCD_HD000040"])</xsl:message>
|
---|
[906] | 190 | </xsl:otherwise>
|
---|
| 191 | </xsl:choose>
|
---|
| 192 |
|
---|
| 193 | <!--ASSERT -->
|
---|
| 194 | <xsl:choose>
|
---|
[909] | 195 | <xsl:when test="not(cda:ClinicalDocument/cda:templateId) = 0"/>
|
---|
[906] | 196 | <xsl:otherwise>
|
---|
| 197 | <xsl:message>
|
---|
[909] | 198 | Error: CONF-QRDA1-3 The CMS EHR QRDA Report SHALL contain at least one ClincalDocument/templateId element
|
---|
| 199 | (not(cda:ClinicalDocument/cda:templateId) = 0)</xsl:message>
|
---|
[906] | 200 | </xsl:otherwise>
|
---|
| 201 | </xsl:choose>
|
---|
| 202 |
|
---|
| 203 | <!--ASSERT -->
|
---|
| 204 | <xsl:choose>
|
---|
[909] | 205 | <xsl:when test=".//cda:templateId/@root="2.16.840.1.113883.10.20.12" and .//cda:templateId/@root="2.16.840.1.113883.3.249.11.100.1""/>
|
---|
| 206 | <xsl:otherwise>
|
---|
| 207 | <xsl:message>
|
---|
| 208 | Error: CONF-QRDA-I-4: The value of one ClinicalDocument/templateId/@root SHALL be
|
---|
| 209 | 2.16.840.1.113883.10.20.12 and PQRI QRDA category I templateId 'root' value SHALL be 2.16.840.1.113883.3.249.11.100.1.
|
---|
| 210 | (.//cda:templateId/@root="2.16.840.1.113883.10.20.12" and .//cda:templateId/@root="2.16.840.1.113883.3.249.11.100.1")</xsl:message>
|
---|
| 211 | </xsl:otherwise>
|
---|
| 212 | </xsl:choose>
|
---|
| 213 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 214 | </xsl:template>
|
---|
| 215 |
|
---|
| 216 | <!--RULE -->
|
---|
| 217 | <xsl:template match="*[cda:templateId/@root="2.16.840.1.113883.10.20.12"]" priority="1005"
|
---|
| 218 | mode="M6">
|
---|
| 219 |
|
---|
| 220 | <!--ASSERT -->
|
---|
| 221 | <xsl:choose>
|
---|
[906] | 222 | <xsl:when test="count(cda:code) = 1 and cda:code[@code="55182-0" and @codeSystem="2.16.840.1.113883.6.1"]"/>
|
---|
| 223 | <xsl:otherwise>
|
---|
| 224 | <xsl:message>
|
---|
[909] | 225 | Error: CONF-QRDA1-7: A QRDA Category I report SHALL contain exactly one
|
---|
[906] | 226 | ClinicalDocument/code with a value of 55182-0 2.16.840.1.113883.6.1
|
---|
| 227 | LOINC STATIC.
|
---|
| 228 | (count(cda:code) = 1 and cda:code[@code="55182-0" and @codeSystem="2.16.840.1.113883.6.1"])</xsl:message>
|
---|
| 229 | </xsl:otherwise>
|
---|
| 230 | </xsl:choose>
|
---|
| 231 |
|
---|
| 232 | <!--ASSERT -->
|
---|
| 233 | <xsl:choose>
|
---|
| 234 | <xsl:when test="contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'qrda incidence report') or contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'quality measure report')"/>
|
---|
| 235 | <xsl:otherwise>
|
---|
| 236 | <xsl:message>
|
---|
[909] | 237 | Error: CONF-QRDA1-8: A QRDA Category I report SHALL contain exactly one
|
---|
[906] | 238 | ClinicalDocument/title element valued with a case-insensitive, text
|
---|
| 239 | string containing "QRDA Incidence Report" or "Quality measure
|
---|
| 240 | Report".
|
---|
| 241 | (contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'qrda incidence report') or contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'quality measure report'))</xsl:message>
|
---|
| 242 | </xsl:otherwise>
|
---|
| 243 | </xsl:choose>
|
---|
| 244 |
|
---|
| 245 | <!--ASSERT -->
|
---|
| 246 | <xsl:choose>
|
---|
[909] | 247 | <xsl:when test="string-length(cda:effectiveTime/@value) >= 8"/>
|
---|
| 248 | <xsl:otherwise>
|
---|
| 249 | <xsl:message>
|
---|
| 250 | Error: CONF-QRDA1-10 The effectiveTime value attribute value SHALL be at least precise to the day YYYYMMDD.
|
---|
| 251 | (string-length(cda:effectiveTime/@value) >= 8)</xsl:message>
|
---|
| 252 | </xsl:otherwise>
|
---|
| 253 | </xsl:choose>
|
---|
| 254 |
|
---|
| 255 | <!--ASSERT -->
|
---|
| 256 | <xsl:choose>
|
---|
| 257 | <xsl:when test="cda:confidentialityCode[@code="N" and @codeSystem="2.16.840.1.113883.5.25"]"/>
|
---|
| 258 | <xsl:otherwise>
|
---|
| 259 | <xsl:message>
|
---|
| 260 | Error: CONF-QRDA1-12: The confidentialityCode 'codeSystem' attribute value SHALL be '2.16.840.1.113883.5.25. The confidentialityCode 'codeSystem' attribute value SHALL be '2.16.840.1.113883.5.25
|
---|
| 261 | (cda:confidentialityCode[@code="N" and @codeSystem="2.16.840.1.113883.5.25"])</xsl:message>
|
---|
| 262 | </xsl:otherwise>
|
---|
| 263 | </xsl:choose>
|
---|
| 264 |
|
---|
| 265 | <!--ASSERT -->
|
---|
| 266 | <xsl:choose>
|
---|
| 267 | <xsl:when test="not(cda:setId) = 0"/>
|
---|
| 268 | <xsl:otherwise>
|
---|
| 269 | <xsl:message>
|
---|
| 270 | Error: CONF-QRDA1-13: setId element is missing. The 'setId' element SHALL be present.
|
---|
| 271 | (not(cda:setId) = 0)</xsl:message>
|
---|
| 272 | </xsl:otherwise>
|
---|
| 273 | </xsl:choose>
|
---|
| 274 |
|
---|
| 275 | <!--ASSERT -->
|
---|
| 276 | <xsl:choose>
|
---|
| 277 | <xsl:when test="not(cda:versionNumber) = 0"/>
|
---|
| 278 | <xsl:otherwise>
|
---|
| 279 | <xsl:message>
|
---|
| 280 | Error: CONF-QRDA1-16 versionNumber element is missing. The 'versionNumber' element SHALL be present.
|
---|
| 281 | (not(cda:versionNumber) = 0)</xsl:message>
|
---|
| 282 | </xsl:otherwise>
|
---|
| 283 | </xsl:choose>
|
---|
| 284 |
|
---|
| 285 | <!--ASSERT -->
|
---|
| 286 | <xsl:choose>
|
---|
| 287 | <xsl:when test="cda:versionNumber/@value castable as xs:integer"/>
|
---|
| 288 | <xsl:otherwise>
|
---|
| 289 | <xsl:message>
|
---|
| 290 | Error: CONF-QRDA1-17: versionNumber/@value SHALL be an integer
|
---|
| 291 | (cda:versionNumber/@value castable as xs:integer)</xsl:message>
|
---|
| 292 | </xsl:otherwise>
|
---|
| 293 | </xsl:choose>
|
---|
| 294 |
|
---|
| 295 | <!--ASSERT -->
|
---|
| 296 | <xsl:choose>
|
---|
[906] | 297 | <xsl:when test="count(cda:recordTarget/cda:patientRole) = 1"/>
|
---|
| 298 | <xsl:otherwise>
|
---|
| 299 | <xsl:message>
|
---|
[909] | 300 | Error: CONF-QRDA1-18: A QRDA Category I report SHALL contain exactly one
|
---|
[906] | 301 | ClinicalDocument/recordTarget/PatientRole.
|
---|
| 302 | (count(cda:recordTarget/cda:patientRole) = 1)</xsl:message>
|
---|
| 303 | </xsl:otherwise>
|
---|
| 304 | </xsl:choose>
|
---|
| 305 |
|
---|
| 306 | <!--ASSERT -->
|
---|
| 307 | <xsl:choose>
|
---|
[909] | 308 | <xsl:when test="cda:recordTarget/cda:patientRole/cda:id[@root = "2.16.840.1.113883.4.1" or @root = "2.16.840.1.113883.4.2" or @root = "2.16.840.1.113883.4.3.40" or @root = "2.16.840.1.113883.4.3.49" or @root = "2.16.840.1.113883.4.3.38" or @root = "2.16.840.1.113883.4.3.37" or @root = "2.16.840.1.113883.4.3.36" or @root = "2.16.840.1.113883.4.3.35" or @root = "2.16.840.1.113883.4.3.34" or @root = "2.16.840.1.113883.4.3.48" or @root = "2.16.840.1.113883.4.3.32" or @root = "2.16.840.1.113883.4.3.39" or @root = "2.16.840.1.113883.4.3.15" or @root = "2.16.840.1.113883.4.3.51" or @root = "2.16.840.1.113883.4.3.53" or @root = "2.16.840.1.113883.4.3.54" or @root = "2.16.840.1.113883.4.3.55" or @root = "2.16.840.1.113883.4.3.56" or @root = "2.16.840.1.113883.4.3.42" or @root = "2.16.840.1.113883.4.3.47" or @root = "2.16.840.1.113883.4.3.41" or @root = "2.16.840.1.113883.4.3.46" or @root = "2.16.840.1.113883.4.3.45" or @root = "2.16.840.1.113883.4.3.31" or @root = "2.16.840.1.113883.4.3.50" or @root = "2.16.840.1.113883.4.3.30" or @root = "2.16.840.1.113883.4.3.44" or @root = "2.16.840.1.113883.4.3.16" or @root = "2.16.840.1.113883.4.3.5" or @root = "2.16.840.1.113883.4.3.9" or @root = "2.16.840.1.113883.4.3.8" or @root = "2.16.840.1.113883.4.3.6" or @root = "2.16.840.1.113883.4.3.33" or @root = "2.16.840.1.113883.4.3.11" or @root = "2.16.840.1.113883.4.3.10" or @root = "2.16.840.1.113883.4.3.12" or @root = "2.16.840.1.113883.4.3.4" or @root = "2.16.840.1.113883.4.3.2" or @root = "2.16.840.1.113883.4.3.1" or @root = "2.16.840.1.113883.4.3" or @root = "2.16.840.1.113883.4.3.17" or @root = "2.16.840.1.113883.4.3.26" or @root = "2.16.840.1.113883.4.3.29" or @root = "2.16.840.1.113883.4.3.18" or @root = "2.16.840.1.113883.4.3.28" or @root = "2.16.840.1.113883.4.3.25" or @root = "2.16.840.1.113883.4.3.24" or @root = "2.16.840.1.113883.4.3.23" or @root = "2.16.840.1.113883.4.3.13" or @root = "2.16.840.1.113883.4.3.22" or @root = "2.16.840.1.113883.4.3.21" or @root = "2.16.840.1.113883.4.3.20" or @root = "2.16.840.1.113883.4.3.19" or @root = "2.16.840.1.113883.4.3.27" or @root = "2.16.840.1.113883.4.4" or @root = "2.16.840.1.113883.4.5" and @extension = "*"]"/>
|
---|
[906] | 309 | <xsl:otherwise>
|
---|
| 310 | <xsl:message>
|
---|
[909] | 311 | Error: CONF-QRDA1-19 @root contains OID for the coding system used to identify the patient. The value of @extension is the unique patient identifier the EHR sysetm uses fo record activity on a patient. Commonly used OIDs for entries to identify patient sucha as SSN, TIN, DLN, etc. are available at Appendix_L-OIDs tab of the Downloadable Resources table.
|
---|
| 312 | (cda:recordTarget/cda:patientRole/cda:id[@root = "2.16.840.1.113883.4.1" or @root = "2.16.840.1.113883.4.2" or @root = "2.16.840.1.113883.4.3.40" or @root = "2.16.840.1.113883.4.3.49" or @root = "2.16.840.1.113883.4.3.38" or @root = "2.16.840.1.113883.4.3.37" or @root = "2.16.840.1.113883.4.3.36" or @root = "2.16.840.1.113883.4.3.35" or @root = "2.16.840.1.113883.4.3.34" or @root = "2.16.840.1.113883.4.3.48" or @root = "2.16.840.1.113883.4.3.32" or @root = "2.16.840.1.113883.4.3.39" or @root = "2.16.840.1.113883.4.3.15" or @root = "2.16.840.1.113883.4.3.51" or @root = "2.16.840.1.113883.4.3.53" or @root = "2.16.840.1.113883.4.3.54" or @root = "2.16.840.1.113883.4.3.55" or @root = "2.16.840.1.113883.4.3.56" or @root = "2.16.840.1.113883.4.3.42" or @root = "2.16.840.1.113883.4.3.47" or @root = "2.16.840.1.113883.4.3.41" or @root = "2.16.840.1.113883.4.3.46" or @root = "2.16.840.1.113883.4.3.45" or @root = "2.16.840.1.113883.4.3.31" or @root = "2.16.840.1.113883.4.3.50" or @root = "2.16.840.1.113883.4.3.30" or @root = "2.16.840.1.113883.4.3.44" or @root = "2.16.840.1.113883.4.3.16" or @root = "2.16.840.1.113883.4.3.5" or @root = "2.16.840.1.113883.4.3.9" or @root = "2.16.840.1.113883.4.3.8" or @root = "2.16.840.1.113883.4.3.6" or @root = "2.16.840.1.113883.4.3.33" or @root = "2.16.840.1.113883.4.3.11" or @root = "2.16.840.1.113883.4.3.10" or @root = "2.16.840.1.113883.4.3.12" or @root = "2.16.840.1.113883.4.3.4" or @root = "2.16.840.1.113883.4.3.2" or @root = "2.16.840.1.113883.4.3.1" or @root = "2.16.840.1.113883.4.3" or @root = "2.16.840.1.113883.4.3.17" or @root = "2.16.840.1.113883.4.3.26" or @root = "2.16.840.1.113883.4.3.29" or @root = "2.16.840.1.113883.4.3.18" or @root = "2.16.840.1.113883.4.3.28" or @root = "2.16.840.1.113883.4.3.25" or @root = "2.16.840.1.113883.4.3.24" or @root = "2.16.840.1.113883.4.3.23" or @root = "2.16.840.1.113883.4.3.13" or @root = "2.16.840.1.113883.4.3.22" or @root = "2.16.840.1.113883.4.3.21" or @root = "2.16.840.1.113883.4.3.20" or @root = "2.16.840.1.113883.4.3.19" or @root = "2.16.840.1.113883.4.3.27" or @root = "2.16.840.1.113883.4.4" or @root = "2.16.840.1.113883.4.5" and @extension = "*"])</xsl:message>
|
---|
[906] | 313 | </xsl:otherwise>
|
---|
| 314 | </xsl:choose>
|
---|
| 315 |
|
---|
| 316 | <!--ASSERT -->
|
---|
| 317 | <xsl:choose>
|
---|
[909] | 318 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:patient/cda:name) >= 1"/>
|
---|
| 319 | <xsl:otherwise>
|
---|
| 320 | <xsl:message>
|
---|
| 321 | Error: CONF-QRDA1-23 patient's legal 'name' element is expected at least once. The patient's legal 'name' element SHALL be submitted at least exactly once.
|
---|
| 322 | (count(cda:recordTarget/cda:patientRole/cda:patient/cda:name) >= 1)</xsl:message>
|
---|
| 323 | </xsl:otherwise>
|
---|
| 324 | </xsl:choose>
|
---|
| 325 |
|
---|
| 326 | <!--ASSERT -->
|
---|
| 327 | <xsl:choose>
|
---|
| 328 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:given) >= 1"/>
|
---|
| 329 | <xsl:otherwise>
|
---|
| 330 | <xsl:message>
|
---|
| 331 | Error: CONF-QRDA1-24 patient's legal name 'given' (first name) element is expected at least once. The patient's legal 'given' (first name) element SHALL be submitted at least exactly once.
|
---|
| 332 | (count(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:given) >= 1)</xsl:message>
|
---|
| 333 | </xsl:otherwise>
|
---|
| 334 | </xsl:choose>
|
---|
| 335 |
|
---|
| 336 | <!--ASSERT -->
|
---|
| 337 | <xsl:choose>
|
---|
| 338 | <xsl:when test="string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:given/@value) <= 30"/>
|
---|
| 339 | <xsl:otherwise>
|
---|
| 340 | <xsl:message>
|
---|
| 341 | Error: CONF-QRDA1-24 patient's legal name 'given' (first name) element value length SHALL not be more than 30 characters. patient's legal name 'given' (first name) element value length SHALL not be more than 30 characters.
|
---|
| 342 | (string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:given/@value) <= 30)</xsl:message>
|
---|
| 343 | </xsl:otherwise>
|
---|
| 344 | </xsl:choose>
|
---|
| 345 |
|
---|
| 346 | <!--ASSERT -->
|
---|
| 347 | <xsl:choose>
|
---|
| 348 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:family) >= 1"/>
|
---|
| 349 | <xsl:otherwise>
|
---|
| 350 | <xsl:message>
|
---|
| 351 | Error: CONF-QRDA1-25 patient's legal name 'family' (last name) element is expected at least once. The patient's legal 'family' (last name) element SHALL be submitted at least exactly once.
|
---|
| 352 | (count(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:family) >= 1)</xsl:message>
|
---|
| 353 | </xsl:otherwise>
|
---|
| 354 | </xsl:choose>
|
---|
| 355 |
|
---|
| 356 | <!--ASSERT -->
|
---|
| 357 | <xsl:choose>
|
---|
| 358 | <xsl:when test="string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:family/@value) <= 30"/>
|
---|
| 359 | <xsl:otherwise>
|
---|
| 360 | <xsl:message>
|
---|
| 361 | Error: CONF-QRDA1-25 patient's legal name 'family' (last name) element value length SHALL not be more than 30 characters. patient's legal name 'family' (last name) element value length SHALL not be more than 30 characters.
|
---|
| 362 | (string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:name/cda:family/@value) <= 30)</xsl:message>
|
---|
| 363 | </xsl:otherwise>
|
---|
| 364 | </xsl:choose>
|
---|
| 365 |
|
---|
| 366 | <!--ASSERT -->
|
---|
| 367 | <xsl:choose>
|
---|
| 368 | <xsl:when test="cda:recordTarget/cda:patientRole/cda:patient/cda:ethnicGroupCode[@codeSystem="2.16.840.1.113883.5.50"]"/>
|
---|
| 369 | <xsl:otherwise>
|
---|
| 370 | <xsl:message>
|
---|
| 371 | Error: CONF-QRDA1-26 The patient's ethnic group code 'codeSystem' attribute value SHALL be '2.16.840.1.113883.5.50'.
|
---|
| 372 | (cda:recordTarget/cda:patientRole/cda:patient/cda:ethnicGroupCode[@codeSystem="2.16.840.1.113883.5.50"])</xsl:message>
|
---|
| 373 | </xsl:otherwise>
|
---|
| 374 | </xsl:choose>
|
---|
| 375 |
|
---|
| 376 | <!--ASSERT -->
|
---|
| 377 | <xsl:choose>
|
---|
| 378 | <xsl:when test="cda:recordTarget/cda:patientRole/cda:patient/cda:ethnicGroupCode[@code = "2135-2" or @code = "2137-8" or @code = "2138-6" or @code = "2139-4" or @code = "2140-2" or @code = "2141-0" or @code = "2142-8" or @code = "2143-6" or @code = "2144-4" or @code = "2145-1" or @code = "2146-9" or @code = "2148-5" or @code = "2149-3" or @code = "2150-1" or @code = "2151-9" or @code = "2152-7" or @code = "2153-5" or @code = "2155-0" or @code = "2156-8" or @code = "2157-6" or @code = "2158-4" or @code = "2159-2" or @code = "2160-0" or @code = "2161-8" or @code = "2162-6" or @code = "2163-4" or @code = "2165-9" or @code = "2166-7" or @code = "2167-5" or @code = "2168-3" or @code = "2169-1" or @code = "2170-9" or @code = "2171-7" or @code = "2172-5" or @code = "2173-3" or @code = "2174-1" or @code = "2175-8" or @code = "2176-6" or @code = "2178-2" or @code = "2180-8" or @code = "2182-4" or @code = "2184-0" or @code = "2186-5"]"/>
|
---|
| 379 | <xsl:otherwise>
|
---|
| 380 | <xsl:message>
|
---|
| 381 | Error: CONF-QRDA1-26 The patient's ethnic group 'code' value SHALL be valid according to Appendix_M-Ethnicity in the posted Downloadable Resource table.
|
---|
| 382 | (cda:recordTarget/cda:patientRole/cda:patient/cda:ethnicGroupCode[@code = "2135-2" or @code = "2137-8" or @code = "2138-6" or @code = "2139-4" or @code = "2140-2" or @code = "2141-0" or @code = "2142-8" or @code = "2143-6" or @code = "2144-4" or @code = "2145-1" or @code = "2146-9" or @code = "2148-5" or @code = "2149-3" or @code = "2150-1" or @code = "2151-9" or @code = "2152-7" or @code = "2153-5" or @code = "2155-0" or @code = "2156-8" or @code = "2157-6" or @code = "2158-4" or @code = "2159-2" or @code = "2160-0" or @code = "2161-8" or @code = "2162-6" or @code = "2163-4" or @code = "2165-9" or @code = "2166-7" or @code = "2167-5" or @code = "2168-3" or @code = "2169-1" or @code = "2170-9" or @code = "2171-7" or @code = "2172-5" or @code = "2173-3" or @code = "2174-1" or @code = "2175-8" or @code = "2176-6" or @code = "2178-2" or @code = "2180-8" or @code = "2182-4" or @code = "2184-0" or @code = "2186-5"])</xsl:message>
|
---|
| 383 | </xsl:otherwise>
|
---|
| 384 | </xsl:choose>
|
---|
| 385 |
|
---|
| 386 | <!--ASSERT -->
|
---|
| 387 | <xsl:choose>
|
---|
| 388 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode)"/>
|
---|
| 389 | <xsl:otherwise>
|
---|
| 390 | <xsl:message>
|
---|
| 391 | Error: CONF-QRDA1-27 The 'administrativeGenderCode' element SHALL be present.
|
---|
| 392 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode))</xsl:message>
|
---|
| 393 | </xsl:otherwise>
|
---|
| 394 | </xsl:choose>
|
---|
| 395 |
|
---|
| 396 | <!--ASSERT -->
|
---|
| 397 | <xsl:choose>
|
---|
| 398 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode[@codeSystem = "2.16.840.1.113883.5.1"])"/>
|
---|
| 399 | <xsl:otherwise>
|
---|
| 400 | <xsl:message>
|
---|
| 401 | Error: CONF-QRDA1-27 The patient's administrativeGenderCode 'codeSystem' attribute value SHALL be '2.16.840.1.113883.5.1'.
|
---|
| 402 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode[@codeSystem = "2.16.840.1.113883.5.1"]))</xsl:message>
|
---|
| 403 | </xsl:otherwise>
|
---|
| 404 | </xsl:choose>
|
---|
| 405 |
|
---|
| 406 | <!--ASSERT -->
|
---|
| 407 | <xsl:choose>
|
---|
| 408 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode[@code="M" or @code="F" or @code="UN"])"/>
|
---|
| 409 | <xsl:otherwise>
|
---|
| 410 | <xsl:message>
|
---|
| 411 | Error: CONF-QRDA1-27 The patient's administrative gender 'code' value SHALL be valid according to Appendix_N-Gender in the posted Downloadable Resource table.
|
---|
| 412 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:administrativeGenderCode[@code="M" or @code="F" or @code="UN"]))</xsl:message>
|
---|
| 413 | </xsl:otherwise>
|
---|
| 414 | </xsl:choose>
|
---|
| 415 |
|
---|
| 416 | <!--ASSERT -->
|
---|
| 417 | <xsl:choose>
|
---|
| 418 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode)"/>
|
---|
| 419 | <xsl:otherwise>
|
---|
| 420 | <xsl:message>
|
---|
| 421 | Error: CONF-QRDA1-28 The 'raceCode' element SHALL be present.
|
---|
| 422 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode))</xsl:message>
|
---|
| 423 | </xsl:otherwise>
|
---|
| 424 | </xsl:choose>
|
---|
| 425 |
|
---|
| 426 | <!--ASSERT -->
|
---|
| 427 | <xsl:choose>
|
---|
| 428 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode[@codeSystem = "2.16.840.1.113883.5.104"])"/>
|
---|
| 429 | <xsl:otherwise>
|
---|
| 430 | <xsl:message>
|
---|
| 431 | Error: CONF-QRDA1-28 The patient's raceCode 'codeSystem' attribute value SHALL be '2.16.840.1.113883.5.104'.
|
---|
| 432 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode[@codeSystem = "2.16.840.1.113883.5.104"]))</xsl:message>
|
---|
| 433 | </xsl:otherwise>
|
---|
| 434 | </xsl:choose>
|
---|
| 435 |
|
---|
| 436 | <!--ASSERT -->
|
---|
| 437 | <xsl:choose>
|
---|
| 438 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode[@code = "1002-5" or @code = "1004-1" or @code = "1006-6" or @code = "1008-2" or @code = "1010-8" or @code = "1011-6" or @code = "1012-4" or @code = "1013-2" or @code = "1014-0" or @code = "1015-7" or @code = "1016-5" or @code = "1017-3" or @code = "1018-1" or @code = "1019-9" or @code = "1021-5" or @code = "1022-3" or @code = "1023-1" or @code = "1024-9" or @code = "1026-4" or @code = "1028-0" or @code = "1030-6" or @code = "1031-4" or @code = "1033-0" or @code = "1035-5" or @code = "1037-1" or @code = "1039-7" or @code = "1041-3" or @code = "1042-1" or @code = "1044-7" or @code = "1045-4" or @code = "1046-2" or @code = "1047-0" or @code = "1048-8" or @code = "1049-6" or @code = "1050-4" or @code = "1051-2" or @code = "1053-8" or @code = "1054-6" or @code = "1055-3" or @code = "1056-1" or @code = "1057-9" or @code = "1058-7" or @code = "1059-5" or @code = "1060-3" or @code = "1061-1" or @code = "1062-9" or @code = "1063-7" or @code = "1064-5" or @code = "1065-2" or @code = "1066-0" or @code = "1068-6" or @code = "1069-4" or @code = "1070-2" or @code = "1071-0" or @code = "1072-8" or @code = "1073-6" or @code = "1074-4" or @code = "1076-9" or @code = "1078-5" or @code = "1080-1" or @code = "1082-7" or @code = "1083-5" or @code = "1084-3" or @code = "1086-8" or @code = "1088-4" or @code = "1089-2" or @code = "1090-0" or @code = "1091-8" or @code = "1092-6" or @code = "1093-4" or @code = "1094-2" or @code = "1095-9" or @code = "1096-7" or @code = "1097-5" or @code = "1098-3" or @code = "1100-7" or @code = "1102-3" or @code = "1103-1" or @code = "1104-9" or @code = "1106-4" or @code = "1108-0" or @code = "1109-8" or @code = "1110-6" or @code = "1112-2" or @code = "1114-8" or @code = "1115-5" or @code = "1116-3" or @code = "1117-1" or @code = "1118-9" or @code = "1119-7" or @code = "1120-5" or @code = "1121-3" or @code = "1123-9" or @code = "1124-7" or @code = "1125-4" or @code = "1126-2" or @code = "1127-0" or @code = "1128-8" or @code = "1129-6" or @code = "1130-4" or @code = "1131-2" or @code = "1132-0" or @code = "1133-8" or @code = "1134-6" or @code = "1135-3" or @code = "1136-1" or @code = "1137-9" or @code = "1138-7" or @code = "1139-5" or @code = "1140-3" or @code = "1141-1" or @code = "1142-9" or @code = "1143-7" or @code = "1144-5" or @code = "1145-2" or @code = "1146-0" or @code = "1147-8" or @code = "1148-6" or @code = "1150-2" or @code = "1151-0" or @code = "1153-6" or @code = "1155-1" or @code = "1156-9" or @code = "1157-7" or @code = "1158-5" or @code = "1159-3" or @code = "1160-1" or @code = "1162-7" or @code = "1163-5" or @code = "1165-0" or @code = "1167-6" or @code = "1169-2" or @code = "1171-8" or @code = "1173-4" or @code = "1175-9" or @code = "1176-7" or @code = "1178-3" or @code = "1180-9" or @code = "1182-5" or @code = "1184-1" or @code = "1186-6" or @code = "1187-4" or @code = "1189-0" or @code = "1191-6" or @code = "1193-2" or @code = "1194-0" or @code = "1195-7" or @code = "1196-5" or @code = "1197-3" or @code = "1198-1" or @code = "1199-9" or @code = "1200-5" or @code = "1201-3" or @code = "1202-1" or @code = "1203-9" or @code = "1204-7" or @code = "1205-4" or @code = "1207-0" or @code = "1209-6" or @code = "1211-2" or @code = "1212-0" or @code = "1214-6" or @code = "1215-3" or @code = "1216-1" or @code = "1217-9" or @code = "1218-7" or @code = "1219-5" or @code = "1220-3" or @code = "1222-9" or @code = "1223-7" or @code = "1224-5" or @code = "1225-2" or @code = "1226-0" or @code = "1227-8" or @code = "1228-6" or @code = "1229-4" or @code = "1230-2" or @code = "1231-0" or @code = "1233-6" or @code = "1234-4" or @code = "1235-1" or @code = "1236-9" or @code = "1237-7" or @code = "1238-5" or @code = "1239-3" or @code = "1240-1" or @code = "1241-9" or @code = "1242-7" or @code = "1243-5" or @code = "1244-3" or @code = "1245-0" or @code = "1246-8" or @code = "1247-6" or @code = "1248-4" or @code = "1250-0" or @code = "1252-6" or @code = "1254-2" or @code = "1256-7" or @code = "1258-3" or @code = "1260-9" or @code = "1262-5" or @code = "1264-1" or @code = "1265-8" or @code = "1267-4" or @code = "1269-0" or @code = "1271-6" or @code = "1272-4" or @code = "1273-2" or @code = "1275-7" or @code = "1277-3" or @code = "1279-9" or @code = "1281-5" or @code = "1282-3" or @code = "1283-1" or @code = "1285-6" or @code = "1286-4" or @code = "1287-2" or @code = "1288-0" or @code = "1289-8" or @code = "1290-6" or @code = "1291-4" or @code = "1292-2" or @code = "1293-0" or @code = "1294-8" or @code = "1295-5" or @code = "1297-1" or @code = "1299-7" or @code = "1301-1" or @code = "1303-7" or @code = "1305-2" or @code = "1306-0" or @code = "1307-8" or @code = "1309-4" or @code = "1310-2" or @code = "1312-8" or @code = "1313-6" or @code = "1314-4" or @code = "1315-1" or @code = "1317-7" or @code = "1319-3" or @code = "1321-9" or @code = "1323-5" or @code = "1325-0" or @code = "1326-8" or @code = "1327-6" or @code = "1328-4" or @code = "1329-2" or @code = "1331-8" or @code = "1332-6" or @code = "1333-4" or @code = "1334-2" or @code = "1335-9" or @code = "1336-7" or @code = "1337-5" or @code = "1338-3" or @code = "1340-9" or @code = "1342-5" or @code = "1344-1" or @code = "1345-8" or @code = "1346-6" or @code = "1348-2" or @code = "1350-8" or @code = "1352-4" or @code = "1354-0" or @code = "1356-5" or @code = "1358-1" or @code = "1359-9" or @code = "1360-7" or @code = "1361-5" or @code = "1363-1" or @code = "1365-6" or @code = "1366-4" or @code = "1368-0" or @code = "1370-6" or @code = "1372-2" or @code = "1374-8" or @code = "1376-3" or @code = "1378-9" or @code = "1380-5" or @code = "1382-1" or @code = "1383-9" or @code = "1384-7" or @code = "1385-4" or @code = "1387-0" or @code = "1389-6" or @code = "1391-2" or @code = "1392-0" or @code = "1393-8" or @code = "1394-6" or @code = "1395-3" or @code = "1396-1" or @code = "1397-9" or @code = "1398-7" or @code = "1399-5" or @code = "1400-1" or @code = "1401-9" or @code = "1403-5" or @code = "1405-0" or @code = "1407-6" or @code = "1409-2" or @code = "1411-8" or @code = "1412-6" or @code = "1413-4" or @code = "1414-2" or @code = "1416-7" or @code = "1417-5" or @code = "1418-3" or @code = "1419-1" or @code = "1420-9" or @code = "1421-7" or @code = "1422-5" or @code = "1423-3" or @code = "1424-1" or @code = "1425-8" or @code = "1426-6" or @code = "1427-4" or @code = "1428-2" or @code = "1429-0" or @code = "1430-8" or @code = "1431-6" or @code = "1432-4" or @code = "1433-2" or @code = "1434-0" or @code = "1435-7" or @code = "1436-5" or @code = "1437-3" or @code = "1439-9" or @code = "1441-5" or @code = "1442-3" or @code = "1443-1" or @code = "1445-6" or @code = "1446-4" or @code = "1448-0" or @code = "1450-6" or @code = "1451-4" or @code = "1453-0" or @code = "1454-8" or @code = "1456-3" or @code = "1457-1" or @code = "1458-9" or @code = "1460-5" or @code = "1462-1" or @code = "1464-7" or @code = "1465-4" or @code = "1466-2" or @code = "1467-0" or @code = "1468-8" or @code = "1469-6" or @code = "1470-4" or @code = "1471-2" or @code = "1472-0" or @code = "1474-6" or @code = "1475-3" or @code = "1476-1" or @code = "1478-7" or @code = "1479-5" or @code = "1480-3" or @code = "1481-1" or @code = "1482-9" or @code = "1483-7" or @code = "1484-5" or @code = "1485-2" or @code = "1487-8" or @code = "1489-4" or @code = "1490-2" or @code = "1491-0" or @code = "1492-8" or @code = "1493-6" or @code = "1494-4" or @code = "1495-1" or @code = "1496-9" or @code = "1497-7" or @code = "1498-5" or @code = "1499-3" or @code = "1500-8" or @code = "1501-6" or @code = "1502-4" or @code = "1503-2" or @code = "1504-0" or @code = "1505-7" or @code = "1506-5" or @code = "1507-3" or @code = "1508-1" or @code = "1509-9" or @code = "1510-7" or @code = "1511-5" or @code = "1512-3" or @code = "1513-1" or @code = "1514-9" or @code = "1515-6" or @code = "1516-4" or @code = "1518-0" or @code = "1519-8" or @code = "1520-6" or @code = "1521-4" or @code = "1522-2" or @code = "1523-0" or @code = "1524-8" or @code = "1525-5" or @code = "1526-3" or @code = "1527-1" or @code = "1528-9" or @code = "1529-7" or @code = "1530-5" or @code = "1531-3" or @code = "1532-1" or @code = "1533-9" or @code = "1534-7" or @code = "1535-4" or @code = "1536-2" or @code = "1537-0" or @code = "1538-8" or @code = "1539-6" or @code = "1541-2" or @code = "1543-8" or @code = "1545-3" or @code = "1547-9" or @code = "1549-5" or @code = "1551-1" or @code = "1552-9" or @code = "1553-7" or @code = "1554-5" or @code = "1556-0" or @code = "1558-6" or @code = "1560-2" or @code = "1562-8" or @code = "1564-4" or @code = "1566-9" or @code = "1567-7" or @code = "1568-5" or @code = "1569-3" or @code = "1570-1" or @code = "1571-9" or @code = "1573-5" or @code = "1574-3" or @code = "1576-8" or @code = "1578-4" or @code = "1579-2" or @code = "1580-0" or @code = "1582-6" or @code = "1584-2" or @code = "1586-7" or @code = "1587-5" or @code = "1588-3" or @code = "1589-1" or @code = "1590-9" or @code = "1591-7" or @code = "1592-5" or @code = "1593-3" or @code = "1594-1" or @code = "1595-8" or @code = "1596-6" or @code = "1597-4" or @code = "1598-2" or @code = "1599-0" or @code = "1600-6" or @code = "1602-2" or @code = "1603-0" or @code = "1604-8" or @code = "1605-5" or @code = "1607-1" or @code = "1609-7" or @code = "1610-5" or @code = "1611-3" or @code = "1612-1" or @code = "1613-9" or @code = "1614-7" or @code = "1615-4" or @code = "1616-2" or @code = "1617-0" or @code = "1618-8" or @code = "1619-6" or @code = "1620-4" or @code = "1621-2" or @code = "1622-0" or @code = "1623-8" or @code = "1624-6" or @code = "1625-3" or @code = "1626-1" or @code = "1627-9" or @code = "1628-7" or @code = "1629-5" or @code = "1630-3" or @code = "1631-1" or @code = "1632-9" or @code = "1633-7" or @code = "1634-5" or @code = "1635-2" or @code = "1636-0" or @code = "1637-8" or @code = "1638-6" or @code = "1639-4" or @code = "1640-2" or @code = "1641-0" or @code = "1643-6" or @code = "1645-1" or @code = "1647-7" or @code = "1649-3" or @code = "1651-9" or @code = "1653-5" or @code = "1654-3" or @code = "1655-0" or @code = "1656-8" or @code = "1657-6" or @code = "1659-2" or @code = "1661-8" or @code = "1663-4" or @code = "1665-9" or @code = "1667-5" or @code = "1668-3" or @code = "1670-9" or @code = "1671-7" or @code = "1672-5" or @code = "1673-3" or @code = "1675-8" or @code = "1677-4" or @code = "1679-0" or @code = "1680-8" or @code = "1681-6" or @code = "1683-2" or @code = "1685-7" or @code = "1687-3" or @code = "1688-1" or @code = "1689-9" or @code = "1690-7" or @code = "1692-3" or @code = "1694-9" or @code = "1696-4" or @code = "1697-2" or @code = "1698-0" or @code = "1700-4" or @code = "1702-0" or @code = "1704-6" or @code = "1705-3" or @code = "1707-9" or @code = "1709-5" or @code = "1711-1" or @code = "1712-9" or @code = "1713-7" or @code = "1715-2" or @code = "1717-8" or @code = "1718-6" or @code = "1719-4" or @code = "1720-2" or @code = "1722-8" or @code = "1724-4" or @code = "1725-1" or @code = "1726-9" or @code = "1727-7" or @code = "1728-5" or @code = "1729-3" or @code = "1730-1" or @code = "1731-9" or @code = "1732-7" or @code = "1733-5" or @code = "1735-0" or @code = "1737-6" or @code = "1739-2" or @code = "1740-0" or @code = "1741-8" or @code = "1742-6" or @code = "1743-4" or @code = "1744-2" or @code = "1745-9" or @code = "1746-7" or @code = "1747-5" or @code = "1748-3" or @code = "1749-1" or @code = "1750-9" or @code = "1751-7" or @code = "1752-5" or @code = "1753-3" or @code = "1754-1" or @code = "1755-8" or @code = "1756-6" or @code = "1757-4" or @code = "1758-2" or @code = "1759-0" or @code = "1760-8" or @code = "1761-6" or @code = "1762-4" or @code = "1763-2" or @code = "1764-0" or @code = "1765-7" or @code = "1766-5" or @code = "1767-3" or @code = "1768-1" or @code = "1769-9" or @code = "1770-7" or @code = "1771-5" or @code = "1772-3" or @code = "1773-1" or @code = "1774-9" or @code = "1775-6" or @code = "1776-4" or @code = "1777-2" or @code = "1778-0" or @code = "1779-8" or @code = "1780-6" or @code = "1781-4" or @code = "1782-2" or @code = "1783-0" or @code = "1784-8" or @code = "1785-5" or @code = "1786-3" or @code = "1787-1" or @code = "1788-9" or @code = "1789-7" or @code = "1790-5" or @code = "1791-3" or @code = "1792-1" or @code = "1793-9" or @code = "1794-7" or @code = "1795-4" or @code = "1796-2" or @code = "1797-0" or @code = "1798-8" or @code = "1799-6" or @code = "1800-2" or @code = "1801-0" or @code = "1802-8" or @code = "1803-6" or @code = "1804-4" or @code = "1805-1" or @code = "1806-9" or @code = "1807-7" or @code = "1808-5" or @code = "1809-3" or @code = "1811-9" or @code = "1813-5" or @code = "1814-3" or @code = "1815-0" or @code = "1816-8" or @code = "1817-6" or @code = "1818-4" or @code = "1819-2" or @code = "1820-0" or @code = "1821-8" or @code = "1822-6" or @code = "1823-4" or @code = "1824-2" or @code = "1825-9" or @code = "1826-7" or @code = "1827-5" or @code = "1828-3" or @code = "1829-1" or @code = "1830-9" or @code = "1831-7" or @code = "1832-5" or @code = "1833-3" or @code = "1834-1" or @code = "1835-8" or @code = "1837-4" or @code = "1838-2" or @code = "1840-8" or @code = "1842-4" or @code = "1844-0" or @code = "1845-7" or @code = "1846-5" or @code = "1847-3" or @code = "1848-1" or @code = "1849-9" or @code = "1850-7" or @code = "1851-5" or @code = "1852-3" or @code = "1853-1" or @code = "1854-9" or @code = "1855-6" or @code = "1856-4" or @code = "1857-2" or @code = "1858-0" or @code = "1859-8" or @code = "1860-6" or @code = "1861-4" or @code = "1862-2" or @code = "1863-0" or @code = "1864-8" or @code = "1865-5" or @code = "1866-3" or @code = "1867-1" or @code = "1868-9" or @code = "1869-7" or @code = "1870-5" or @code = "1871-3" or @code = "1872-1" or @code = "1873-9" or @code = "1874-7" or @code = "1875-4" or @code = "1876-2" or @code = "1877-0" or @code = "1878-8" or @code = "1879-6" or @code = "1880-4" or @code = "1881-2" or @code = "1882-0" or @code = "1883-8" or @code = "1884-6" or @code = "1885-3" or @code = "1886-1" or @code = "1887-9" or @code = "1888-7" or @code = "1889-5" or @code = "1891-1" or @code = "1892-9" or @code = "1893-7" or @code = "1894-5" or @code = "1896-0" or @code = "1897-8" or @code = "1898-6" or @code = "1899-4" or @code = "1900-0" or @code = "1901-8" or @code = "1902-6" or @code = "1903-4" or @code = "1904-2" or @code = "1905-9" or @code = "1906-7" or @code = "1907-5" or @code = "1908-3" or @code = "1909-1" or @code = "1910-9" or @code = "1911-7" or @code = "1912-5" or @code = "1913-3" or @code = "1914-1" or @code = "1915-8" or @code = "1916-6" or @code = "1917-4" or @code = "1918-2" or @code = "1919-0" or @code = "1920-8" or @code = "1921-6" or @code = "1922-4" or @code = "1923-2" or @code = "1924-0" or @code = "1925-7" or @code = "1926-5" or @code = "1927-3" or @code = "1928-1" or @code = "1929-9" or @code = "1930-7" or @code = "1931-5" or @code = "1932-3" or @code = "1933-1" or @code = "1934-9" or @code = "1935-6" or @code = "1936-4" or @code = "1937-2" or @code = "1938-0" or @code = "1939-8" or @code = "1940-6" or @code = "1941-4" or @code = "1942-2" or @code = "1943-0" or @code = "1944-8" or @code = "1945-5" or @code = "1946-3" or @code = "1947-1" or @code = "1948-9" or @code = "1949-7" or @code = "1950-5" or @code = "1951-3" or @code = "1952-1" or @code = "1953-9" or @code = "1954-7" or @code = "1955-4" or @code = "1956-2" or @code = "1957-0" or @code = "1958-8" or @code = "1959-6" or @code = "1960-4" or @code = "1961-2" or @code = "1962-0" or @code = "1963-8" or @code = "1964-6" or @code = "1966-1" or @code = "1968-7" or @code = "1969-5" or @code = "1970-3" or @code = "1972-9" or @code = "1973-7" or @code = "1974-5" or @code = "1975-2" or @code = "1976-0" or @code = "1977-8" or @code = "1978-6" or @code = "1979-4" or @code = "1980-2" or @code = "1981-0" or @code = "1982-8" or @code = "1984-4" or @code = "1985-1" or @code = "1986-9" or @code = "1987-7" or @code = "1988-5" or @code = "1990-1" or @code = "1992-7" or @code = "1993-5" or @code = "1994-3" or @code = "1995-0" or @code = "1996-8" or @code = "1997-6" or @code = "1998-4" or @code = "1999-2" or @code = "2000-8" or @code = "2002-4" or @code = "2004-0" or @code = "2006-5" or @code = "2007-3" or @code = "2008-1" or @code = "2009-9" or @code = "2010-7" or @code = "2011-5" or @code = "2012-3" or @code = "2013-1" or @code = "2014-9" or @code = "2015-6" or @code = "2016-4" or @code = "2017-2" or @code = "2018-0" or @code = "2019-8" or @code = "2020-6" or @code = "2021-4" or @code = "2022-2" or @code = "2023-0" or @code = "2024-8" or @code = "2025-5" or @code = "2026-3" or @code = "2028-9" or @code = "2029-7" or @code = "2030-5" or @code = "2031-3" or @code = "2032-1" or @code = "2033-9" or @code = "2034-7" or @code = "2035-4" or @code = "2036-2" or @code = "2037-0" or @code = "2038-8" or @code = "2039-6" or @code = "2040-4" or @code = "2041-2" or @code = "2042-0" or @code = "2043-8" or @code = "2044-6" or @code = "2045-3" or @code = "2046-1" or @code = "2047-9" or @code = "2048-7" or @code = "2049-5" or @code = "2050-3" or @code = "2051-1" or @code = "2052-9" or @code = "2054-5" or @code = "2056-0" or @code = "2058-6" or @code = "2060-2" or @code = "2061-0" or @code = "2062-8" or @code = "2063-6" or @code = "2064-4" or @code = "2065-1" or @code = "2066-9" or @code = "2067-7" or @code = "2068-5" or @code = "2069-3" or @code = "2070-1" or @code = "2071-9" or @code = "2072-7" or @code = "2073-5" or @code = "2074-3" or @code = "2075-0" or @code = "2076-8" or @code = "2078-4" or @code = "2079-2" or @code = "2080-0" or @code = "2081-8" or @code = "2082-6" or @code = "2083-4" or @code = "2085-9" or @code = "2086-7" or @code = "2087-5" or @code = "2088-3" or @code = "2089-1" or @code = "2090-9" or @code = "2091-7" or @code = "2092-5" or @code = "2093-3" or @code = "2094-1" or @code = "2095-8" or @code = "2096-6" or @code = "2097-4" or @code = "2098-2" or @code = "2100-6" or @code = "2101-4" or @code = "2102-2" or @code = "2103-0" or @code = "2104-8" or @code = "2106-3" or @code = "2108-9" or @code = "2109-7" or @code = "2110-5" or @code = "2111-3" or @code = "2112-1" or @code = "2113-9" or @code = "2114-7" or @code = "2115-4" or @code = "2116-2" or @code = "2118-8" or @code = "2119-6" or @code = "2120-4" or @code = "2121-2" or @code = "2122-0" or @code = "2123-8" or @code = "2124-6" or @code = "2125-3" or @code = "2126-1" or @code = "2127-9" or @code = "2129-5" or @code = "2131-1" or @code = "2500-7"])"/>
|
---|
| 439 | <xsl:otherwise>
|
---|
| 440 | <xsl:message>
|
---|
| 441 | Error: CONF-QRDA1-28 The patient's race 'code' attribute value SHALL be valid according to Appendix_O-Race in the posted Downloadable Resource table.
|
---|
| 442 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:raceCode[@code = "1002-5" or @code = "1004-1" or @code = "1006-6" or @code = "1008-2" or @code = "1010-8" or @code = "1011-6" or @code = "1012-4" or @code = "1013-2" or @code = "1014-0" or @code = "1015-7" or @code = "1016-5" or @code = "1017-3" or @code = "1018-1" or @code = "1019-9" or @code = "1021-5" or @code = "1022-3" or @code = "1023-1" or @code = "1024-9" or @code = "1026-4" or @code = "1028-0" or @code = "1030-6" or @code = "1031-4" or @code = "1033-0" or @code = "1035-5" or @code = "1037-1" or @code = "1039-7" or @code = "1041-3" or @code = "1042-1" or @code = "1044-7" or @code = "1045-4" or @code = "1046-2" or @code = "1047-0" or @code = "1048-8" or @code = "1049-6" or @code = "1050-4" or @code = "1051-2" or @code = "1053-8" or @code = "1054-6" or @code = "1055-3" or @code = "1056-1" or @code = "1057-9" or @code = "1058-7" or @code = "1059-5" or @code = "1060-3" or @code = "1061-1" or @code = "1062-9" or @code = "1063-7" or @code = "1064-5" or @code = "1065-2" or @code = "1066-0" or @code = "1068-6" or @code = "1069-4" or @code = "1070-2" or @code = "1071-0" or @code = "1072-8" or @code = "1073-6" or @code = "1074-4" or @code = "1076-9" or @code = "1078-5" or @code = "1080-1" or @code = "1082-7" or @code = "1083-5" or @code = "1084-3" or @code = "1086-8" or @code = "1088-4" or @code = "1089-2" or @code = "1090-0" or @code = "1091-8" or @code = "1092-6" or @code = "1093-4" or @code = "1094-2" or @code = "1095-9" or @code = "1096-7" or @code = "1097-5" or @code = "1098-3" or @code = "1100-7" or @code = "1102-3" or @code = "1103-1" or @code = "1104-9" or @code = "1106-4" or @code = "1108-0" or @code = "1109-8" or @code = "1110-6" or @code = "1112-2" or @code = "1114-8" or @code = "1115-5" or @code = "1116-3" or @code = "1117-1" or @code = "1118-9" or @code = "1119-7" or @code = "1120-5" or @code = "1121-3" or @code = "1123-9" or @code = "1124-7" or @code = "1125-4" or @code = "1126-2" or @code = "1127-0" or @code = "1128-8" or @code = "1129-6" or @code = "1130-4" or @code = "1131-2" or @code = "1132-0" or @code = "1133-8" or @code = "1134-6" or @code = "1135-3" or @code = "1136-1" or @code = "1137-9" or @code = "1138-7" or @code = "1139-5" or @code = "1140-3" or @code = "1141-1" or @code = "1142-9" or @code = "1143-7" or @code = "1144-5" or @code = "1145-2" or @code = "1146-0" or @code = "1147-8" or @code = "1148-6" or @code = "1150-2" or @code = "1151-0" or @code = "1153-6" or @code = "1155-1" or @code = "1156-9" or @code = "1157-7" or @code = "1158-5" or @code = "1159-3" or @code = "1160-1" or @code = "1162-7" or @code = "1163-5" or @code = "1165-0" or @code = "1167-6" or @code = "1169-2" or @code = "1171-8" or @code = "1173-4" or @code = "1175-9" or @code = "1176-7" or @code = "1178-3" or @code = "1180-9" or @code = "1182-5" or @code = "1184-1" or @code = "1186-6" or @code = "1187-4" or @code = "1189-0" or @code = "1191-6" or @code = "1193-2" or @code = "1194-0" or @code = "1195-7" or @code = "1196-5" or @code = "1197-3" or @code = "1198-1" or @code = "1199-9" or @code = "1200-5" or @code = "1201-3" or @code = "1202-1" or @code = "1203-9" or @code = "1204-7" or @code = "1205-4" or @code = "1207-0" or @code = "1209-6" or @code = "1211-2" or @code = "1212-0" or @code = "1214-6" or @code = "1215-3" or @code = "1216-1" or @code = "1217-9" or @code = "1218-7" or @code = "1219-5" or @code = "1220-3" or @code = "1222-9" or @code = "1223-7" or @code = "1224-5" or @code = "1225-2" or @code = "1226-0" or @code = "1227-8" or @code = "1228-6" or @code = "1229-4" or @code = "1230-2" or @code = "1231-0" or @code = "1233-6" or @code = "1234-4" or @code = "1235-1" or @code = "1236-9" or @code = "1237-7" or @code = "1238-5" or @code = "1239-3" or @code = "1240-1" or @code = "1241-9" or @code = "1242-7" or @code = "1243-5" or @code = "1244-3" or @code = "1245-0" or @code = "1246-8" or @code = "1247-6" or @code = "1248-4" or @code = "1250-0" or @code = "1252-6" or @code = "1254-2" or @code = "1256-7" or @code = "1258-3" or @code = "1260-9" or @code = "1262-5" or @code = "1264-1" or @code = "1265-8" or @code = "1267-4" or @code = "1269-0" or @code = "1271-6" or @code = "1272-4" or @code = "1273-2" or @code = "1275-7" or @code = "1277-3" or @code = "1279-9" or @code = "1281-5" or @code = "1282-3" or @code = "1283-1" or @code = "1285-6" or @code = "1286-4" or @code = "1287-2" or @code = "1288-0" or @code = "1289-8" or @code = "1290-6" or @code = "1291-4" or @code = "1292-2" or @code = "1293-0" or @code = "1294-8" or @code = "1295-5" or @code = "1297-1" or @code = "1299-7" or @code = "1301-1" or @code = "1303-7" or @code = "1305-2" or @code = "1306-0" or @code = "1307-8" or @code = "1309-4" or @code = "1310-2" or @code = "1312-8" or @code = "1313-6" or @code = "1314-4" or @code = "1315-1" or @code = "1317-7" or @code = "1319-3" or @code = "1321-9" or @code = "1323-5" or @code = "1325-0" or @code = "1326-8" or @code = "1327-6" or @code = "1328-4" or @code = "1329-2" or @code = "1331-8" or @code = "1332-6" or @code = "1333-4" or @code = "1334-2" or @code = "1335-9" or @code = "1336-7" or @code = "1337-5" or @code = "1338-3" or @code = "1340-9" or @code = "1342-5" or @code = "1344-1" or @code = "1345-8" or @code = "1346-6" or @code = "1348-2" or @code = "1350-8" or @code = "1352-4" or @code = "1354-0" or @code = "1356-5" or @code = "1358-1" or @code = "1359-9" or @code = "1360-7" or @code = "1361-5" or @code = "1363-1" or @code = "1365-6" or @code = "1366-4" or @code = "1368-0" or @code = "1370-6" or @code = "1372-2" or @code = "1374-8" or @code = "1376-3" or @code = "1378-9" or @code = "1380-5" or @code = "1382-1" or @code = "1383-9" or @code = "1384-7" or @code = "1385-4" or @code = "1387-0" or @code = "1389-6" or @code = "1391-2" or @code = "1392-0" or @code = "1393-8" or @code = "1394-6" or @code = "1395-3" or @code = "1396-1" or @code = "1397-9" or @code = "1398-7" or @code = "1399-5" or @code = "1400-1" or @code = "1401-9" or @code = "1403-5" or @code = "1405-0" or @code = "1407-6" or @code = "1409-2" or @code = "1411-8" or @code = "1412-6" or @code = "1413-4" or @code = "1414-2" or @code = "1416-7" or @code = "1417-5" or @code = "1418-3" or @code = "1419-1" or @code = "1420-9" or @code = "1421-7" or @code = "1422-5" or @code = "1423-3" or @code = "1424-1" or @code = "1425-8" or @code = "1426-6" or @code = "1427-4" or @code = "1428-2" or @code = "1429-0" or @code = "1430-8" or @code = "1431-6" or @code = "1432-4" or @code = "1433-2" or @code = "1434-0" or @code = "1435-7" or @code = "1436-5" or @code = "1437-3" or @code = "1439-9" or @code = "1441-5" or @code = "1442-3" or @code = "1443-1" or @code = "1445-6" or @code = "1446-4" or @code = "1448-0" or @code = "1450-6" or @code = "1451-4" or @code = "1453-0" or @code = "1454-8" or @code = "1456-3" or @code = "1457-1" or @code = "1458-9" or @code = "1460-5" or @code = "1462-1" or @code = "1464-7" or @code = "1465-4" or @code = "1466-2" or @code = "1467-0" or @code = "1468-8" or @code = "1469-6" or @code = "1470-4" or @code = "1471-2" or @code = "1472-0" or @code = "1474-6" or @code = "1475-3" or @code = "1476-1" or @code = "1478-7" or @code = "1479-5" or @code = "1480-3" or @code = "1481-1" or @code = "1482-9" or @code = "1483-7" or @code = "1484-5" or @code = "1485-2" or @code = "1487-8" or @code = "1489-4" or @code = "1490-2" or @code = "1491-0" or @code = "1492-8" or @code = "1493-6" or @code = "1494-4" or @code = "1495-1" or @code = "1496-9" or @code = "1497-7" or @code = "1498-5" or @code = "1499-3" or @code = "1500-8" or @code = "1501-6" or @code = "1502-4" or @code = "1503-2" or @code = "1504-0" or @code = "1505-7" or @code = "1506-5" or @code = "1507-3" or @code = "1508-1" or @code = "1509-9" or @code = "1510-7" or @code = "1511-5" or @code = "1512-3" or @code = "1513-1" or @code = "1514-9" or @code = "1515-6" or @code = "1516-4" or @code = "1518-0" or @code = "1519-8" or @code = "1520-6" or @code = "1521-4" or @code = "1522-2" or @code = "1523-0" or @code = "1524-8" or @code = "1525-5" or @code = "1526-3" or @code = "1527-1" or @code = "1528-9" or @code = "1529-7" or @code = "1530-5" or @code = "1531-3" or @code = "1532-1" or @code = "1533-9" or @code = "1534-7" or @code = "1535-4" or @code = "1536-2" or @code = "1537-0" or @code = "1538-8" or @code = "1539-6" or @code = "1541-2" or @code = "1543-8" or @code = "1545-3" or @code = "1547-9" or @code = "1549-5" or @code = "1551-1" or @code = "1552-9" or @code = "1553-7" or @code = "1554-5" or @code = "1556-0" or @code = "1558-6" or @code = "1560-2" or @code = "1562-8" or @code = "1564-4" or @code = "1566-9" or @code = "1567-7" or @code = "1568-5" or @code = "1569-3" or @code = "1570-1" or @code = "1571-9" or @code = "1573-5" or @code = "1574-3" or @code = "1576-8" or @code = "1578-4" or @code = "1579-2" or @code = "1580-0" or @code = "1582-6" or @code = "1584-2" or @code = "1586-7" or @code = "1587-5" or @code = "1588-3" or @code = "1589-1" or @code = "1590-9" or @code = "1591-7" or @code = "1592-5" or @code = "1593-3" or @code = "1594-1" or @code = "1595-8" or @code = "1596-6" or @code = "1597-4" or @code = "1598-2" or @code = "1599-0" or @code = "1600-6" or @code = "1602-2" or @code = "1603-0" or @code = "1604-8" or @code = "1605-5" or @code = "1607-1" or @code = "1609-7" or @code = "1610-5" or @code = "1611-3" or @code = "1612-1" or @code = "1613-9" or @code = "1614-7" or @code = "1615-4" or @code = "1616-2" or @code = "1617-0" or @code = "1618-8" or @code = "1619-6" or @code = "1620-4" or @code = "1621-2" or @code = "1622-0" or @code = "1623-8" or @code = "1624-6" or @code = "1625-3" or @code = "1626-1" or @code = "1627-9" or @code = "1628-7" or @code = "1629-5" or @code = "1630-3" or @code = "1631-1" or @code = "1632-9" or @code = "1633-7" or @code = "1634-5" or @code = "1635-2" or @code = "1636-0" or @code = "1637-8" or @code = "1638-6" or @code = "1639-4" or @code = "1640-2" or @code = "1641-0" or @code = "1643-6" or @code = "1645-1" or @code = "1647-7" or @code = "1649-3" or @code = "1651-9" or @code = "1653-5" or @code = "1654-3" or @code = "1655-0" or @code = "1656-8" or @code = "1657-6" or @code = "1659-2" or @code = "1661-8" or @code = "1663-4" or @code = "1665-9" or @code = "1667-5" or @code = "1668-3" or @code = "1670-9" or @code = "1671-7" or @code = "1672-5" or @code = "1673-3" or @code = "1675-8" or @code = "1677-4" or @code = "1679-0" or @code = "1680-8" or @code = "1681-6" or @code = "1683-2" or @code = "1685-7" or @code = "1687-3" or @code = "1688-1" or @code = "1689-9" or @code = "1690-7" or @code = "1692-3" or @code = "1694-9" or @code = "1696-4" or @code = "1697-2" or @code = "1698-0" or @code = "1700-4" or @code = "1702-0" or @code = "1704-6" or @code = "1705-3" or @code = "1707-9" or @code = "1709-5" or @code = "1711-1" or @code = "1712-9" or @code = "1713-7" or @code = "1715-2" or @code = "1717-8" or @code = "1718-6" or @code = "1719-4" or @code = "1720-2" or @code = "1722-8" or @code = "1724-4" or @code = "1725-1" or @code = "1726-9" or @code = "1727-7" or @code = "1728-5" or @code = "1729-3" or @code = "1730-1" or @code = "1731-9" or @code = "1732-7" or @code = "1733-5" or @code = "1735-0" or @code = "1737-6" or @code = "1739-2" or @code = "1740-0" or @code = "1741-8" or @code = "1742-6" or @code = "1743-4" or @code = "1744-2" or @code = "1745-9" or @code = "1746-7" or @code = "1747-5" or @code = "1748-3" or @code = "1749-1" or @code = "1750-9" or @code = "1751-7" or @code = "1752-5" or @code = "1753-3" or @code = "1754-1" or @code = "1755-8" or @code = "1756-6" or @code = "1757-4" or @code = "1758-2" or @code = "1759-0" or @code = "1760-8" or @code = "1761-6" or @code = "1762-4" or @code = "1763-2" or @code = "1764-0" or @code = "1765-7" or @code = "1766-5" or @code = "1767-3" or @code = "1768-1" or @code = "1769-9" or @code = "1770-7" or @code = "1771-5" or @code = "1772-3" or @code = "1773-1" or @code = "1774-9" or @code = "1775-6" or @code = "1776-4" or @code = "1777-2" or @code = "1778-0" or @code = "1779-8" or @code = "1780-6" or @code = "1781-4" or @code = "1782-2" or @code = "1783-0" or @code = "1784-8" or @code = "1785-5" or @code = "1786-3" or @code = "1787-1" or @code = "1788-9" or @code = "1789-7" or @code = "1790-5" or @code = "1791-3" or @code = "1792-1" or @code = "1793-9" or @code = "1794-7" or @code = "1795-4" or @code = "1796-2" or @code = "1797-0" or @code = "1798-8" or @code = "1799-6" or @code = "1800-2" or @code = "1801-0" or @code = "1802-8" or @code = "1803-6" or @code = "1804-4" or @code = "1805-1" or @code = "1806-9" or @code = "1807-7" or @code = "1808-5" or @code = "1809-3" or @code = "1811-9" or @code = "1813-5" or @code = "1814-3" or @code = "1815-0" or @code = "1816-8" or @code = "1817-6" or @code = "1818-4" or @code = "1819-2" or @code = "1820-0" or @code = "1821-8" or @code = "1822-6" or @code = "1823-4" or @code = "1824-2" or @code = "1825-9" or @code = "1826-7" or @code = "1827-5" or @code = "1828-3" or @code = "1829-1" or @code = "1830-9" or @code = "1831-7" or @code = "1832-5" or @code = "1833-3" or @code = "1834-1" or @code = "1835-8" or @code = "1837-4" or @code = "1838-2" or @code = "1840-8" or @code = "1842-4" or @code = "1844-0" or @code = "1845-7" or @code = "1846-5" or @code = "1847-3" or @code = "1848-1" or @code = "1849-9" or @code = "1850-7" or @code = "1851-5" or @code = "1852-3" or @code = "1853-1" or @code = "1854-9" or @code = "1855-6" or @code = "1856-4" or @code = "1857-2" or @code = "1858-0" or @code = "1859-8" or @code = "1860-6" or @code = "1861-4" or @code = "1862-2" or @code = "1863-0" or @code = "1864-8" or @code = "1865-5" or @code = "1866-3" or @code = "1867-1" or @code = "1868-9" or @code = "1869-7" or @code = "1870-5" or @code = "1871-3" or @code = "1872-1" or @code = "1873-9" or @code = "1874-7" or @code = "1875-4" or @code = "1876-2" or @code = "1877-0" or @code = "1878-8" or @code = "1879-6" or @code = "1880-4" or @code = "1881-2" or @code = "1882-0" or @code = "1883-8" or @code = "1884-6" or @code = "1885-3" or @code = "1886-1" or @code = "1887-9" or @code = "1888-7" or @code = "1889-5" or @code = "1891-1" or @code = "1892-9" or @code = "1893-7" or @code = "1894-5" or @code = "1896-0" or @code = "1897-8" or @code = "1898-6" or @code = "1899-4" or @code = "1900-0" or @code = "1901-8" or @code = "1902-6" or @code = "1903-4" or @code = "1904-2" or @code = "1905-9" or @code = "1906-7" or @code = "1907-5" or @code = "1908-3" or @code = "1909-1" or @code = "1910-9" or @code = "1911-7" or @code = "1912-5" or @code = "1913-3" or @code = "1914-1" or @code = "1915-8" or @code = "1916-6" or @code = "1917-4" or @code = "1918-2" or @code = "1919-0" or @code = "1920-8" or @code = "1921-6" or @code = "1922-4" or @code = "1923-2" or @code = "1924-0" or @code = "1925-7" or @code = "1926-5" or @code = "1927-3" or @code = "1928-1" or @code = "1929-9" or @code = "1930-7" or @code = "1931-5" or @code = "1932-3" or @code = "1933-1" or @code = "1934-9" or @code = "1935-6" or @code = "1936-4" or @code = "1937-2" or @code = "1938-0" or @code = "1939-8" or @code = "1940-6" or @code = "1941-4" or @code = "1942-2" or @code = "1943-0" or @code = "1944-8" or @code = "1945-5" or @code = "1946-3" or @code = "1947-1" or @code = "1948-9" or @code = "1949-7" or @code = "1950-5" or @code = "1951-3" or @code = "1952-1" or @code = "1953-9" or @code = "1954-7" or @code = "1955-4" or @code = "1956-2" or @code = "1957-0" or @code = "1958-8" or @code = "1959-6" or @code = "1960-4" or @code = "1961-2" or @code = "1962-0" or @code = "1963-8" or @code = "1964-6" or @code = "1966-1" or @code = "1968-7" or @code = "1969-5" or @code = "1970-3" or @code = "1972-9" or @code = "1973-7" or @code = "1974-5" or @code = "1975-2" or @code = "1976-0" or @code = "1977-8" or @code = "1978-6" or @code = "1979-4" or @code = "1980-2" or @code = "1981-0" or @code = "1982-8" or @code = "1984-4" or @code = "1985-1" or @code = "1986-9" or @code = "1987-7" or @code = "1988-5" or @code = "1990-1" or @code = "1992-7" or @code = "1993-5" or @code = "1994-3" or @code = "1995-0" or @code = "1996-8" or @code = "1997-6" or @code = "1998-4" or @code = "1999-2" or @code = "2000-8" or @code = "2002-4" or @code = "2004-0" or @code = "2006-5" or @code = "2007-3" or @code = "2008-1" or @code = "2009-9" or @code = "2010-7" or @code = "2011-5" or @code = "2012-3" or @code = "2013-1" or @code = "2014-9" or @code = "2015-6" or @code = "2016-4" or @code = "2017-2" or @code = "2018-0" or @code = "2019-8" or @code = "2020-6" or @code = "2021-4" or @code = "2022-2" or @code = "2023-0" or @code = "2024-8" or @code = "2025-5" or @code = "2026-3" or @code = "2028-9" or @code = "2029-7" or @code = "2030-5" or @code = "2031-3" or @code = "2032-1" or @code = "2033-9" or @code = "2034-7" or @code = "2035-4" or @code = "2036-2" or @code = "2037-0" or @code = "2038-8" or @code = "2039-6" or @code = "2040-4" or @code = "2041-2" or @code = "2042-0" or @code = "2043-8" or @code = "2044-6" or @code = "2045-3" or @code = "2046-1" or @code = "2047-9" or @code = "2048-7" or @code = "2049-5" or @code = "2050-3" or @code = "2051-1" or @code = "2052-9" or @code = "2054-5" or @code = "2056-0" or @code = "2058-6" or @code = "2060-2" or @code = "2061-0" or @code = "2062-8" or @code = "2063-6" or @code = "2064-4" or @code = "2065-1" or @code = "2066-9" or @code = "2067-7" or @code = "2068-5" or @code = "2069-3" or @code = "2070-1" or @code = "2071-9" or @code = "2072-7" or @code = "2073-5" or @code = "2074-3" or @code = "2075-0" or @code = "2076-8" or @code = "2078-4" or @code = "2079-2" or @code = "2080-0" or @code = "2081-8" or @code = "2082-6" or @code = "2083-4" or @code = "2085-9" or @code = "2086-7" or @code = "2087-5" or @code = "2088-3" or @code = "2089-1" or @code = "2090-9" or @code = "2091-7" or @code = "2092-5" or @code = "2093-3" or @code = "2094-1" or @code = "2095-8" or @code = "2096-6" or @code = "2097-4" or @code = "2098-2" or @code = "2100-6" or @code = "2101-4" or @code = "2102-2" or @code = "2103-0" or @code = "2104-8" or @code = "2106-3" or @code = "2108-9" or @code = "2109-7" or @code = "2110-5" or @code = "2111-3" or @code = "2112-1" or @code = "2113-9" or @code = "2114-7" or @code = "2115-4" or @code = "2116-2" or @code = "2118-8" or @code = "2119-6" or @code = "2120-4" or @code = "2121-2" or @code = "2122-0" or @code = "2123-8" or @code = "2124-6" or @code = "2125-3" or @code = "2126-1" or @code = "2127-9" or @code = "2129-5" or @code = "2131-1" or @code = "2500-7"]))</xsl:message>
|
---|
| 443 | </xsl:otherwise>
|
---|
| 444 | </xsl:choose>
|
---|
| 445 |
|
---|
| 446 | <!--ASSERT -->
|
---|
| 447 | <xsl:choose>
|
---|
| 448 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:patient/cda:birthTime)"/>
|
---|
| 449 | <xsl:otherwise>
|
---|
| 450 | <xsl:message>
|
---|
| 451 | Error: CONF-QRDA1-29 The 'birthTime' element SHALL be present.
|
---|
| 452 | ((cda:recordTarget/cda:patientRole/cda:patient/cda:birthTime))</xsl:message>
|
---|
| 453 | </xsl:otherwise>
|
---|
| 454 | </xsl:choose>
|
---|
| 455 |
|
---|
| 456 | <!--ASSERT -->
|
---|
| 457 | <xsl:choose>
|
---|
| 458 | <xsl:when test="string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:birthTime/@value) >= 8"/>
|
---|
| 459 | <xsl:otherwise>
|
---|
| 460 | <xsl:message>
|
---|
| 461 | Error: CONF-QRDA1-30 The birthTime value attribute value SHALL be at least precise to the day (YYYYMMDD).
|
---|
| 462 | (string-length(cda:recordTarget/cda:patientRole/cda:patient/cda:birthTime/@value) >= 8)</xsl:message>
|
---|
| 463 | </xsl:otherwise>
|
---|
| 464 | </xsl:choose>
|
---|
| 465 |
|
---|
| 466 | <!--ASSERT -->
|
---|
| 467 | <xsl:choose>
|
---|
| 468 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:providerOrganization) = 1"/>
|
---|
| 469 | <xsl:otherwise>
|
---|
| 470 | <xsl:message>
|
---|
| 471 | Error: CONF-QRDA1-31 The report SHALL contain exactly one /recordTarget/patientRole/providerOrganization.
|
---|
| 472 | (count(cda:recordTarget/cda:patientRole/cda:providerOrganization) = 1)</xsl:message>
|
---|
| 473 | </xsl:otherwise>
|
---|
| 474 | </xsl:choose>
|
---|
| 475 |
|
---|
| 476 | <!--ASSERT -->
|
---|
| 477 | <xsl:choose>
|
---|
| 478 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:id[@root="2.16.840.1.113883.4.6"])"/>
|
---|
| 479 | <xsl:otherwise>
|
---|
| 480 | <xsl:message>
|
---|
| 481 | Error: CONF-QRDA1-32 The id 'root' attribute value SHALL be '2.16.840.1.113883.4.6'.
|
---|
| 482 | ((cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:id[@root="2.16.840.1.113883.4.6"]))</xsl:message>
|
---|
| 483 | </xsl:otherwise>
|
---|
| 484 | </xsl:choose>
|
---|
| 485 | <xsl:variable name="npi"
|
---|
| 486 | select="cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:id/@extension"/>
|
---|
| 487 |
|
---|
| 488 | <!--ASSERT -->
|
---|
| 489 | <xsl:choose>
|
---|
| 490 | <xsl:when test="((sum(for $j in (for $i in reverse(string-to-codepoints($npi))[position() mod 2 = 0] return ($i - 48) * 2, for $i in reverse(string-to-codepoints($npi))[position() mod 2 = 1] return ($i - 48)) return ($j mod 10, $j idiv 10)) + 24) mod 10) = 0"/>
|
---|
| 491 | <xsl:otherwise>
|
---|
| 492 | <xsl:message>
|
---|
| 493 | Error: CONF-QRDA1-32 cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:id[@extension that containst the NPI Failed the NPI validation test!!
|
---|
| 494 | (((sum(for $j in (for $i in reverse(string-to-codepoints($npi))[position() mod 2 = 0] return ($i - 48) * 2, for $i in reverse(string-to-codepoints($npi))[position() mod 2 = 1] return ($i - 48)) return ($j mod 10, $j idiv 10)) + 24) mod 10) = 0)</xsl:message>
|
---|
| 495 | </xsl:otherwise>
|
---|
| 496 | </xsl:choose>
|
---|
| 497 |
|
---|
| 498 | <!--ASSERT -->
|
---|
| 499 | <xsl:choose>
|
---|
| 500 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:name)"/>
|
---|
| 501 | <xsl:otherwise>
|
---|
| 502 | <xsl:message>
|
---|
| 503 | Warning: CONF-QRDA1-33 recordTarget/patientRole/providerOrganization/name element SHOULD be present
|
---|
| 504 | ((cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:name))</xsl:message>
|
---|
| 505 | </xsl:otherwise>
|
---|
| 506 | </xsl:choose>
|
---|
| 507 |
|
---|
| 508 | <!--ASSERT -->
|
---|
| 509 | <xsl:choose>
|
---|
| 510 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr) >= 1"/>
|
---|
| 511 | <xsl:otherwise>
|
---|
| 512 | <xsl:message>
|
---|
| 513 | Error: CONF-QRDA1-34 At least one recordTarget/patientRole/providerOrganization/name element SHALL be present
|
---|
| 514 | (count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr) >= 1)</xsl:message>
|
---|
| 515 | </xsl:otherwise>
|
---|
| 516 | </xsl:choose>
|
---|
| 517 |
|
---|
| 518 | <!--ASSERT -->
|
---|
| 519 | <xsl:choose>
|
---|
| 520 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:streetAddressLine)"/>
|
---|
| 521 | <xsl:otherwise>
|
---|
| 522 | <xsl:message>
|
---|
| 523 | Warning: CONF-QRDA1-35 recordTarget/patientRole/providerOrganization/addr/streetAddressLine) element MAY be present
|
---|
| 524 | ((cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:streetAddressLine))</xsl:message>
|
---|
| 525 | </xsl:otherwise>
|
---|
| 526 | </xsl:choose>
|
---|
| 527 |
|
---|
| 528 | <!--ASSERT -->
|
---|
| 529 | <xsl:choose>
|
---|
| 530 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:city)"/>
|
---|
| 531 | <xsl:otherwise>
|
---|
| 532 | <xsl:message>
|
---|
| 533 | Warning: CONF-QRDA1-36 recordTarget/patientRole/providerOrganization/addr/city) element MAY be present
|
---|
| 534 | ((cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:city))</xsl:message>
|
---|
| 535 | </xsl:otherwise>
|
---|
| 536 | </xsl:choose>
|
---|
| 537 |
|
---|
| 538 | <!--ASSERT -->
|
---|
| 539 | <xsl:choose>
|
---|
| 540 | <xsl:when test="contains("AL AK AZ AR AS CA CO CT DE DC FL GA GU HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC MP ND OH OK OR PA PR RI SC SD TN TX UT VT VI VA WA WV WI WY",cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:state)"/>
|
---|
| 541 | <xsl:otherwise>
|
---|
| 542 | <xsl:message>
|
---|
| 543 | Error: CONF-QRDA1-37 recordTarget/patientRole/providerOrganization/addr/state) element SHALL be present and shall be one of the states in the Appendix_V-States Downloadable Resource
|
---|
| 544 | (contains("AL AK AZ AR AS CA CO CT DE DC FL GA GU HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC MP ND OH OK OR PA PR RI SC SD TN TX UT VT VI VA WA WV WI WY",cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:state))</xsl:message>
|
---|
| 545 | </xsl:otherwise>
|
---|
| 546 | </xsl:choose>
|
---|
| 547 |
|
---|
| 548 | <!--ASSERT -->
|
---|
| 549 | <xsl:choose>
|
---|
| 550 | <xsl:when test="(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:postalCode)"/>
|
---|
| 551 | <xsl:otherwise>
|
---|
| 552 | <xsl:message>
|
---|
| 553 | Warning: CONF-QRDA1-38 recordTarget/patientRole/providerOrganization/addr/postalCode) element MAY be present
|
---|
| 554 | ((cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:addr/cda:postalCode))</xsl:message>
|
---|
| 555 | </xsl:otherwise>
|
---|
| 556 | </xsl:choose>
|
---|
| 557 |
|
---|
| 558 | <!--ASSERT -->
|
---|
| 559 | <xsl:choose>
|
---|
| 560 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf) = 1"/>
|
---|
| 561 | <xsl:otherwise>
|
---|
| 562 | <xsl:message>
|
---|
| 563 | Error: CONF-QRDA1-39 Report SHALL contain exactly one recordTarget/patientRole/providerOrganization/asOrganizationPartOf element.
|
---|
| 564 | (count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf) = 1)</xsl:message>
|
---|
| 565 | </xsl:otherwise>
|
---|
| 566 | </xsl:choose>
|
---|
| 567 |
|
---|
| 568 | <!--ASSERT -->
|
---|
| 569 | <xsl:choose>
|
---|
| 570 | <xsl:when test="count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization) = 1"/>
|
---|
| 571 | <xsl:otherwise>
|
---|
| 572 | <xsl:message>
|
---|
| 573 | Error: CONF-QRDA1-40 Report SHALL contain exactly one recordTarget/patientRole/providerOrganization/asOrganizationPartOf/wholeOrganization element.
|
---|
| 574 | (count(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization) = 1)</xsl:message>
|
---|
| 575 | </xsl:otherwise>
|
---|
| 576 | </xsl:choose>
|
---|
| 577 |
|
---|
| 578 | <!--ASSERT -->
|
---|
| 579 | <xsl:choose>
|
---|
| 580 | <xsl:when test="cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization/cda:id[@root = "2.16.840.1.113883.4.2"]"/>
|
---|
| 581 | <xsl:otherwise>
|
---|
| 582 | <xsl:message>
|
---|
| 583 | Error: CONF-QRDA1-41 The id 'root' attribute value SHALL be '2.16.840.1.113883.4.2'.
|
---|
| 584 | (cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization/cda:id[@root = "2.16.840.1.113883.4.2"])</xsl:message>
|
---|
| 585 | </xsl:otherwise>
|
---|
| 586 | </xsl:choose>
|
---|
| 587 |
|
---|
| 588 | <!--ASSERT -->
|
---|
| 589 | <xsl:choose>
|
---|
| 590 | <xsl:when test="string-length(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization/cda:id/@extension) = "9""/>
|
---|
| 591 | <xsl:otherwise>
|
---|
| 592 | <xsl:message>
|
---|
| 593 | Error: CONF-QRDA1-41 The patient's provider's organization's id 'extension' attribute value SHALL be present as the provider's TIN (nine-digit value in XXXXXXXXX format).
|
---|
| 594 | (string-length(cda:recordTarget/cda:patientRole/cda:providerOrganization/cda:asOrganizationPartOf/cda:wholeOrganization/cda:id/@extension) = "9")</xsl:message>
|
---|
| 595 | </xsl:otherwise>
|
---|
| 596 | </xsl:choose>
|
---|
| 597 |
|
---|
| 598 | <!--ASSERT -->
|
---|
| 599 | <xsl:choose>
|
---|
| 600 | <xsl:when test="count(cda:author)= 1"/>
|
---|
| 601 | <xsl:otherwise>
|
---|
| 602 | <xsl:message>
|
---|
| 603 | CONF-QRDA1-42 Report SHALL contain exactly one /clinicalDocument/author.
|
---|
| 604 | (count(cda:author)= 1)</xsl:message>
|
---|
| 605 | </xsl:otherwise>
|
---|
| 606 | </xsl:choose>
|
---|
| 607 |
|
---|
| 608 | <!--ASSERT -->
|
---|
| 609 | <xsl:choose>
|
---|
| 610 | <xsl:when test="cda:author/cda:time"/>
|
---|
| 611 | <xsl:otherwise>
|
---|
| 612 | <xsl:message>
|
---|
| 613 | Error: CONF-QRDA1-43 The /clinicalDocument/author/time element shall be present.
|
---|
| 614 | (cda:author/cda:time)</xsl:message>
|
---|
| 615 | </xsl:otherwise>
|
---|
| 616 | </xsl:choose>
|
---|
| 617 |
|
---|
| 618 | <!--ASSERT -->
|
---|
| 619 | <xsl:choose>
|
---|
| 620 | <xsl:when test="string-length(cda:author/cda:time/@value) >= 8"/>
|
---|
| 621 | <xsl:otherwise>
|
---|
| 622 | <xsl:message>
|
---|
| 623 | Error: CONF-QRDA1-44 The effectiveTime value attribute value SHALL be at least precise to the day YYYYMMDD.
|
---|
| 624 | (string-length(cda:author/cda:time/@value) >= 8)</xsl:message>
|
---|
| 625 | </xsl:otherwise>
|
---|
| 626 | </xsl:choose>
|
---|
| 627 |
|
---|
| 628 | <!--ASSERT -->
|
---|
| 629 | <xsl:choose>
|
---|
| 630 | <xsl:when test="cda:author/cda:assignedAuthor"/>
|
---|
| 631 | <xsl:otherwise>
|
---|
| 632 | <xsl:message>
|
---|
| 633 | Error: CONF-QRDA1-45 clinicalDocument/author/assignedAuthor element SHALL be present.
|
---|
| 634 | (cda:author/cda:assignedAuthor)</xsl:message>
|
---|
| 635 | </xsl:otherwise>
|
---|
| 636 | </xsl:choose>
|
---|
| 637 |
|
---|
| 638 | <!--ASSERT -->
|
---|
| 639 | <xsl:choose>
|
---|
| 640 | <xsl:when test="cda:author/cda:assignedAuthor/cda:id[@root="2.16.840.1.113883.249.6"]"/>
|
---|
| 641 | <xsl:otherwise>
|
---|
| 642 | <xsl:message>
|
---|
| 643 | Error: CONF-QRDA1-46 clinicalDocument/author/assignedAuthor/id element SHALL be present. The id @root SHALL be 2.16.840.1.113883.249.6 and the @extension SHALL be the CMS Approved Qualified Software Version.
|
---|
| 644 | (cda:author/cda:assignedAuthor/cda:id[@root="2.16.840.1.113883.249.6"])</xsl:message>
|
---|
| 645 | </xsl:otherwise>
|
---|
| 646 | </xsl:choose>
|
---|
| 647 |
|
---|
| 648 | <!--ASSERT -->
|
---|
| 649 | <xsl:choose>
|
---|
| 650 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:assignedPerson) <= 1"/>
|
---|
| 651 | <xsl:otherwise>
|
---|
| 652 | <xsl:message>
|
---|
| 653 | Warning: CONF-QRDA1-47 and 48: A QRDA Category I report MAY contain a ClinicalDocument/author/assignedAuthor/assignedPerson element and if present may contain exactly one.
|
---|
| 654 | (count(cda:author/cda:assignedAuthor/cda:assignedPerson) <= 1)</xsl:message>
|
---|
| 655 | </xsl:otherwise>
|
---|
| 656 | </xsl:choose>
|
---|
| 657 |
|
---|
| 658 | <!--ASSERT -->
|
---|
| 659 | <xsl:choose>
|
---|
| 660 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:assignedPerson/name) >= 0"/>
|
---|
| 661 | <xsl:otherwise>
|
---|
| 662 | <xsl:message>
|
---|
| 663 | Error: CONF-QRDA1-49: A QRDA Category I report MAY contain at least one legal name ClinicalDocument/author/assignedAuthor/assignedPerson/name.
|
---|
| 664 | (count(cda:author/cda:assignedAuthor/cda:assignedPerson/name) >= 0)</xsl:message>
|
---|
| 665 | </xsl:otherwise>
|
---|
| 666 | </xsl:choose>
|
---|
| 667 |
|
---|
| 668 | <!--ASSERT -->
|
---|
| 669 | <xsl:choose>
|
---|
| 670 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:assignedPerson/cda:name/cda:given) >= 0"/>
|
---|
| 671 | <xsl:otherwise>
|
---|
| 672 | <xsl:message>
|
---|
| 673 | Error: CONF-QRDA1-50: A QRDA Category I report MAY contain at least one ClinicalDocument/author/assignedAuthor/assignedPerson/name/given.
|
---|
| 674 | (count(cda:author/cda:assignedAuthor/cda:assignedPerson/cda:name/cda:given) >= 0)</xsl:message>
|
---|
| 675 | </xsl:otherwise>
|
---|
| 676 | </xsl:choose>
|
---|
| 677 |
|
---|
| 678 | <!--ASSERT -->
|
---|
| 679 | <xsl:choose>
|
---|
| 680 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:assignedPerson/cda:name/cda:family) >= 0"/>
|
---|
| 681 | <xsl:otherwise>
|
---|
| 682 | <xsl:message>
|
---|
| 683 | Error: CONF-QRDA1-51: A QRDA Category I report MAY contain at least one ClinicalDocument/author/assignedAuthor/assignedPerson/name/family.
|
---|
| 684 | (count(cda:author/cda:assignedAuthor/cda:assignedPerson/cda:name/cda:family) >= 0)</xsl:message>
|
---|
| 685 | </xsl:otherwise>
|
---|
| 686 | </xsl:choose>
|
---|
| 687 |
|
---|
| 688 | <!--ASSERT -->
|
---|
| 689 | <xsl:choose>
|
---|
| 690 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:representedOrganization) <= 1"/>
|
---|
| 691 | <xsl:otherwise>
|
---|
| 692 | <xsl:message>
|
---|
| 693 | Error: CONF-QRDA1-52: A QRDA Category I report MAY contain one ClinicalDocument/author/assignedAuthor/representedOrganization.
|
---|
| 694 | (count(cda:author/cda:assignedAuthor/cda:representedOrganization) <= 1)</xsl:message>
|
---|
| 695 | </xsl:otherwise>
|
---|
| 696 | </xsl:choose>
|
---|
| 697 |
|
---|
| 698 | <!--ASSERT -->
|
---|
| 699 | <xsl:choose>
|
---|
| 700 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:representeOrganization/cda:id[@root="*"]) >= 0"/>
|
---|
| 701 | <xsl:otherwise>
|
---|
| 702 | <xsl:message>
|
---|
| 703 | Error: CONF-QRDA1-53: A QRDA Category I report MAY contain a ClinicalDocument/author/assignedAuthor/representedOrganization/id element with @root containing the OID of the authoring organization.
|
---|
| 704 | (count(cda:author/cda:assignedAuthor/cda:representeOrganization/cda:id[@root="*"]) >= 0)</xsl:message>
|
---|
| 705 | </xsl:otherwise>
|
---|
| 706 | </xsl:choose>
|
---|
| 707 |
|
---|
| 708 | <!--ASSERT -->
|
---|
| 709 | <xsl:choose>
|
---|
| 710 | <xsl:when test="count(cda:author/cda:assignedAuthor/cda:representeOrganization/name) >= 0"/>
|
---|
| 711 | <xsl:otherwise>
|
---|
| 712 | <xsl:message>
|
---|
| 713 | Error: CONF-QRDA1-54: A QRDA Category I report MAY contain a ClinicalDocument/author/assignedAuthor/representedOrganization/name element.
|
---|
| 714 | (count(cda:author/cda:assignedAuthor/cda:representeOrganization/name) >= 0)</xsl:message>
|
---|
| 715 | </xsl:otherwise>
|
---|
| 716 | </xsl:choose>
|
---|
| 717 |
|
---|
| 718 | <!--ASSERT -->
|
---|
| 719 | <xsl:choose>
|
---|
[906] | 720 | <xsl:when test="count(cda:informant) = 1"/>
|
---|
| 721 | <xsl:otherwise>
|
---|
| 722 | <xsl:message>
|
---|
| 723 | Error: CONF-QRDA-I-10: A QRDA Category I report SHALL contain exactly one
|
---|
| 724 | ClinicalDocument/informant, which represents the reporting facility.
|
---|
| 725 | CONF-QRDA-I-11: An organization source of information SHALL be represented with
|
---|
| 726 | informant.
|
---|
| 727 | (count(cda:informant) = 1)</xsl:message>
|
---|
| 728 | </xsl:otherwise>
|
---|
| 729 | </xsl:choose>
|
---|
| 730 |
|
---|
| 731 | <!--ASSERT -->
|
---|
| 732 | <xsl:choose>
|
---|
| 733 | <xsl:when test="cda:custodian/cda:assignedCustodian/cda:representedCustodianOrganization/cda:id/@root or cda:custodian/cda:assignedCustodian/cda:representedCustodianOrganization/cda:id[@nullFlavor="MSK"]"/>
|
---|
| 734 | <xsl:otherwise>
|
---|
| 735 | <xsl:message>
|
---|
| 736 | Error: CONF-QRDA-I-12: A QRDA Category I report SHALL contain exactly one
|
---|
| 737 | custodian/assignedCustodian/representedCustodianOrganization/
|
---|
| 738 | id element.
|
---|
| 739 | CONF-QRDA-I-13: The value of custodian/assignedCustodian/
|
---|
| 740 | representedCustodianOrganization/id element @root SHALL be the id
|
---|
| 741 | root of the custodian organization.
|
---|
| 742 | (cda:custodian/cda:assignedCustodian/cda:representedCustodianOrganization/cda:id/@root or cda:custodian/cda:assignedCustodian/cda:representedCustodianOrganization/cda:id[@nullFlavor="MSK"])</xsl:message>
|
---|
| 743 | </xsl:otherwise>
|
---|
| 744 | </xsl:choose>
|
---|
| 745 |
|
---|
| 746 | <!--ASSERT -->
|
---|
| 747 | <xsl:choose>
|
---|
| 748 | <xsl:when test="not(cda:legalAuthenticator) or count(cda:legalAuthenticator/cda:time) = 1"/>
|
---|
| 749 | <xsl:otherwise>
|
---|
| 750 | <xsl:message>
|
---|
| 751 | Error: CONF-QRDA-I-15: If present, a QRDA Category I report legalAuthenticator SHALL
|
---|
| 752 | contain exactly one ClinicalDocument/legalAuthenticator/time element.
|
---|
| 753 | (not(cda:legalAuthenticator) or count(cda:legalAuthenticator/cda:time) = 1)</xsl:message>
|
---|
| 754 | </xsl:otherwise>
|
---|
| 755 | </xsl:choose>
|
---|
| 756 |
|
---|
| 757 | <!--ASSERT -->
|
---|
| 758 | <xsl:choose>
|
---|
| 759 | <xsl:when test="not(cda:legalAuthenticator) or count(cda:legalAuthenticator/cda:signatureCode) = 1"/>
|
---|
| 760 | <xsl:otherwise>
|
---|
| 761 | <xsl:message>
|
---|
| 762 | Error: CONF-QRDA-I-16: If present, a QRDA Category I report legalAuthenticator SHALL
|
---|
| 763 | contain exactly one signatureCode element.
|
---|
| 764 | (not(cda:legalAuthenticator) or count(cda:legalAuthenticator/cda:signatureCode) = 1)</xsl:message>
|
---|
| 765 | </xsl:otherwise>
|
---|
| 766 | </xsl:choose>
|
---|
| 767 |
|
---|
| 768 | <!--ASSERT -->
|
---|
| 769 | <xsl:choose>
|
---|
| 770 | <xsl:when test="not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:signatureCode[@code="S"] or cda:legalAuthenticator/cda:signatureCode[@nullFlavor="MSK"]"/>
|
---|
| 771 | <xsl:otherwise>
|
---|
| 772 | <xsl:message>
|
---|
| 773 | Error: CONF-QRDA-I-17: The value of a QRDA ClinicalDocument/signatureCode/@code
|
---|
| 774 | SHALL be S.
|
---|
| 775 | (not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:signatureCode[@code="S"] or cda:legalAuthenticator/cda:signatureCode[@nullFlavor="MSK"])</xsl:message>
|
---|
| 776 | </xsl:otherwise>
|
---|
| 777 | </xsl:choose>
|
---|
| 778 |
|
---|
| 779 | <!--ASSERT -->
|
---|
| 780 | <xsl:choose>
|
---|
| 781 | <xsl:when test="not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:assignedEntity"/>
|
---|
| 782 | <xsl:otherwise>
|
---|
| 783 | <xsl:message>
|
---|
| 784 | Error: CONF-QRDA-I-18: If present, a QRDA Category I report legalAuthenticator SHALL
|
---|
| 785 | contain exactly one assignedEntity element that represents the legal
|
---|
| 786 | authenticator of the document.
|
---|
| 787 | (not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:assignedEntity)</xsl:message>
|
---|
| 788 | </xsl:otherwise>
|
---|
| 789 | </xsl:choose>
|
---|
| 790 |
|
---|
| 791 | <!--ASSERT -->
|
---|
| 792 | <xsl:choose>
|
---|
| 793 | <xsl:when test="not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:assignedEntity/cda:id"/>
|
---|
| 794 | <xsl:otherwise>
|
---|
| 795 | <xsl:message>
|
---|
| 796 | Error: CONF-QRDA-I-19: The ClinicalDocument/legalAuthenticator/assigned entity
|
---|
| 797 | SHALL contain an id element.
|
---|
| 798 | (not(cda:legalAuthenticator) or cda:legalAuthenticator/cda:assignedEntity/cda:id)</xsl:message>
|
---|
| 799 | </xsl:otherwise>
|
---|
| 800 | </xsl:choose>
|
---|
| 801 |
|
---|
| 802 | <!--ASSERT -->
|
---|
| 803 | <xsl:choose>
|
---|
| 804 | <xsl:when test="cda:component/cda:structuredBody"/>
|
---|
| 805 | <xsl:otherwise>
|
---|
| 806 | <xsl:message>
|
---|
| 807 | Error: CONF-QRDA-I-20: A QRDA Category I report SHALL contain exactly one
|
---|
| 808 | ClinicalDocument/component/structuredBody.
|
---|
| 809 | (cda:component/cda:structuredBody)</xsl:message>
|
---|
| 810 | </xsl:otherwise>
|
---|
| 811 | </xsl:choose>
|
---|
| 812 |
|
---|
| 813 | <!--ASSERT -->
|
---|
| 814 | <xsl:choose>
|
---|
| 815 | <xsl:when test="count(.//cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 0"/>
|
---|
| 816 | <xsl:otherwise>
|
---|
| 817 | <xsl:message>
|
---|
| 818 | Error: CONF-QRDA-I-21: A QRDA Category I report SHALL contain at least one and MAY contain
|
---|
| 819 | more than one Measure section each containing information about a single measure.
|
---|
| 820 | (count(.//cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 0)</xsl:message>
|
---|
| 821 | </xsl:otherwise>
|
---|
| 822 | </xsl:choose>
|
---|
| 823 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 824 | </xsl:template>
|
---|
| 825 |
|
---|
| 826 | <!--RULE -->
|
---|
| 827 | <xsl:template match="*[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 828 | priority="1004"
|
---|
| 829 | mode="M6">
|
---|
| 830 |
|
---|
| 831 | <!--ASSERT -->
|
---|
| 832 | <xsl:choose>
|
---|
| 833 | <xsl:when test="self::cda:section[parent::cda:component[parent::cda:structuredBody[parent::cda:component[parent::cda:ClinicalDocument]]]] or parent::cda:section[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]/cda:component"/>
|
---|
| 834 | <xsl:otherwise>
|
---|
| 835 | <xsl:message>
|
---|
| 836 | Error: CONF-QRDA-I-22: The Measure section SHALL be a top-level section if it is not part of a
|
---|
| 837 | measure set.
|
---|
| 838 | (self::cda:section[parent::cda:component[parent::cda:structuredBody[parent::cda:component[parent::cda:ClinicalDocument]]]] or parent::cda:section[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]/cda:component)</xsl:message>
|
---|
| 839 | </xsl:otherwise>
|
---|
| 840 | </xsl:choose>
|
---|
| 841 |
|
---|
| 842 | <!--ASSERT -->
|
---|
| 843 | <xsl:choose>
|
---|
| 844 | <xsl:when test="cda:templateId"/>
|
---|
| 845 | <xsl:otherwise>
|
---|
| 846 | <xsl:message>
|
---|
| 847 | Error: CONF-QRDA-I-33: The Measure section SHALL contain at least one templateId uniquely
|
---|
| 848 | identifying each Measure name and version
|
---|
| 849 | (cda:templateId)</xsl:message>
|
---|
| 850 | </xsl:otherwise>
|
---|
| 851 | </xsl:choose>
|
---|
| 852 |
|
---|
| 853 | <!--ASSERT -->
|
---|
| 854 | <xsl:choose>
|
---|
| 855 | <xsl:when test="not(parent::cda:section[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]/cda:entry) or contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"measure section: ")"/>
|
---|
| 856 | <xsl:otherwise>
|
---|
| 857 | <xsl:message>
|
---|
| 858 | Error: CONF-QRDA-I-36: A non-nested Measure section SHALL be valued with section/title
|
---|
| 859 | with a case-insensitive, text string containing "measure section:
|
---|
| 860 | <measure name>".
|
---|
| 861 | (not(parent::cda:section[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]/cda:entry) or contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"measure section: "))</xsl:message>
|
---|
| 862 | </xsl:otherwise>
|
---|
| 863 | </xsl:choose>
|
---|
| 864 |
|
---|
| 865 | <!--ASSERT -->
|
---|
| 866 | <xsl:choose>
|
---|
| 867 | <xsl:when test="not(parent::cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section) or contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"measure section")"/>
|
---|
| 868 | <xsl:otherwise>
|
---|
| 869 | <xsl:message>
|
---|
| 870 | Error: CONF-QRDA-I-37: A nested Measure section SHALL be valued with section/title with
|
---|
| 871 | a case-insensitive, text string containing "measure section".
|
---|
| 872 | (not(parent::cda:ClinicalDocument/cda:component/cda:structuredBody/cda:component/cda:section) or contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"measure section"))</xsl:message>
|
---|
| 873 | </xsl:otherwise>
|
---|
| 874 | </xsl:choose>
|
---|
| 875 |
|
---|
| 876 | <!--ASSERT -->
|
---|
| 877 | <xsl:choose>
|
---|
| 878 | <xsl:when test="count(.//cda:section[cda:code[@code = "55187-9" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1"/>
|
---|
| 879 | <xsl:otherwise>
|
---|
| 880 | <xsl:message>
|
---|
| 881 | Error: CONF-QRDA-I-39: A Measure section SHALL contain exactly one nested Reporting
|
---|
| 882 | Parameters section (as described in Section 2.4.3 Reporting Parameters
|
---|
| 883 | Section).
|
---|
| 884 | (count(.//cda:section[cda:code[@code = "55187-9" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1)</xsl:message>
|
---|
| 885 | </xsl:otherwise>
|
---|
| 886 | </xsl:choose>
|
---|
| 887 |
|
---|
| 888 | <!--ASSERT -->
|
---|
| 889 | <xsl:choose>
|
---|
| 890 | <xsl:when test="count(.//cda:section[cda:code[@code = "55188-7" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1"/>
|
---|
| 891 | <xsl:otherwise>
|
---|
| 892 | <xsl:message>
|
---|
| 893 | Error: CONF-QRDA-I-40: A Measure section SHALL contain exactly one nested Patient Data
|
---|
| 894 | section (as described in Section 2.4.4 Patient Data Section).
|
---|
| 895 | (count(.//cda:section[cda:code[@code = "55188-7" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1)</xsl:message>
|
---|
| 896 | </xsl:otherwise>
|
---|
| 897 | </xsl:choose>
|
---|
| 898 |
|
---|
| 899 | <!--ASSERT -->
|
---|
| 900 | <xsl:choose>
|
---|
| 901 | <xsl:when test="cda:entry/cda:act[@classCode="ACT" and @moodCode="DEF"]"/>
|
---|
| 902 | <xsl:otherwise>
|
---|
| 903 | <xsl:message>
|
---|
| 904 | Error: CONF-QRDA-I-42: Each measure SHALL be represented with act.
|
---|
| 905 | CONF-QRDA-I-43: For each act in the Measure section, the value for act/@classCode
|
---|
| 906 | in a measure act SHALL be ACT 2.16.840.1.113883.5.6 ActClass STATIC.
|
---|
| 907 | CONF-QRDA-I-44: For each act in the Measure section the act/@moodCode in a
|
---|
| 908 | measure act SHALL be DEF 2.16.840.1.113883.5.1001 ActMood STATIC.
|
---|
| 909 | (cda:entry/cda:act[@classCode="ACT" and @moodCode="DEF"])</xsl:message>
|
---|
| 910 | </xsl:otherwise>
|
---|
| 911 | </xsl:choose>
|
---|
| 912 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 913 | </xsl:template>
|
---|
| 914 |
|
---|
| 915 | <!--RULE -->
|
---|
| 916 | <xsl:template match="*[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]/cda:entry/cda:act[@classCode="ACT" and @moodCode="DEF"]"
|
---|
| 917 | priority="1003"
|
---|
| 918 | mode="M6">
|
---|
| 919 |
|
---|
| 920 | <!--ASSERT -->
|
---|
| 921 | <xsl:choose>
|
---|
| 922 | <xsl:when test="cda:code"/>
|
---|
| 923 | <xsl:otherwise>
|
---|
| 924 | <xsl:message>
|
---|
| 925 | Error: CONF-QRDA-I-45: For each act in the Measure section there SHALL be an act/code
|
---|
| 926 | reflecting the measure name and version.
|
---|
| 927 | (cda:code)</xsl:message>
|
---|
| 928 | </xsl:otherwise>
|
---|
| 929 | </xsl:choose>
|
---|
| 930 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 931 | </xsl:template>
|
---|
| 932 |
|
---|
| 933 | <!--RULE -->
|
---|
| 934 | <xsl:template match="*[cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 935 | priority="1002"
|
---|
| 936 | mode="M6">
|
---|
| 937 |
|
---|
| 938 | <!--ASSERT -->
|
---|
| 939 | <xsl:choose>
|
---|
| 940 | <xsl:when test="count(.//cda:section[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1"/>
|
---|
| 941 | <xsl:otherwise>
|
---|
| 942 | <xsl:message>
|
---|
| 943 | Error: CONF-QRDA-I-24: The Measure Set section SHALL contain one nested Measure section
|
---|
| 944 | and SHALL NOT contain more than one nested Measure section.
|
---|
| 945 | (count(.//cda:section[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]) = 1)</xsl:message>
|
---|
| 946 | </xsl:otherwise>
|
---|
| 947 | </xsl:choose>
|
---|
| 948 |
|
---|
| 949 | <!--ASSERT -->
|
---|
| 950 | <xsl:choose>
|
---|
| 951 | <xsl:when test="cda:templateId"/>
|
---|
| 952 | <xsl:otherwise>
|
---|
| 953 | <xsl:message>
|
---|
| 954 | Error: CONF-QRDA-I-26: The Measure Set section SHALL contain a templateId uniquely
|
---|
| 955 | identifying the Measure Set name and version.
|
---|
| 956 | (cda:templateId)</xsl:message>
|
---|
| 957 | </xsl:otherwise>
|
---|
| 958 | </xsl:choose>
|
---|
| 959 |
|
---|
| 960 | <!--ASSERT -->
|
---|
| 961 | <xsl:choose>
|
---|
| 962 | <xsl:when test="contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'measure set: ')"/>
|
---|
| 963 | <xsl:otherwise>
|
---|
| 964 | <xsl:message>
|
---|
| 965 | Error: CONF-QRDA-I-29: The Measure Set section SHALL be valued with section/title with a
|
---|
| 966 | case-insensitive, text string containing "Measure set: <measure set
|
---|
| 967 | name>".
|
---|
| 968 | (contains(translate(cda:title,'QWERTYUIOPASDFGHJKLZXCVBNM','qwertyuiopasdfghjklzxcvbnm'),'measure set: '))</xsl:message>
|
---|
| 969 | </xsl:otherwise>
|
---|
| 970 | </xsl:choose>
|
---|
| 971 |
|
---|
| 972 | <!--ASSERT -->
|
---|
| 973 | <xsl:choose>
|
---|
| 974 | <xsl:when test="count(.//cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 0 "/>
|
---|
| 975 | <xsl:otherwise>
|
---|
| 976 | <xsl:message>
|
---|
| 977 | Error: CONF-QRDA-I-31: The nested Measure section SHALL contain at least one measure that
|
---|
| 978 | belongs to the measure set.
|
---|
| 979 | (count(.//cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 0)</xsl:message>
|
---|
| 980 | </xsl:otherwise>
|
---|
| 981 | </xsl:choose>
|
---|
| 982 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 983 | </xsl:template>
|
---|
| 984 |
|
---|
| 985 | <!--RULE -->
|
---|
| 986 | <xsl:template match="*[cda:code[@code="55187-9" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 987 | priority="1001"
|
---|
| 988 | mode="M6">
|
---|
| 989 |
|
---|
| 990 | <!--ASSERT -->
|
---|
| 991 | <xsl:choose>
|
---|
| 992 | <xsl:when test="contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"reporting parameters")"/>
|
---|
| 993 | <xsl:otherwise>
|
---|
| 994 | <xsl:message>
|
---|
| 995 | Error: CONF-QRDA-I-49: The Reporting Parameters section SHALL be valued with
|
---|
| 996 | section/title with a case-insensitive, text string containing "Reporting
|
---|
| 997 | Parameters".
|
---|
| 998 | (contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"reporting parameters"))</xsl:message>
|
---|
| 999 | </xsl:otherwise>
|
---|
| 1000 | </xsl:choose>
|
---|
| 1001 |
|
---|
| 1002 | <!--ASSERT -->
|
---|
| 1003 | <xsl:choose>
|
---|
| 1004 | <xsl:when test="cda:entry/cda:act[@classCode="ACT" and @moodCode="EVN"]/cda:code[@code="252116004" and @codeSystem="2.16.840.1.113883.6.96"]"/>
|
---|
| 1005 | <xsl:otherwise>
|
---|
| 1006 | <xsl:message>
|
---|
| 1007 | Error: CONF-QRDA-I-50: The Reporting Parameters section SHALL contain exactly one
|
---|
| 1008 | Observation Parameters Act, represented as an act.
|
---|
| 1009 | CONF-QRDA-I-51: The value for act/@classCode in an Observation Parameters Act
|
---|
| 1010 | SHALL be ACT 2.16.840.1.113883.5.6 ActClass STATIC.
|
---|
| 1011 | CONF-QRDA-I-52: The value for act/@moodCode in an Observation Parameters Act
|
---|
| 1012 | SHALL be EVN 2.16.840.1.113883.5.1001 ActMood STATIC.
|
---|
| 1013 | CONF-QRDA-I-53: The value for act/code SHALL be 252116004 Observation
|
---|
| 1014 | Parameters 2.16.840.1.113883.6.96 SNOMED-CT STATIC.
|
---|
| 1015 | (cda:entry/cda:act[@classCode="ACT" and @moodCode="EVN"]/cda:code[@code="252116004" and @codeSystem="2.16.840.1.113883.6.96"])</xsl:message>
|
---|
| 1016 | </xsl:otherwise>
|
---|
| 1017 | </xsl:choose>
|
---|
| 1018 |
|
---|
| 1019 | <!--ASSERT -->
|
---|
| 1020 | <xsl:choose>
|
---|
| 1021 | <xsl:when test="cda:entry/cda:act[@classCode="ACT" and @moodCode="EVN"][cda:code[@code="252116004" and @codeSystem="2.16.840.1.113883.6.96"]]/cda:effectiveTime[cda:low and cda:high]"/>
|
---|
| 1022 | <xsl:otherwise>
|
---|
| 1023 | <xsl:message>
|
---|
| 1024 | Error: CONF-QRDA-I-54: The reporting time period SHALL be represented with an
|
---|
| 1025 | effectiveTime/low element combined with a high element representing
|
---|
| 1026 | respectively the first and last days of the period reported.
|
---|
| 1027 | (cda:entry/cda:act[@classCode="ACT" and @moodCode="EVN"][cda:code[@code="252116004" and @codeSystem="2.16.840.1.113883.6.96"]]/cda:effectiveTime[cda:low and cda:high])</xsl:message>
|
---|
| 1028 | </xsl:otherwise>
|
---|
| 1029 | </xsl:choose>
|
---|
| 1030 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 1031 | </xsl:template>
|
---|
| 1032 |
|
---|
| 1033 | <!--RULE -->
|
---|
| 1034 | <xsl:template match="*[cda:code[@code="55188-7" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 1035 | priority="1000"
|
---|
| 1036 | mode="M6">
|
---|
| 1037 |
|
---|
| 1038 | <!--ASSERT -->
|
---|
| 1039 | <xsl:choose>
|
---|
| 1040 | <xsl:when test="contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"patient data")"/>
|
---|
| 1041 | <xsl:otherwise>
|
---|
| 1042 | <xsl:message>
|
---|
| 1043 | Error: CONF-QRDA-I-57: The Patient Data section SHALL be valued with section/title with a
|
---|
| 1044 | case-insensitive, text string containing "Patient Data".
|
---|
| 1045 | (contains(translate(cda:title,"QWERTYUIOPASDFGHJKLZXCVBNM","qwertyuiopasdfghjklzxcvbnm"),"patient data"))</xsl:message>
|
---|
| 1046 | </xsl:otherwise>
|
---|
| 1047 | </xsl:choose>
|
---|
| 1048 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 1049 | </xsl:template>
|
---|
| 1050 | <xsl:template match="text()" priority="-1" mode="M6"/>
|
---|
| 1051 | <xsl:template match="@*|node()" priority="-2" mode="M6">
|
---|
| 1052 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M6"/>
|
---|
| 1053 | </xsl:template>
|
---|
| 1054 |
|
---|
| 1055 | <!--PATTERN p-2.16.840.1.113883.10.20.12-warningsHL7 QRDA Category I Header (Section 2) - warning validation phase-->
|
---|
| 1056 |
|
---|
| 1057 |
|
---|
| 1058 | <!--RULE -->
|
---|
| 1059 | <xsl:template match="*[cda:templateId/@root="2.16.840.1.113883.10.20.12"]" priority="1000"
|
---|
| 1060 | mode="M7">
|
---|
| 1061 |
|
---|
| 1062 | <!--ASSERT -->
|
---|
| 1063 | <xsl:choose>
|
---|
| 1064 | <xsl:when test="count(cda:legalAuthenticator) = 1"/>
|
---|
| 1065 | <xsl:otherwise>
|
---|
| 1066 | <xsl:message>
|
---|
| 1067 | Warning: CONF-QRDA-I-14: A QRDA Category I report SHOULD contain exactly one
|
---|
| 1068 | legalAuthenticator element.
|
---|
| 1069 | (count(cda:legalAuthenticator) = 1)</xsl:message>
|
---|
| 1070 | </xsl:otherwise>
|
---|
| 1071 | </xsl:choose>
|
---|
| 1072 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M7"/>
|
---|
| 1073 | </xsl:template>
|
---|
| 1074 | <xsl:template match="text()" priority="-1" mode="M7"/>
|
---|
| 1075 | <xsl:template match="@*|node()" priority="-2" mode="M7">
|
---|
| 1076 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M7"/>
|
---|
| 1077 | </xsl:template>
|
---|
| 1078 |
|
---|
| 1079 | <!--PATTERN p-2.16.840.1.113883.10.20.12-notesHL7 QRDA Category I Header (Section 2) - note validation phase-->
|
---|
| 1080 |
|
---|
| 1081 |
|
---|
| 1082 | <!--RULE -->
|
---|
| 1083 | <xsl:template match="*[cda:templateId/@root="2.16.840.1.113883.10.20.12"]" priority="1003"
|
---|
| 1084 | mode="M8">
|
---|
| 1085 |
|
---|
| 1086 | <!--ASSERT -->
|
---|
| 1087 | <xsl:choose>
|
---|
| 1088 | <xsl:when test="count(cda:component/cda:structuredBody/cda:component/cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 1"/>
|
---|
| 1089 | <xsl:otherwise>
|
---|
| 1090 | <xsl:message>
|
---|
| 1091 | Note: CONF-QRDA-I-21: A QRDA Category I report ... MAY contain
|
---|
| 1092 | more than one non-nested top-level Measure section each containing
|
---|
| 1093 | information about a single measure.
|
---|
| 1094 | (count(cda:component/cda:structuredBody/cda:component/cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]) > 1)</xsl:message>
|
---|
| 1095 | </xsl:otherwise>
|
---|
| 1096 | </xsl:choose>
|
---|
| 1097 |
|
---|
| 1098 | <!--ASSERT -->
|
---|
| 1099 | <xsl:choose>
|
---|
| 1100 | <xsl:when test=".//cda:section/cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]"/>
|
---|
| 1101 | <xsl:otherwise>
|
---|
| 1102 | <xsl:message>
|
---|
| 1103 | Note: CONF-QRDA-I-23: A QRDA Category I report MAY contain one or more Measure Set
|
---|
| 1104 | sections.
|
---|
| 1105 | (.//cda:section/cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"])</xsl:message>
|
---|
| 1106 | </xsl:otherwise>
|
---|
| 1107 | </xsl:choose>
|
---|
| 1108 |
|
---|
| 1109 | <!--ASSERT -->
|
---|
| 1110 | <xsl:choose>
|
---|
| 1111 | <xsl:when test="cda:component/cda:structuredBody/cda:component/cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"] and .//cda:section/cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]"/>
|
---|
| 1112 | <xsl:otherwise>
|
---|
| 1113 | <xsl:message>
|
---|
| 1114 | Note: CONF-QRDA-I-25: A QRDA Category I report MAY contain both Measure Set sections and
|
---|
| 1115 | individual top-level Measure sections.
|
---|
| 1116 | (cda:component/cda:structuredBody/cda:component/cda:section/cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"] and .//cda:section/cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"])</xsl:message>
|
---|
| 1117 | </xsl:otherwise>
|
---|
| 1118 | </xsl:choose>
|
---|
| 1119 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M8"/>
|
---|
| 1120 | </xsl:template>
|
---|
| 1121 |
|
---|
| 1122 | <!--RULE -->
|
---|
| 1123 | <xsl:template match="*[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 1124 | priority="1002"
|
---|
| 1125 | mode="M8">
|
---|
| 1126 |
|
---|
| 1127 | <!--ASSERT -->
|
---|
| 1128 | <xsl:choose>
|
---|
| 1129 | <xsl:when test="cda:text"/>
|
---|
| 1130 | <xsl:otherwise>
|
---|
| 1131 | <xsl:message>
|
---|
| 1132 | Note: CONF-QRDA-I-41: The Measure section MAY contain a section/text element for the
|
---|
| 1133 | description of the measure(s).
|
---|
| 1134 | (cda:text)</xsl:message>
|
---|
| 1135 | </xsl:otherwise>
|
---|
| 1136 | </xsl:choose>
|
---|
| 1137 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M8"/>
|
---|
| 1138 | </xsl:template>
|
---|
| 1139 |
|
---|
| 1140 | <!--RULE -->
|
---|
| 1141 | <xsl:template match="*[cda:code[@code="55186-1" and @codeSystem="2.16.840.1.113883.6.1"]]/cda:entry/cda:act[@classCode="ACT" and @moodCode="DEF"]"
|
---|
| 1142 | priority="1001"
|
---|
| 1143 | mode="M8">
|
---|
| 1144 |
|
---|
| 1145 | <!--ASSERT -->
|
---|
| 1146 | <xsl:choose>
|
---|
| 1147 | <xsl:when test="cda:text"/>
|
---|
| 1148 | <xsl:otherwise>
|
---|
| 1149 | <xsl:message>
|
---|
| 1150 | Note: CONF-QRDA-I-46: Each measure act MAY contain an act/text element containing a
|
---|
| 1151 | description of the measure.
|
---|
| 1152 | (cda:text)</xsl:message>
|
---|
| 1153 | </xsl:otherwise>
|
---|
| 1154 | </xsl:choose>
|
---|
| 1155 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M8"/>
|
---|
| 1156 | </xsl:template>
|
---|
| 1157 |
|
---|
| 1158 | <!--RULE -->
|
---|
| 1159 | <xsl:template match="*[cda:code[@code="55185-3" and @codeSystem="2.16.840.1.113883.6.1"]]"
|
---|
| 1160 | priority="1000"
|
---|
| 1161 | mode="M8">
|
---|
| 1162 |
|
---|
| 1163 | <!--ASSERT -->
|
---|
| 1164 | <xsl:choose>
|
---|
| 1165 | <xsl:when test="cda:text"/>
|
---|
| 1166 | <xsl:otherwise>
|
---|
| 1167 | <xsl:message>
|
---|
| 1168 | Note: CONF-QRDA-I-30: The Measure Set section MAY contain a section/text element for
|
---|
| 1169 | the description of the measure set or MAY contain a formal representation of
|
---|
| 1170 | a description of the measure set.
|
---|
| 1171 | (cda:text)</xsl:message>
|
---|
| 1172 | </xsl:otherwise>
|
---|
| 1173 | </xsl:choose>
|
---|
| 1174 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M8"/>
|
---|
| 1175 | </xsl:template>
|
---|
| 1176 | <xsl:template match="text()" priority="-1" mode="M8"/>
|
---|
| 1177 | <xsl:template match="@*|node()" priority="-2" mode="M8">
|
---|
| 1178 | <xsl:apply-templates select="*|comment()|processing-instruction()" mode="M8"/>
|
---|
| 1179 | </xsl:template>
|
---|
| 1180 | </xsl:stylesheet>
|
---|