Changeset 766
- Timestamp:
- May 19, 2010, 9:54:08 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr2ccd-xslt/trunk/ccr_ccd.xsl
r757 r766 1 <?xml version="1.0" encoding="utf-8"?>1 <?xml version="1.0" encoding="utf-8"?> 2 2 <!-- 3 3 Conversion of CCR to Level 3 CCD … … 9 9 Contributors: 10 10 Richard Braman, EHR Doctors, Inc rbraman@ehrdoctors.com 11 George Gilly (WorldVistA glilly@glilly.net)11 George Lilly (WorldVistA glilly@glilly.net) 12 12 xxxx - Oroville Hospital 13 13 … … 31 31 32 32 --> 33 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="urn:astm-org:CCR" xmlns:date="http://exslt.org/dates-and-times" exclude-result-prefixes="a date" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 33 <xsl:stylesheet version="1.0" xmlns="urn:hl7-org:v3" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="urn:astm-org:CCR" xmlns:date="http://exslt.org/dates-and-times" 34 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="a date"> 35 <xsl:import href="./templates/cdavocablookup.xsl"/> 36 <xsl:import href="./templates/hl7oidlookup.xsl"/> 34 37 <xsl:import href="./templates/code.xsl"/> 35 <xsl:import href="./templates/ccdcodedvalue.xsl"/>36 <xsl:import href="./templates/ccdentity.xsl"/>37 <xsl:import href="./templates/ccdid.xsl"/>38 <xsl:import href="./templates/ccddatetime.xsl"/>39 <xsl:import href="./templates/ccdstatus.xsl"/>40 <xsl:import href="./templates/ccdmedicationfrequency.xsl"/>41 38 <xsl:import href="./templates/actor.xsl"/> 39 <xsl:import href="./templates/datetime.xsl"/> 42 40 <xsl:import href="./templates/problemDescription.xsl"/> 43 <xsl:import href="./templates/HL7OIDLookup.xsl"/>44 41 45 42 <xsl:output method="xml" encoding="utf-8" version="1.0" indent="yes"/> 46 43 <xsl:template match="/"> 47 <xsl:processing-instruction name="xml-stylesheet">type="text/xsl" href="CCD.xsl"</xsl:processing-instruction> 48 <ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc" xmlns:sdtc="urn:hl7-org:sdtc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 http://xreg2.nist.gov:8080/hitspValidation/schema/cdar2c32/infrastructure/cda/C32_CDA.xsd" classCode="DOCCLIN" moodCode="EVN"> 44 <ClinicalDocument xmlns="urn:hl7-org:v3" xsi:schemaLocation="urn:hl7-org:v3 http://xreg2.nist.gov:8080/hitspValidation/schema/cdar2c32/infrastructure/cda/C32_CDA.xsd" classCode="DOCCLIN" moodCode="EVN"> 49 45 <realmCode code="US"/> 50 46 <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/> … … 104 100 </author> 105 101 106 <custodian> 107 <assignedCustodian> 108 <representedCustodianOrganization> 109 <xsl:call-template name="ccdEntity"> 110 <xsl:with-param name="ccrActorObjectID" select="/a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$fromID]/a:InternalCCRLink[a:LinkRelationship='Organization']/a:LinkID"></xsl:with-param> 111 </xsl:call-template> 112 </representedCustodianOrganization> 113 </assignedCustodian> 114 </custodian> 102 <xsl:if test="/a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$fromID]/a:InternalCCRLink[a:LinkRelationship='Organization']"> 103 <custodian> 104 <assignedCustodian> 105 <representedCustodianOrganization> 106 <xsl:call-template name="ccdEntity"> 107 <xsl:with-param name="ccrActorObjectID" select="/a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$fromID]/a:InternalCCRLink[a:LinkRelationship='Organization']/a:LinkID"></xsl:with-param> 108 </xsl:call-template> 109 </representedCustodianOrganization> 110 </assignedCustodian> 111 </custodian> 112 </xsl:if> 115 113 116 114 <documentationOf> … … 533 531 </table> 534 532 </text> 533 534 <xsl:for-each select="/a:ContinuityOfCareRecord/a:Body/a:Procedures/a:Procedure"> 535 <entry typeCode="DRIV"> 536 <procedure classCode="PROC" moodCode="EVN"> 537 <templateId root="2.16.840.1.113883.3.88.11.83.17" assigningAuthorityName="HITSP C83"/> 538 <templateId root="2.16.840.1.113883.10.20.1.29" assigningAuthorityName="CCD"/> 539 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.19" assigningAuthorityName="IHE PCC"/> 540 541 <!-- <id> --> 542 <xsl:call-template name="ccdID"> 543 <xsl:with-param name="ccrObjectID"> 544 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 545 </xsl:with-param> 546 </xsl:call-template> 547 548 <!-- <code> --> 549 <xsl:call-template name="ccdCodedValue"> 550 <xsl:with-param name="ccrCodedDescription" select="a:Description"/> 551 <xsl:with-param name="nodeName" select="'code'"/> 552 </xsl:call-template> 553 554 <text> 555 <reference> 556 <xsl:attribute name="value"> 557 <xsl:text>#</xsl:text> 558 <xsl:value-of select="a:CCRDataObjectID"/> 559 </xsl:attribute> 560 </reference> 561 </text> 562 563 <xsl:call-template name="ccdStatusProcedure"> 564 <xsl:with-param name="status" select="a:Status"></xsl:with-param> 565 </xsl:call-template> 566 567 <xsl:call-template name="ccdDateTime"> 568 <xsl:with-param name="dt" select="a:DateTime"/> 569 </xsl:call-template> 570 571 <xsl:if test="a:Method"> 572 <xsl:call-template name="ccdCodedValue"> 573 <xsl:with-param name="ccrCodedDescription" select="a:Method"/> 574 <xsl:with-param name="nodeName" select="'approachSiteCode'"/> 575 </xsl:call-template> 576 </xsl:if> 577 578 <xsl:if test="a:Site"> 579 <xsl:call-template name="ccdCodedValue"> 580 <xsl:with-param name="ccrCodedDescription" select="a:Site"/> 581 <xsl:with-param name="nodeName" select="'targetSiteCode'"/> 582 </xsl:call-template> 583 </xsl:if> 584 585 <xsl:if test="a:Practitioners/a:Practitioner"> 586 <performer typeCode="PRF"> 587 <assignedEntity> 588 <xsl:call-template name="ccdEntity"> 589 <xsl:with-param name="ccrActorObjectID" select="a:Practitioners/a:Practitioner[1]/a:ActorID"/> 590 </xsl:call-template> 591 </assignedEntity> 592 </performer> 593 </xsl:if> 594 </procedure> 595 </entry> 596 </xsl:for-each> 535 597 </section> 536 598 </component> 537 <xsl:for-each select="/a:ContinuityOfCareRecord/a:Body/a:Procedures/a:Procedure">538 <entry typeCode="DRIV">539 <procedure classCode="PROC" moodCode="EVN">540 <templateId root="2.16.840.1.113883.3.88.11.83.17" assigningAuthorityName="HITSP C83"/>541 <templateId root="2.16.840.1.113883.10.20.1.29" assigningAuthorityName="CCD"/>542 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.19" assigningAuthorityName="IHE PCC"/>543 <id>544 <xsl:attribute name="root">545 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of>546 </xsl:attribute>547 </id>548 <code>549 <xsl:attribute name="code">550 <xsl:value-of select="a:Description/a:Code/a:Value"/>551 </xsl:attribute>552 <xsl:attribute name="codeSystemName">553 <xsl:value-of select="a:Description/a:Code/a:CodingSystem"/>554 </xsl:attribute>555 <xsl:attribute name="codeSystem">556 <xsl:call-template name="HL7OIDLookup">557 <xsl:with-param name="name" select="a:Description/a:Code/a:CodingSystem"/>558 </xsl:call-template>559 </xsl:attribute>560 <xsl:attribute name="displayName">561 <xsl:value-of select="a:Description/a:Text"/>562 </xsl:attribute>563 </code>564 <text>565 <reference>566 <xsl:attribute name="value">567 <xsl:value-of select="a:CCRDataObjectID"/>568 </xsl:attribute>569 </reference>570 </text>571 <statusCode>572 <xsl:attribute name="value">573 <xsl:value-of select="a:Status/a:Text"/>574 </xsl:attribute>575 </statusCode>576 <xsl:call-template name="ccdDateTime">577 <xsl:with-param name="dt" select="a:DateTime"/>578 </xsl:call-template>579 <xsl:if test="a:Method">580 <approachSiteCode>581 <xsl:attribute name="code">582 <xsl:value-of select="a:Method/a:Code/a:Value"/>583 </xsl:attribute>584 <xsl:attribute name="codeSystemName">585 <xsl:value-of select="a:Method/a:Code/a:CodingSystem"/>586 </xsl:attribute>587 <xsl:attribute name="codeSystem">588 <xsl:call-template name="HL7OIDLookup">589 <xsl:with-param name="name" select="a:Method/a:Code/a:CodingSystem"/>590 </xsl:call-template>591 </xsl:attribute>592 <xsl:attribute name="displayName">593 <xsl:value-of select="a:Method/a:Text"/>594 </xsl:attribute>595 </approachSiteCode>596 </xsl:if>597 <xsl:if test="a:Site">598 <targetSiteCode>599 <xsl:attribute name="code">600 <xsl:value-of select="a:Site/a:Code/a:Value"/>601 </xsl:attribute>602 <xsl:attribute name="codeSystemName">603 <xsl:value-of select="a:Site/a:Code/a:CodingSystem"/>604 </xsl:attribute>605 <xsl:attribute name="codeSystem">606 <xsl:call-template name="HL7OIDLookup">607 <xsl:with-param name="name" select="a:Site/a:Code/a:CodingSystem"/>608 </xsl:call-template>609 </xsl:attribute>610 <xsl:attribute name="displayName">611 <xsl:value-of select="a:Site/a:Text"/>612 </xsl:attribute>613 </targetSiteCode>614 </xsl:if>615 <xsl:if test="a:Practitioners/a:Practitioner">616 <xsl:variable name="PractitionerActorID" select="a:Practitioners/a:Practitioner[0]/a:ActorID"/>617 <performer typeCode="PRF">618 <assignedEntity>619 <xsl:variable name="CCRActor" select="/a:ContinuityOfCareRecord/a:Actors[a:ActorObjectID=$PractitionerActorID]/a:Actor"/>620 <xsl:if test="$CCRActor/a:Address">621 <addr>622 <streetAddressLine>623 <xsl:value-of select="$CCRActor/a:Address[0]/a:Line1"/>624 </streetAddressLine>625 <city>626 <xsl:value-of select="$CCRActor/a:Address[0]/a:City"/>627 </city>628 <state>629 <xsl:value-of select="$CCRActor/a:Address[0]/a:State"/>630 </state>631 <postalcode>632 <xsl:value-of select="$CCRActor/a:Address[0]/a:PostalCode"/>633 </postalcode>634 </addr>635 </xsl:if>636 <xsl:if test="$CCRActor/a:Telephone">637 <telecom>638 <xsl:attribute name="extension">639 <xsl:value-of select="$CCRActor/a:Telephone[0]/a:Value"/>640 </xsl:attribute>641 </telecom>642 </xsl:if>643 <assignedPerson>644 <name>645 <xsl:call-template name="actorName">646 <xsl:with-param name="objID" select="$PractitionerActorID"/>647 </xsl:call-template>648 </name>649 </assignedPerson>650 </assignedEntity>651 </performer>652 </xsl:if>653 </procedure>654 </entry>655 </xsl:for-each>656 599 </xsl:if> 657 600 <xsl:if test="a:ContinuityOfCareRecord/a:Body/a:Medications"> … … 780 723 <templateId root="2.16.840.1.113883.10.20.1.24" assigningAuthorityName="CCD"/> 781 724 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7.1" assigningAuthorityName="IHE PCC"/> 725 782 726 <!--Medication activity template --> 783 <id> 784 <xsl:attribute name="root"> 727 728 <!-- <id> --> 729 <xsl:call-template name="ccdID"> 730 <xsl:with-param name="ccrObjectID"> 785 731 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 786 </xsl:attribute> 787 </id> 788 <statusCode> 789 <xsl:attribute name="value"> 790 <xsl:value-of select="a:Status/a:Text"/> 791 </xsl:attribute> 792 </statusCode> 732 </xsl:with-param> 733 </xsl:call-template> 734 735 <statusCode code='completed'/> 736 793 737 <xsl:call-template name="ccdDateTime"> 794 738 <xsl:with-param name="dt" select="a:DateTime"/> 795 739 <xsl:with-param name="type" select="'IVL_TS'"/> 796 740 </xsl:call-template> 741 797 742 <xsl:call-template name="ccdMedicationFrequency"> 798 743 <xsl:with-param name="frequency" select="a:Directions/a:Direction/a:Frequency"/> 799 744 </xsl:call-template> 800 <xsl:if test="a:Directions/a:Direction/a:Route"> 801 <routeCode> 802 <xsl:attribute name="code"> 803 <xsl:value-of select="a:Directions/a:Direction/a:Route/a:Code/a:Value"></xsl:value-of> 804 </xsl:attribute> 805 <xsl:attribute name="codeSystem"> 806 <xsl:call-template name="HL7OIDLookup"> 807 <xsl:with-param name="name" select="a:Directions/a:Direction/a:Route/a:Code/a:CodingSystem"/> 808 </xsl:call-template> 809 </xsl:attribute> 810 <xsl:attribute name="displayName"> 811 <xsl:value-of select="a:Directions/a:Direction/a:Route/a:Text"></xsl:value-of> 812 </xsl:attribute> 813 </routeCode> 814 </xsl:if> 745 746 <xsl:call-template name="ccdCodedValue"> 747 <xsl:with-param name="ccrCodedDescription" select="a:Directions/a:Direction/a:Route"/> 748 <xsl:with-param name="nodeName" select="'routeCode'"/> 749 <xsl:with-param name="domain" select="'RouteOfAdministration'"/> 750 </xsl:call-template> 751 815 752 <xsl:if test="a:Directions/a:Direction/a:Dose"> 816 753 <doseQuantity> … … 838 775 <templateId root="2.16.840.1.113883.10.20.1.53" assigningAuthorityName="CCD"/> 839 776 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7.2" assigningAuthorityName="IHE PCC"/> 777 840 778 <!-- Product template --> 779 841 780 <manufacturedMaterial> 842 <code> 843 <xsl:attribute name="code"> 844 <xsl:value-of select="a:Product/a:ProductName/a:Code/a:Value"></xsl:value-of> 845 </xsl:attribute> 846 <xsl:attribute name="codeSystem"> 847 <xsl:call-template name="HL7OIDLookup"> 848 <xsl:with-param name="name" select="a:Product/a:ProductName/a:Code/a:CodingSystem"/> 849 </xsl:call-template> 850 </xsl:attribute> 851 <xsl:attribute name="displayName"> 852 <xsl:value-of select="a:Product/a:ProductName/a:Text"></xsl:value-of> 853 </xsl:attribute> 854 </code> 781 <xsl:call-template name="ccdCodedValue"> 782 <xsl:with-param name="ccrCodedDescription" select="a:Product/a:ProductName"/> 783 <xsl:with-param name="nodeName" select="'code'"/> 784 <xsl:with-param name="domain" select="'RouteOfAdministration'"/> 785 </xsl:call-template> 855 786 <name> 856 787 <xsl:value-of select="a:Product/a:BrandName/a:Text"></xsl:value-of> … … 1171 1102 <th>Source</th> 1172 1103 </tr> 1173 <xsl:for-each select="/a:ContinuityOfCareRecord/a:Body/a:Results/a:Result [a:Test/a:TestResult/a:Value!='']">1104 <xsl:for-each select="/a:ContinuityOfCareRecord/a:Body/a:Results/a:Result"> 1174 1105 <tr> 1106 <xsl:attribute name="id"> 1107 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 1108 </xsl:attribute> 1175 1109 <td> 1176 1110 <xsl:value-of select="a:Description/a:Text"/> … … 1185 1119 <td> 1186 1120 <xsl:for-each select="a:Test[a:TestResult/a:Value!='']"> 1187 <xsl:value-of select="a:Description/a:Text"/> 1188 <xsl:text xml:space="preserve"> </xsl:text> 1189 <xsl:value-of select="a:TestResult/a:Value"/> 1190 <xsl:text xml:space="preserve"> </xsl:text> 1191 <xsl:value-of select="a:TestResult/a:Units/a:Unit"/> 1192 <xsl:text xml:space="preserve"> </xsl:text> 1193 <xsl:value-of select="a:Flag/a:Text"/> 1194 <br/> 1121 <div> 1122 <xsl:attribute name="id"> 1123 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 1124 </xsl:attribute> 1125 1126 <xsl:value-of select="a:Description/a:Text"/> 1127 <xsl:text xml:space="preserve"> </xsl:text> 1128 <xsl:value-of select="a:TestResult/a:Value"/> 1129 <xsl:text xml:space="preserve"> </xsl:text> 1130 <xsl:value-of select="a:TestResult/a:Units/a:Unit"/> 1131 <xsl:text xml:space="preserve"> </xsl:text> 1132 <xsl:value-of select="a:Flag/a:Text"/> 1133 <br/> 1134 </div> 1195 1135 </xsl:for-each> 1196 1136 <xsl:for-each select="a:Test[a:TestResult/a:Description/a:Text!='']"> 1197 <xsl:value-of select="a:Description/a:Text"/> 1198 <xsl:text xml:space="preserve"> </xsl:text> 1199 <xsl:value-of select="a:TestResult/a:Description/a:Text" disable-output-escaping="yes"/> 1200 <xsl:text xml:space="preserve"> </xsl:text> 1201 <xsl:value-of select="a:Flag/a:Text"/> 1202 <br/> 1137 <div> 1138 <xsl:attribute name="id"> 1139 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 1140 </xsl:attribute> 1141 1142 <xsl:value-of select="a:Description/a:Text"/> 1143 <xsl:text xml:space="preserve"> </xsl:text> 1144 <xsl:value-of select="a:TestResult/a:Description/a:Text" disable-output-escaping="yes"/> 1145 <xsl:text xml:space="preserve"> </xsl:text> 1146 <xsl:value-of select="a:Flag/a:Text"/> 1147 <br/> 1148 </div> 1203 1149 </xsl:for-each> 1204 1150 </td> … … 1213 1159 </table> 1214 1160 </text> 1161 <xsl:for-each select="/a:ContinuityOfCareRecord/a:Body/a:Results/a:Result"> 1162 <entry typeCode="DRIV"> 1163 <xsl:variable name="testDate" select="a:DateTime"/> 1164 1165 <xsl:choose> 1166 <xsl:when test="count(a:Test)>1"> 1167 <organizer classCode="BATTERY" moodCode="EVN"> 1168 <templateId root="2.16.840.1.113883.10.20.1.32"/> 1169 <!--Result organizer template --> 1170 1171 <!-- <id> --> 1172 <xsl:call-template name="ccdID"> 1173 <xsl:with-param name="ccrObjectID"> 1174 <xsl:value-of select="a:CCRDataObjectID"></xsl:value-of> 1175 </xsl:with-param> 1176 </xsl:call-template> 1177 1178 <!-- <code> --> 1179 <xsl:call-template name="ccdCodedValue"> 1180 <xsl:with-param name="ccrCodedDescription" select="a:Description"/> 1181 <xsl:with-param name="nodeName" select="'code'"/> 1182 </xsl:call-template> 1183 1184 <statusCode code="completed"/> 1185 1186 <!-- <effectiveTime> --> 1187 <xsl:call-template name="ccdDateTime"> 1188 <xsl:with-param name="dt" select="$testDate"/> 1189 </xsl:call-template> 1190 1191 <performer> 1192 <assignedEntity> 1193 <xsl:call-template name="ccdEntity"> 1194 <xsl:with-param name="ccrActorObjectID"> 1195 <xsl:value-of select="a:Source/a:Actor/a:ActorID"></xsl:value-of> 1196 </xsl:with-param> 1197 </xsl:call-template> 1198 </assignedEntity> 1199 </performer> 1200 1201 <xsl:for-each select="a:Test"> 1202 <xsl:call-template name="labObservation"> 1203 <xsl:with-param name="ccrTestNode" select="."/> 1204 <xsl:with-param name="testDate" select="$testDate"/> 1205 </xsl:call-template> 1206 </xsl:for-each> 1207 1208 </organizer> 1209 1210 </xsl:when> 1211 <xsl:otherwise> 1212 <xsl:call-template name="labObservation"> 1213 <xsl:with-param name="ccrTestNode" select="a:Test[1]"/> 1214 <xsl:with-param name="testDate" select="$testDate"/> 1215 </xsl:call-template> 1216 1217 </xsl:otherwise> 1218 </xsl:choose> 1219 </entry> 1220 </xsl:for-each> 1215 1221 </section> 1216 1222 </component> … … 1736 1742 </ClinicalDocument> 1737 1743 </xsl:template> 1744 1745 <xsl:template name="ccdEntity"> 1746 <xsl:param name="ccrActorObjectID"/> 1747 <xsl:param name="personNodeName">assignedPerson</xsl:param> 1748 1749 <xsl:variable name="CCRActor" select="//a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$ccrActorObjectID]"/> 1750 1751 <id> 1752 <xsl:choose> 1753 <xsl:when test="$CCRActor/a:IDs"> 1754 <xsl:attribute name="extension"> 1755 <xsl:value-of select="$CCRActor/a:IDs[1]/a:ID"/> 1756 </xsl:attribute> 1757 <xsl:attribute name="root"> 1758 <xsl:value-of select="$CCRActor/a:IDs[1]/a:Type/a:Text"/> 1759 </xsl:attribute> 1760 </xsl:when> 1761 <xsl:otherwise> 1762 <xsl:attribute name="extension"> 1763 <xsl:value-of select="$CCRActor/a:ActorObjectID"/> 1764 </xsl:attribute> 1765 <xsl:attribute name="root"> 1766 <xsl:text>CCR Actor ID</xsl:text> 1767 </xsl:attribute> 1768 </xsl:otherwise> 1769 </xsl:choose> 1770 </id> 1771 1772 <xsl:if test="$CCRActor/a:Organization"> 1773 <xsl:value-of select="$CCRActor/a:Organization/a:Name"></xsl:value-of> 1774 </xsl:if> 1775 1776 <addr> 1777 <xsl:choose> 1778 <xsl:when test="$CCRActor/a:Address"> 1779 <xsl:attribute name="use"> 1780 <xsl:call-template name="CDAVocabularyLookup"> 1781 <xsl:with-param name="domain" select="'telecommunicationsAddressUse'"/> 1782 <xsl:with-param name="ccrDescription" select="$CCRActor/a:Address/a:Type/a:Text"/> 1783 </xsl:call-template> 1784 </xsl:attribute> 1785 <streetAddressLine> 1786 <xsl:value-of select="$CCRActor/a:Address[1]/a:Line1"/> 1787 </streetAddressLine> 1788 <city> 1789 <xsl:value-of select="$CCRActor/a:Address[1]/a:City"/> 1790 </city> 1791 <state> 1792 <xsl:value-of select="$CCRActor/a:Address[1]/a:State"/> 1793 </state> 1794 <postalcode> 1795 <xsl:value-of select="$CCRActor/a:Address[1]/a:PostalCode"/> 1796 </postalcode> 1797 </xsl:when> 1798 <xsl:otherwise> 1799 <streetAddressLine/> 1800 </xsl:otherwise> 1801 </xsl:choose> 1802 </addr> 1803 1804 <telecom> 1805 <xsl:if test="$CCRActor/a:Telephone"> 1806 <xsl:attribute name="use"> 1807 <xsl:call-template name="CDAVocabularyLookup"> 1808 <xsl:with-param name="domain" select="'telecommunicationsAddressUse'"/> 1809 <xsl:with-param name="ccrDescription" select="$CCRActor/a:Telephone/a:Type/a:Text"/> 1810 </xsl:call-template> 1811 </xsl:attribute> 1812 <xsl:attribute name="value"> 1813 <xsl:text>tel:+1-</xsl:text> 1814 <xsl:value-of select="$CCRActor/a:Telephone[1]/a:Value"/> 1815 </xsl:attribute> 1816 </xsl:if> 1817 1818 </telecom> 1819 1820 <xsl:if test="$CCRActor/a:Email"> 1821 <telecom> 1822 <xsl:choose> 1823 <xsl:when test="$CCRActor/a:Telephone"> 1824 <xsl:attribute name="use"> 1825 <xsl:call-template name="CDAVocabularyLookup"> 1826 <xsl:with-param name="domain" select="'telecommunicationsAddressUse'"/> 1827 <xsl:with-param name="ccrDescription" select="$CCRActor/a:Telephone/a:Type/a:Text"/> 1828 </xsl:call-template> 1829 </xsl:attribute> 1830 <xsl:attribute name="value"> 1831 <xsl:text>mailto:</xsl:text> 1832 <xsl:value-of select="$CCRActor/a:Email[1]/a:Value"/> 1833 </xsl:attribute> 1834 </xsl:when> 1835 <xsl:otherwise> 1836 <xsl:attribute name="value">Unknown</xsl:attribute> 1837 </xsl:otherwise> 1838 </xsl:choose> 1839 </telecom> 1840 </xsl:if> 1841 1842 <xsl:if test="a:Person"> 1843 <xsl:element name="{$personNodeName}"> 1844 <name> 1845 <xsl:if test="a:Person/a:Name/a:CurrentName/a:Title"> 1846 <prefix> 1847 <xsl:value-of select="a:Person/a:Name/a:CurrentName/a:Title"></xsl:value-of> 1848 </prefix> 1849 </xsl:if> 1850 <xsl:if test="a:Person/a:Name/a:CurrentName/a:Given"> 1851 <given> 1852 <xsl:value-of select="a:Person/a:Name/a:CurrentName/a:Given"></xsl:value-of> 1853 </given> 1854 </xsl:if> 1855 <xsl:if test="a:Person/a:Name/a:CurrentName/a:Middle"> 1856 <given> 1857 <xsl:value-of select="a:Person/a:Name/a:CurrentName/a:Middle"></xsl:value-of> 1858 </given> 1859 </xsl:if> 1860 <xsl:if test="a:Person/a:Name/a:CurrentName/a:Family"> 1861 <family> 1862 <xsl:value-of select="a:Person/a:Name/a:CurrentName/a:Family"></xsl:value-of> 1863 </family> 1864 </xsl:if> 1865 <xsl:if test="a:Person/a:Name/a:CurrentName/a:Suffix"> 1866 <suffix> 1867 <xsl:value-of select="a:Person/a:Name/a:CurrentName/a:Suffix"></xsl:value-of> 1868 </suffix> 1869 </xsl:if> 1870 </name> 1871 1872 <xsl:if test="a:Person/a:Gender"> 1873 1874 <xsl:call-template name="ccdCodedValue"> 1875 <xsl:with-param name="ccrCodedDescription" select="a:Person/a:Gender"/> 1876 <xsl:with-param name="domain" select="'AdministrativeGender'"/> 1877 <xsl:with-param name="nodeName" select="'administrativeGenderCode'"/> 1878 </xsl:call-template> 1879 </xsl:if> 1880 1881 <xsl:if test="a:Person/a:DateOfBirth"> 1882 <birthTime> 1883 <xsl:attribute name="value"> 1884 <xsl:call-template name="date:format-date"> 1885 <xsl:with-param name="date-time"> 1886 <xsl:value-of select="a:Person/a:DateOfBirth/a:ExactDateTime"/> 1887 </xsl:with-param> 1888 <xsl:with-param name="pattern">yyyyMMddhhmmss</xsl:with-param> 1889 </xsl:call-template> 1890 </xsl:attribute> 1891 </birthTime> 1892 </xsl:if> 1893 </xsl:element> 1894 </xsl:if> 1895 1896 <xsl:if test="$ccrActorObjectID=/a:ContinuityOfCareRecord/a:Patient[1]/a:ActorID"> 1897 <xsl:if test="/a:ContinuityOfCareRecord/a:Body/a:SocialHistory/a:SocialHistoryElement[a:Type/a:Text='Marital Status']"> 1898 1899 <xsl:call-template name="ccdCodedValue"> 1900 <xsl:with-param name="ccrCodedDescription" select="/a:ContinuityOfCareRecord/a:Body/a:SocialHistory/a:SocialHistoryElement[a:Type/a:Text='Marital Status']/a:Description"></xsl:with-param> 1901 <xsl:with-param name="domain" select="'MaritalStatus'"/> 1902 <xsl:with-param name="nodeName" select="'maritalStatusCode'"/> 1903 </xsl:call-template> 1904 1905 </xsl:if> 1906 1907 <xsl:if test="/a:ContinuityOfCareRecord/a:Body/a:SocialHistory/a:SocialHistoryElement[a:Type/a:Text='Language']"> 1908 <languageCommunication> 1909 <templateId root="2.16.840.1.113883.3.88.11.83.2" assigningAuthorityName="HITSP/C83"/> 1910 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.2.1" assigningAuthorityName="IHE/PCC"/> 1911 1912 <xsl:call-template name="ccdCodedValue"> 1913 <xsl:with-param name="ccrCodedDescription" select="/a:ContinuityOfCareRecord/a:Body/a:SocialHistory/a:SocialHistoryElement[a:Type/a:Text='Language']/a:Description"></xsl:with-param> 1914 <xsl:with-param name="domain" select="'HumanLanguage'"/> 1915 <xsl:with-param name="nodeName" select="'languageCode'"/> 1916 </xsl:call-template> 1917 1918 </languageCommunication> 1919 </xsl:if> 1920 </xsl:if> 1921 1922 <xsl:if test="/a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$ccrActorObjectID]/a:InternalCCRLink[a:LinkRelationship='Organization']"> 1923 <representedOrganization> 1924 <xsl:call-template name="ccdEntity"> 1925 <xsl:with-param name="ccrActorObjectID" select="/a:ContinuityOfCareRecord/a:Actors/a:Actor[a:ActorObjectID=$ccrActorObjectID]/a:InternalCCRLink[a:LinkRelationship='Organization']/a:LinkID"></xsl:with-param> 1926 </xsl:call-template> 1927 </representedOrganization> 1928 </xsl:if> 1929 1930 </xsl:template> 1931 1932 <xsl:template name="ccdID"> 1933 <xsl:param name="ccrObjectID"/> 1934 <xsl:param name="suffix"></xsl:param> 1935 1936 <id> 1937 <xsl:attribute name="root"> 1938 <xsl:value-of select="$ccrObjectID"></xsl:value-of> 1939 <xsl:value-of select="$suffix"></xsl:value-of> 1940 </xsl:attribute> 1941 <xsl:attribute name="extension">CCR Object ID</xsl:attribute> 1942 </id> 1943 </xsl:template> 1944 1945 <xsl:template name="ccdCodedValue"> 1946 <xsl:param name="ccrCodedDescription"/> 1947 <xsl:param name="type"/> 1948 <xsl:param name="domain"/> 1949 <xsl:param name="nodeName">value</xsl:param> 1950 1951 <xsl:element name="{$nodeName}"> 1952 <xsl:if test="$type"> 1953 <xsl:attribute name="xsi:type"> 1954 <xsl:value-of select="$type"/> 1955 </xsl:attribute> 1956 </xsl:if> 1957 <xsl:choose> 1958 <xsl:when test="$ccrCodedDescription/a:Code"> 1959 <xsl:attribute name="displayName"> 1960 <xsl:value-of select="$ccrCodedDescription/a:Text"/> 1961 </xsl:attribute> 1962 <xsl:attribute name="code"> 1963 <xsl:value-of select="$ccrCodedDescription/a:Code/a:Value"/> 1964 </xsl:attribute> 1965 <xsl:attribute name="codeSystemName"> 1966 <xsl:value-of select="$ccrCodedDescription/a:Code/a:CodingSystem"/> 1967 </xsl:attribute> 1968 <xsl:attribute name="codeSystem"> 1969 <xsl:call-template name="HL7OIDLookup"> 1970 <xsl:with-param name="name" select="$ccrCodedDescription/a:Code/a:CodingSystem"/> 1971 </xsl:call-template> 1972 </xsl:attribute> 1973 </xsl:when> 1974 <xsl:when test="$domain"> 1975 <xsl:variable name="cdaCode"> 1976 <xsl:call-template name="CDAVocabularyLookup"> 1977 <xsl:with-param name="domain" select="$domain"/> 1978 <xsl:with-param name="ccrtext" select="$ccrCodedDescription/a:Text"/> 1979 </xsl:call-template> 1980 </xsl:variable> 1981 <xsl:attribute name="displayName"> 1982 <xsl:call-template name="CDADisplayNameLookup"> 1983 <xsl:with-param name="domain" select="$domain"/> 1984 <xsl:with-param name="cdacode" select="$cdaCode"/> 1985 </xsl:call-template> 1986 </xsl:attribute> 1987 <xsl:attribute name="code"> 1988 <xsl:value-of select="$cdaCode"></xsl:value-of> 1989 </xsl:attribute> 1990 <xsl:attribute name="codeSystemName"> 1991 <xsl:call-template name="CDAVocabularyCodeSystemNameLookup"> 1992 <xsl:with-param name="domain" select="$domain"/> 1993 </xsl:call-template> 1994 </xsl:attribute> 1995 <xsl:attribute name="codeSystemName"> 1996 <xsl:call-template name="CDAVocabularyCodeSystemLookup"> 1997 <xsl:with-param name="domain" select="$domain"/> 1998 </xsl:call-template> 1999 </xsl:attribute> 2000 </xsl:when> 2001 <xsl:otherwise> 2002 <xsl:attribute name="displayName"> 2003 <xsl:value-of select="$ccrCodedDescription/a:Text"/> 2004 </xsl:attribute> 2005 </xsl:otherwise> 2006 </xsl:choose> 2007 </xsl:element> 2008 2009 </xsl:template> 2010 2011 <xsl:template name="ccdDateTime"> 2012 <xsl:param name="dt"/> 2013 <xsl:param name="type"/> 2014 <xsl:if test="$dt"> 2015 <xsl:if test="$dt[1]/a:ExactDateTime"> 2016 <effectiveTime> 2017 <xsl:if test="$type"> 2018 <xsl:attribute name="xsi:type"> 2019 <xsl:value-of select="$type"></xsl:value-of> 2020 </xsl:attribute> 2021 </xsl:if> 2022 <low> 2023 <xsl:attribute name="value"> 2024 <xsl:call-template name="date:format-date"> 2025 <xsl:with-param name="date-time"> 2026 <xsl:value-of select="$dt[1]/a:ExactDateTime"/> 2027 </xsl:with-param> 2028 <xsl:with-param name="pattern">yyyyMMdd</xsl:with-param> 2029 </xsl:call-template> 2030 </xsl:attribute> 2031 </low> 2032 <high nullFlavor="UNK"/> 2033 </effectiveTime> 2034 </xsl:if> 2035 <xsl:if test="$dt[1]/a:DateTimeRange"> 2036 <effectiveTime> 2037 <low> 2038 <xsl:attribute name="value"> 2039 <xsl:call-template name="date:format-date"> 2040 <xsl:with-param name="date-time"> 2041 <xsl:value-of select="$dt[1]/a:DateTimeRange/a:BeginRange/a:ExactDateTime"/> 2042 </xsl:with-param> 2043 <xsl:with-param name="pattern">yyyyMMdd</xsl:with-param> 2044 </xsl:call-template> 2045 </xsl:attribute> 2046 </low> 2047 <high> 2048 <xsl:attribute name="value"> 2049 <xsl:call-template name="date:format-date"> 2050 <xsl:with-param name="date-time"> 2051 <xsl:value-of select="$dt[1]/a:DateTimeRange/a:EndRange/a:ExactDateTime"/> 2052 </xsl:with-param> 2053 <xsl:with-param name="pattern">yyyyMMdd</xsl:with-param> 2054 </xsl:call-template> 2055 </xsl:attribute> 2056 </high> 2057 </effectiveTime> 2058 </xsl:if> 2059 </xsl:if> 2060 </xsl:template> 2061 2062 <xsl:template name="ccdMedicationFrequency"> 2063 <xsl:param name="frequency"/> 2064 <xsl:if test="$frequency"> 2065 <xsl:choose> 2066 <xsl:when test="$frequency/a:Value='qd'"> 2067 <effectiveTime xsi:type="PIVL_TS" operator="A"> 2068 <xsl:attribute name="institutionSpecified">true</xsl:attribute> 2069 <period> 2070 <xsl:attribute name="value">24</xsl:attribute> 2071 <xsl:attribute name="unit">h</xsl:attribute> 2072 </period> 2073 </effectiveTime> 2074 </xsl:when> 2075 <xsl:when test="$frequency/a:Value='bid'"> 2076 <effectiveTime xsi:type="PIVL_TS" operator="A"> 2077 <xsl:attribute name="institutionSpecified">true</xsl:attribute> 2078 <period> 2079 <xsl:attribute name="value">12</xsl:attribute> 2080 <xsl:attribute name="unit">h</xsl:attribute> 2081 </period> 2082 </effectiveTime> 2083 </xsl:when> 2084 <xsl:when test="$frequency/a:Value='tid'"> 2085 <effectiveTime xsi:type="PIVL_TS" operator="A"> 2086 <xsl:attribute name="institutionSpecified">true</xsl:attribute> 2087 <period> 2088 <xsl:attribute name="value">8</xsl:attribute> 2089 <xsl:attribute name="unit">h</xsl:attribute> 2090 </period> 2091 </effectiveTime> 2092 </xsl:when> 2093 <xsl:when test="$frequency/a:Value='qid'"> 2094 <effectiveTime xsi:type="PIVL_TS" operator="A"> 2095 <xsl:attribute name="institutionSpecified">true</xsl:attribute> 2096 <period> 2097 <xsl:attribute name="value">6</xsl:attribute> 2098 <xsl:attribute name="unit">h</xsl:attribute> 2099 </period> 2100 </effectiveTime> 2101 </xsl:when> 2102 <xsl:when test="$frequency/a:Value='qam'"> 2103 <effectiveTime xsi:type='EIVL' operator='A'> 2104 <event code='ACM'/> 2105 </effectiveTime> 2106 </xsl:when> 2107 <xsl:when test="$frequency/a:Value='qpm'"> 2108 <effectiveTime xsi:type='EIVL' operator='A'> 2109 <event code='PCV'/> 2110 </effectiveTime> 2111 </xsl:when> 2112 </xsl:choose> 2113 </xsl:if> 2114 </xsl:template> 2115 2116 <xsl:template name="ccdStatus"> 2117 <xsl:param name="ccrStatus"/> 2118 2119 <entryRelationship typeCode="REFR"> 2120 <observation classCode="OBS" moodCode="EVN"> 2121 <templateId root="2.16.840.1.113883.10.20.1.50"/> 2122 <!-- Problem status observation template --> 2123 <code code="33999-4" codeSystem="2.16.840.1.113883.6.1" displayName="Status"/> 2124 <statusCode code="completed"/> 2125 <xsl:call-template name="ccdCodedValue"> 2126 <xsl:with-param name="ccrCodedDescription" select="$ccrStatus"/> 2127 </xsl:call-template> 2128 </observation> 2129 </entryRelationship> 2130 </xsl:template> 2131 2132 <xsl:template name="ccdStatusObservation"> 2133 <xsl:param name="status"/> 2134 <xsl:variable name="statusText" select="$status/a:Text"></xsl:variable> 2135 <xsl:choose> 2136 <xsl:when test="$statusText='Active'"> 2137 <xsl:call-template name="ccdStatusElement"> 2138 <xsl:with-param name="statusCode" select="'55561003'"></xsl:with-param> 2139 <xsl:with-param name="statusDisplayName" select="$statusText"></xsl:with-param> 2140 </xsl:call-template> 2141 </xsl:when> 2142 <xsl:when test="$statusText='Inactive'"> 2143 <xsl:call-template name="ccdStatusElement"> 2144 <xsl:with-param name="statusCode" select="'73425007'"></xsl:with-param> 2145 <xsl:with-param name="statusDisplayName" select="$statusText"></xsl:with-param> 2146 </xsl:call-template> 2147 </xsl:when> 2148 <xsl:when test="$statusText='Chronic'"> 2149 <xsl:call-template name="ccdStatusElement"> 2150 <xsl:with-param name="statusCode" select="'90734009'"></xsl:with-param> 2151 <xsl:with-param name="statusDisplayName" select="$statusText"></xsl:with-param> 2152 </xsl:call-template> 2153 </xsl:when> 2154 </xsl:choose> 2155 </xsl:template> 2156 2157 <xsl:template name="ccdStatusProcedure"> 2158 <xsl:param name="status"/> 2159 <xsl:variable name="statusText" select="$status/a:Text"></xsl:variable> 2160 <xsl:choose> 2161 <xsl:when test="$statusText='Completed'"> 2162 <statusCode code="completed"/> 2163 </xsl:when> 2164 <xsl:when test="$statusText='Active'"> 2165 <statusCode code="active"/> 2166 </xsl:when> 2167 <xsl:when test="$statusText='Aborted'"> 2168 <statusCode code="aborted"/> 2169 </xsl:when> 2170 <xsl:when test="$statusText='Cancelled' or $statusText='Canceled'"> 2171 <statusCode code="cancelled"/> 2172 </xsl:when> 2173 <xsl:otherwise> 2174 <statusCode> 2175 <xsl:attribute name="code"> 2176 <xsl:value-of select="$statusText"></xsl:value-of> 2177 </xsl:attribute> 2178 </statusCode> 2179 </xsl:otherwise> 2180 </xsl:choose> 2181 </xsl:template> 2182 2183 <xsl:template name="ccdStatusElement"> 2184 <xsl:param name="statusCode"/> 2185 <xsl:param name="statusDisplayName"/> 2186 <value> 2187 <xsl:attribute name="xsi:type">CE</xsl:attribute> 2188 <xsl:attribute name="code"> 2189 <xsl:value-of select="$statusCode"></xsl:value-of> 2190 </xsl:attribute> 2191 <xsl:attribute name="codeSystem">2.16.840.1.113883.6.96</xsl:attribute> 2192 <xsl:attribute name="displayName"> 2193 <xsl:value-of select="$statusDisplayName"></xsl:value-of> 2194 </xsl:attribute> 2195 </value> 2196 </xsl:template> 2197 2198 <xsl:template name="labObservation"> 2199 <xsl:param name="ccrTestNode"/> 2200 <xsl:param name="testDate"/> 2201 2202 <component> 2203 <observation classCode="OBS" moodCode="EVN"> 2204 <templateId root="2.16.840.1.113883.3.88.11.83.15" assigningAuthorityName="HITSP C83"/> 2205 <templateId root="2.16.840.1.113883.10.20.1.31" assigningAuthorityName="CCD"/> 2206 <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.13" assigningAuthorityName="IHE PCC"/> 2207 <!-- Result observation template --> 2208 2209 <xsl:call-template name="ccdID"> 2210 <xsl:with-param name="ccrObjectID"> 2211 <xsl:value-of select="$ccrTestNode/a:CCRDataObjectID"></xsl:value-of> 2212 </xsl:with-param> 2213 </xsl:call-template> 2214 2215 <!-- <code> --> 2216 <xsl:call-template name="ccdCodedValue"> 2217 <xsl:with-param name="ccrCodedDescription" select="$ccrTestNode/a:Description"/> 2218 <xsl:with-param name="nodeName" select="'code'"/> 2219 </xsl:call-template> 2220 2221 <text> 2222 <reference> 2223 <xsl:attribute name="value"> 2224 <xsl:text>#</xsl:text> 2225 <xsl:value-of select="$ccrTestNode/a:CCRDataObjectID"/> 2226 </xsl:attribute> 2227 </reference> 2228 </text> 2229 2230 <statusCode code="completed"/> 2231 2232 <!-- <effectiveTime> --> 2233 <xsl:choose> 2234 <xsl:when test="$ccrTestNode/a:DateTime"> 2235 <xsl:call-template name="ccdDateTime"> 2236 <xsl:with-param name="dt" select="$ccrTestNode/a:DateTime"/> 2237 </xsl:call-template> 2238 </xsl:when> 2239 <xsl:otherwise> 2240 <xsl:call-template name="ccdDateTime"> 2241 <xsl:with-param name="dt" select="$testDate"/> 2242 </xsl:call-template> 2243 </xsl:otherwise> 2244 </xsl:choose> 2245 2246 <xsl:choose> 2247 <xsl:when test="$ccrTestNode/a:TestResult[a:Value!='']"> 2248 <value xsi:type="PQ"> 2249 <xsl:attribute name="value"> 2250 <xsl:value-of select="$ccrTestNode/a:TestResult/a:Value"/> 2251 </xsl:attribute> 2252 <xsl:attribute name="unit"> 2253 <xsl:value-of select="$ccrTestNode/a:TestResult/a:Units/a:Unit"/> 2254 </xsl:attribute> 2255 </value> 2256 </xsl:when> 2257 <xsl:when test="$ccrTestNode/a:TestResult[a:Description/a:Text!='']"> 2258 <value xsi:type="TX"> 2259 <xsl:attribute name="value"> 2260 <xsl:value-of select="$ccrTestNode/a:TestResult/a:Description/a:Text"/> 2261 </xsl:attribute> 2262 </value> 2263 </xsl:when> 2264 </xsl:choose> 2265 2266 <xsl:if test="$ccrTestNode/a:Flag"> 2267 <xsl:call-template name="ccdCodedValue"> 2268 <xsl:with-param name="ccrCodedDescription" select="$ccrTestNode/a:Flag"/> 2269 <xsl:with-param name="nodeName" select="'interpretationCode'"/> 2270 <xsl:with-param name="domain" select="'ObservationInterpretation'"/> 2271 </xsl:call-template> 2272 </xsl:if> 2273 2274 <xsl:if test="$ccrTestNode/a:NormalResult"> 2275 <referenceRange> 2276 <xsl:if test="$ccrTestNode/a:NormalResult/a:Normal/a:Description/a:Text"> 2277 <observationRange> 2278 <text> 2279 <xsl:value-of select="$ccrTestNode/a:NormalResult/a:Normal/a:Description/a:Text"/> 2280 </text> 2281 </observationRange> 2282 </xsl:if> 2283 </referenceRange> 2284 </xsl:if> 2285 2286 </observation> 2287 </component> 2288 2289 </xsl:template> 1738 2290 </xsl:stylesheet>
Note:
See TracChangeset
for help on using the changeset viewer.