Ignore:
Timestamp:
Oct 11, 2012, 1:42:56 PM (12 years ago)
Author:
George Lilly
Message:

fix to lab units of measure not found situation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • smart/trunk/p/C0SDEM.m

    r1540 r1569  
    1 C0SDEM    ; GPL - Smart Demographics Processing ;2/22/12  17:05
    2         ;;1.0;VISTA SMART CONTAINER;;Sep 26, 2012;Build 2
    3         ;Copyright 2012 George Lilly.  Licensed under the terms of the GNU
    4         ;General Public License See attached copy of the License.
    5         ;
    6         ;This program is free software; you can redistribute it and/or modify
    7         ;it under the terms of the GNU General Public License as published by
    8         ;the Free Software Foundation; either version 2 of the License, or
    9         ;(at your option) any later version.
    10         ;
    11         ;This program is distributed in the hope that it will be useful,
    12         ;but WITHOUT ANY WARRANTY; without even the implied warranty of
    13         ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14         ;GNU General Public License for more details.
    15         ;
    16         ;You should have received a copy of the GNU General Public License along
    17         ;with this program; if not, write to the Free Software Foundation, Inc.,
    18         ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    19         ;
    20         Q
    21         ;
    22         ;<?xml version="1.0" encoding="utf-8"?>
    23         ;<rdf:RDF
    24         ;  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    25         ;  xmlns:sp="http://smartplatforms.org/terms#"
    26         ;  xmlns:dcterms="http://purl.org/dc/terms/"
    27         ;  xmlns:v="http://www.w3.org/2006/vcard/ns#"
    28         ;  xmlns:foaf="http://xmlns.com/foaf/0.1/">
    29         ;   <sp:Demographics>
    30         ;
    31         ;     <v:n>
    32         ;        <v:Name>
    33         ;            <v:given-name>Bob</v:given-name>
    34         ;            <v:additional-name>J</v:additional-name>
    35         ;            <v:family-name>Odenkirk</v:family-name>
    36         ;        </v:Name>
    37         ;     </v:n>
    38         ;
    39         ;     <v:adr>
    40         ;        <v:Address>
    41         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
    42         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
    43         ;
    44         ;          <v:street-address>15 Main St</v:street-address>
    45         ;          <v:extended-address>Apt 2</v:extended-address>
    46         ;          <v:locality>Wonderland</v:locality>
    47         ;          <v:region>OZ</v:region>
    48         ;          <v:postal-code>54321</v:postal-code>
    49         ;          <v:country>USA</v:country>
    50         ;        </v:Address>
    51         ;     </v:adr>
    52         ;
    53         ;     <v:tel>
    54         ;        <v:Tel>
    55         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
    56         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
    57         ;          <rdf:value>800-555-1212</rdf:value>
    58         ;        </v:Tel>
    59         ;     </v:tel>
    60         ;
    61         ;     <v:tel>
    62         ;        <v:Tel>
    63         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
    64         ;          <rdf:value>800-555-1515</rdf:value>
    65         ;        </v:Tel>
    66         ;     </v:tel>
    67         ;
    68         ;     <foaf:gender>male</foaf:gender>
    69         ;     <v:bday>1959-12-25</v:bday>
    70         ;     <v:email>bob.odenkirk@example.com</v:email>
    71         ;
    72         ;     <sp:medicalRecordNumber>
    73         ;       <sp:Code>
    74         ;        <dcterms:title>My Hospital Record 2304575</dcterms:title>
    75         ;        <dcterms:identifier>2304575</dcterms:identifier>
    76         ;        <sp:system>My Hospital Record</sp:system>
    77         ;       </sp:Code>
    78         ;     </sp:medicalRecordNumber>
    79         ;
    80         ;   </sp:Demographics>
    81         ;</rdf:RDF><?xml version="1.0" encoding="utf-8"?>
    82         ;<rdf:RDF
    83         ;  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    84         ;  xmlns:sp="http://smartplatforms.org/terms#"
    85         ;  xmlns:dcterms="http://purl.org/dc/terms/"
    86         ;  xmlns:v="http://www.w3.org/2006/vcard/ns#"
    87         ;  xmlns:foaf="http://xmlns.com/foaf/0.1/">
    88         ;   <sp:Demographics>
    89         ;
    90         ;     <v:n>
    91         ;        <v:Name>
    92         ;            <v:given-name>Bob</v:given-name>
    93         ;            <v:additional-name>J</v:additional-name>
    94         ;            <v:family-name>Odenkirk</v:family-name>
    95         ;        </v:Name>
    96         ;     </v:n>
    97         ;
    98         ;     <v:adr>
    99         ;        <v:Address>
    100         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
    101         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
    102         ;
    103         ;          <v:street-address>15 Main St</v:street-address>
    104         ;          <v:extended-address>Apt 2</v:extended-address>
    105         ;          <v:locality>Wonderland</v:locality>
    106         ;          <v:region>OZ</v:region>
    107         ;          <v:postal-code>54321</v:postal-code>
    108         ;          <v:country>USA</v:country>
    109         ;        </v:Address>
    110         ;     </v:adr>
    111         ;
    112         ;     <v:tel>
    113         ;        <v:Tel>
    114         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
    115         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
    116         ;          <rdf:value>800-555-1212</rdf:value>
    117         ;        </v:Tel>
    118         ;     </v:tel>
    119         ;
    120         ;     <v:tel>
    121         ;        <v:Tel>
    122         ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
    123         ;          <rdf:value>800-555-1515</rdf:value>
    124         ;        </v:Tel>
    125         ;     </v:tel>
    126         ;
    127         ;     <foaf:gender>male</foaf:gender>
    128         ;     <v:bday>1959-12-25</v:bday>
    129         ;     <v:email>bob.odenkirk@example.com</v:email>
    130         ;
    131         ;     <sp:medicalRecordNumber>
    132         ;       <sp:Code>
    133         ;        <dcterms:title>My Hospital Record 2304575</dcterms:title>
    134         ;        <dcterms:identifier>2304575</dcterms:identifier>
    135         ;        <sp:system>My Hospital Record</sp:system>
    136         ;       </sp:Code>
    137         ;     </sp:medicalRecordNumber>
    138         ;
    139         ;   </sp:Demographics>
    140         ;</rdf:RDF>
    141         ;G(1)="nodeID:25591^rdf:type^v:Home"
    142         ;G(2)="nodeID:25591^rdf:type^v:Pref"
    143         ;G(3)="nodeID:25591^rdf:type^v:Tel"
    144         ;G(4)="nodeID:25591^rdf:value^800-369-6403"
    145         ;G(5)="nodeID:25611^rdf:type^v:Name"
    146         ;G(6)="nodeID:25611^v:additional-name^N"
    147         ;G(7)="nodeID:25611^v:family-name^Brooks"
    148         ;G(8)="nodeID:25611^v:given-name^Brian"
    149         ;G(9)="nodeID:25622^dcterms:identifier^981968"
    150         ;G(10)="nodeID:25622^dcterms:title^My Hospital Record 981968"
    151         ;G(11)="nodeID:25622^rdf:type^sp:Code"
    152         ;G(12)="nodeID:25622^sp:system^My Hospital Record"
    153         ;G(13)="nodeID:25623^rdf:type^v:Address"
    154         ;G(14)="nodeID:25623^rdf:type^v:Home"
    155         ;G(15)="nodeID:25623^rdf:type^v:Pref"
    156         ;G(16)="nodeID:25623^v:locality^Bixby"
    157         ;G(17)="nodeID:25623^v:postal-code^74008"
    158         ;G(18)="nodeID:25623^v:region^OK"
    159         ;G(19)="nodeID:25623^v:street-address^82 Lake St"
    160         ;G(20)="smart:981968/demographics^foaf:gender^male"
    161         ;G(21)="smart:981968/demographics^rdf:type^sp:Demographics"
    162         ;G(22)="smart:981968/demographics^sp:belongsTo^smart:981968"
    163         ;G(23)="smart:981968/demographics^sp:medicalRecordNumber^nodeID:25622"
    164         ;G(24)="smart:981968/demographics^v:adr^nodeID:25623"
    165         ;G(25)="smart:981968/demographics^v:bday^1956-03-23"
    166         ;G(26)="smart:981968/demographics^v:email^brian.brooks@example.com"
    167         ;G(27)="smart:981968/demographics^v:n^nodeID:25611"
    168         ;G(28)="smart:981968/demographics^v:tel^nodeID:25591"
    169         Q
    170         ;
    171 PATIENT(GRTN,C0SARY)    ; GRTN, passed by reference,
    172         ; is the return name of the graph created. "" if none
    173         ; C0SARY is passed in by reference and is the NHIN array of patient
    174         ;
    175         I $O(C0SARY("patient",""))="" D  Q  ;
    176         . I $D(DEBUG) W !,"No Patient array"
    177         . S GRTN=""
    178         S GRTN="" ; default to no patient
    179         N C0SGRF
    180         S C0SGRF="vistaSmart:"_ZPATID_"/patient"
    181         S ZPAT=C0SGRF ; subject is the same as the graph name
    182         I $D(DEBUG) W !,"Processing ",C0SGRF
    183         D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
    184         D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
    185         N FARY S FARY="C0XFARY"
    186         D USEFARY^C0XF2N(FARY)
    187         D VOCINIT^C0XUTIL
    188         ;
    189         N ZPN,ZR
    190         D STARTADD^C0XF2N
    191         ;
    192         ; First do the base demographic graph
    193         ;
    194         S ZPN=$NA(C0SARY("patient",1)) ; name of predicate array for this patient
    195         N SEX S SEX=$G(@ZPN@("gender@value"))
    196         I SEX="M" S SEX="male"
    197         I SEX="F" S SEX="female"
    198         S ZR("foaf:gender")=SEX
    199         S ZR("rdf:type")="sp:Demographics"
    200         S ZR("sp:belongsTo")=ZPAT
    201         N PATIENT
    202         S PATIENT=$P(ZPAT,"#",2)
    203         I $D(DEBUG) W !,"PROCESSING PATIENT ",PATIENT
    204         N NMREC S NMREC=$$ANONS^C0XF2N ; new anonomous subject for med rec graph
    205         S ZR("sp:medicalRecordNumber")=NMREC
    206         N NVADR S NVADR=$$ANONS^C0XF2N ; for address
    207         S ZR("v:adr")=NVADR
    208         N NNAME S NNAME=$$ANONS^C0XF2N ; for name
    209         S ZR("v:n")=NNAME
    210         N NTEL S NTEL=$$ANONS^C0XF2N ; for telephone
    211         I $D(@ZPN@("telecomList.telecom@value")) S ZR("v:tel")=NTEL ; only if exists
    212         N BDATE
    213         S ZX=""
    214         S ZX=$G(@ZPN@("dob@value")) ; date of birth in fileman format
    215         S BDATE=$$FMTE^XLFDT(ZX,"7D") ; ordered date
    216         S BDATE=$TR(BDATE,"/","-") ; change slashes to hyphens
    217         I BDATE="" S BDATE="UNKNOWN"
    218         N Z2,Z3
    219         S Z2=$P(BDATE,"-",2)
    220         S Z3=$P(BDATE,"-",3)
    221         I $L(Z2)=1 S $P(BDATE,"-",2)="0"_Z2
    222         I $L(Z3)=1 S $P(BDATE,"-",3)="0"_Z3
    223         S ZR("v:bday")=BDATE
    224         I $D(C0SVISTA) D  ;
    225         . S ZR("vista:SSN")=$G(@ZPN@("ssn@value")) ; SSN
    226         . S ZR("vista:DFN")=$G(@ZPN@("id@value")) ; DFN
    227         D ADDINN^C0XF2N(C0SGRF,ZPAT,.ZR) ; create base graph
    228         K ZR
    229         ;
    230         ; create address sub-graph
    231         ;
    232         S ZR("rdf:type")="v:Address"
    233         S ZR("rdf:type")="v:Home"
    234         S ZR("v:locality")=$G(@ZPN@("address@city"))
    235         S ZR("v:postal-code")=$G(@ZPN@("address@postalCode"))
    236         S ZR("v:region")=$G(@ZPN@("address@stateProvince"))
    237         S ZR("v:street-address")=$G(@ZPN@("address@streetLine1"))
    238         D ADDINN^C0XF2N(C0SGRF,NVADR,.ZR) ; create the vcard address
    239         K ZR
    240         ;
    241         ; create medical record subgraph
    242         ;
    243         S ZR("dcterms:identifier")=$G(@ZPN@("id@value"))
    244         S ZR("dcterms:title")="VistA Patient Record "_ZR("dcterms:identifier")
    245         S ZR("rdf:type")="sp:Code"
    246         S ZR("sp:system")="VistA Patient Record"
    247         D ADDINN^C0XF2N(C0SGRF,NMREC,.ZR) ; create medical record graph
    248         K ZR
    249         ;
    250         ; create name subgraph
    251         ;
    252         N ZNF,ZNL,ZNM,ZNAM
    253         S ZR("rdf:type")="v:Name"
    254         S ZX=$G(@ZPN@("givenNames@value")) ; first name and middle names
    255         S ZNF=$P(ZX," ",1) ; first name is first piece
    256         S ZNM=$P(ZX," ",2) ; middle names are the rest
    257         S ZR("v:additional-name")=ZNM
    258         S ZR("v:family-name")=$G(@ZPN@("familyName@value"))
    259         S ZR("v:given-name")=ZNF
    260         D ADDINN^C0XF2N(C0SGRF,NNAME,.ZR) ; insert name graph
    261         K ZR
    262         ;
    263         ; create telephone subgraph
    264         ;
    265         D  ;
    266         . S ZR("rdf:value")=$G(@ZPN@("telecomList.telecom@value"))
    267         . I ZR("rdf:value")="" Q  ; telephone number missing, no subgraph
    268         . S ZR("rdf:type")="v:Tel"
    269         . D ADDINN^C0XF2N(C0SGRF,NTEL,.ZR)
    270         K ZR
    271         ;
    272         ; load the demographics graph and all sub graphs to the triple store
    273         ;
    274         D BULKLOAD^C0XF2N(.C0XFDA)
    275         S GRTN=C0SGRF
    276         Q
    277         ;
    278 AGES    ; LIST ALL PATIENTS AND THEIR AGES
    279         N ZI S ZI=0
    280         F  S ZI=$O(^DPT(ZI)) Q:+ZI=0  D  ; FOR EVERY PATIENT
    281         . N ZDOB
    282         . S ZDOB=$$GET1^DIQ(2,ZI_",","DOB","I") ; FILEMAN DOB
    283         . N ZNAME
    284         . S ZNAME=$P(^DPT(ZI,0),U)
    285         . N ZSEX
    286         . S ZSEX=$$GET1^DIQ(2,ZI_",","SEX")
    287         . W !,"DFN:",ZI," ",ZNAME," AGE: ",+$$BRIEF^VWTIME(ZDOB)," YEAR OLD ",ZSEX
    288         Q
    289         ;
     1C0SDEM   ; GPL - Smart Demographics Processing ;2/22/12  17:05
     2 ;;0.1;C0S;nopatch;noreleasedate;Build 2
     3 ;Copyright 2012 George Lilly.  Licensed under the terms of the GNU
     4 ;General Public License See attached copy of the License.
     5 ;
     6 ;This program is free software; you can redistribute it and/or modify
     7 ;it under the terms of the GNU General Public License as published by
     8 ;the Free Software Foundation; either version 2 of the License, or
     9 ;(at your option) any later version.
     10 ;
     11 ;This program is distributed in the hope that it will be useful,
     12 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 ;GNU General Public License for more details.
     15 ;
     16 ;You should have received a copy of the GNU General Public License along
     17 ;with this program; if not, write to the Free Software Foundation, Inc.,
     18 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     19 ;
     20 Q
     21 ;
     22 ;<?xml version="1.0" encoding="utf-8"?>
     23 ;<rdf:RDF
     24 ;  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     25 ;  xmlns:sp="http://smartplatforms.org/terms#"
     26 ;  xmlns:dcterms="http://purl.org/dc/terms/"
     27 ;  xmlns:v="http://www.w3.org/2006/vcard/ns#"
     28 ;  xmlns:foaf="http://xmlns.com/foaf/0.1/">
     29 ;   <sp:Demographics>
     30 ;
     31 ;     <v:n>
     32 ;        <v:Name>
     33 ;            <v:given-name>Bob</v:given-name>
     34 ;            <v:additional-name>J</v:additional-name>
     35 ;            <v:family-name>Odenkirk</v:family-name>
     36 ;        </v:Name>
     37 ;     </v:n>
     38 ;
     39 ;     <v:adr>
     40 ;        <v:Address>
     41 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
     42 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
     43 ;
     44 ;          <v:street-address>15 Main St</v:street-address>
     45 ;          <v:extended-address>Apt 2</v:extended-address>
     46 ;          <v:locality>Wonderland</v:locality>
     47 ;          <v:region>OZ</v:region>
     48 ;          <v:postal-code>54321</v:postal-code>
     49 ;          <v:country>USA</v:country>
     50 ;        </v:Address>
     51 ;     </v:adr>
     52 ;
     53 ;     <v:tel>
     54 ;        <v:Tel>
     55 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
     56 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
     57 ;          <rdf:value>800-555-1212</rdf:value>
     58 ;        </v:Tel>
     59 ;     </v:tel>
     60 ;
     61 ;     <v:tel>
     62 ;        <v:Tel>
     63 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
     64 ;          <rdf:value>800-555-1515</rdf:value>
     65 ;        </v:Tel>
     66 ;     </v:tel>
     67 ;
     68 ;     <foaf:gender>male</foaf:gender>
     69 ;     <v:bday>1959-12-25</v:bday>
     70 ;     <v:email>bob.odenkirk@example.com</v:email>
     71 ;
     72 ;     <sp:medicalRecordNumber>
     73 ;       <sp:Code>
     74 ;        <dcterms:title>My Hospital Record 2304575</dcterms:title>
     75 ;        <dcterms:identifier>2304575</dcterms:identifier>
     76 ;        <sp:system>My Hospital Record</sp:system>
     77 ;       </sp:Code>
     78 ;     </sp:medicalRecordNumber>
     79 ;
     80 ;   </sp:Demographics>
     81 ;</rdf:RDF><?xml version="1.0" encoding="utf-8"?>
     82 ;<rdf:RDF
     83 ;  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     84 ;  xmlns:sp="http://smartplatforms.org/terms#"
     85 ;  xmlns:dcterms="http://purl.org/dc/terms/"
     86 ;  xmlns:v="http://www.w3.org/2006/vcard/ns#"
     87 ;  xmlns:foaf="http://xmlns.com/foaf/0.1/">
     88 ;   <sp:Demographics>
     89 ;
     90 ;     <v:n>
     91 ;        <v:Name>
     92 ;            <v:given-name>Bob</v:given-name>
     93 ;            <v:additional-name>J</v:additional-name>
     94 ;            <v:family-name>Odenkirk</v:family-name>
     95 ;        </v:Name>
     96 ;     </v:n>
     97 ;
     98 ;     <v:adr>
     99 ;        <v:Address>
     100 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
     101 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
     102 ;
     103 ;          <v:street-address>15 Main St</v:street-address>
     104 ;          <v:extended-address>Apt 2</v:extended-address>
     105 ;          <v:locality>Wonderland</v:locality>
     106 ;          <v:region>OZ</v:region>
     107 ;          <v:postal-code>54321</v:postal-code>
     108 ;          <v:country>USA</v:country>
     109 ;        </v:Address>
     110 ;     </v:adr>
     111 ;
     112 ;     <v:tel>
     113 ;        <v:Tel>
     114 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Home" />
     115 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Pref" />
     116 ;          <rdf:value>800-555-1212</rdf:value>
     117 ;        </v:Tel>
     118 ;     </v:tel>
     119 ;
     120 ;     <v:tel>
     121 ;        <v:Tel>
     122 ;          <rdf:type rdf:resource="http://www.w3.org/2006/vcard/ns#Cell" />
     123 ;          <rdf:value>800-555-1515</rdf:value>
     124 ;        </v:Tel>
     125 ;     </v:tel>
     126 ;
     127 ;     <foaf:gender>male</foaf:gender>
     128 ;     <v:bday>1959-12-25</v:bday>
     129 ;     <v:email>bob.odenkirk@example.com</v:email>
     130 ;
     131 ;     <sp:medicalRecordNumber>
     132 ;       <sp:Code>
     133 ;        <dcterms:title>My Hospital Record 2304575</dcterms:title>
     134 ;        <dcterms:identifier>2304575</dcterms:identifier>
     135 ;        <sp:system>My Hospital Record</sp:system>
     136 ;       </sp:Code>
     137 ;     </sp:medicalRecordNumber>
     138 ;
     139 ;   </sp:Demographics>
     140 ;</rdf:RDF>
     141 ;G(1)="nodeID:25591^rdf:type^v:Home"
     142 ;G(2)="nodeID:25591^rdf:type^v:Pref"
     143 ;G(3)="nodeID:25591^rdf:type^v:Tel"
     144 ;G(4)="nodeID:25591^rdf:value^800-369-6403"
     145 ;G(5)="nodeID:25611^rdf:type^v:Name"
     146 ;G(6)="nodeID:25611^v:additional-name^N"
     147 ;G(7)="nodeID:25611^v:family-name^Brooks"
     148 ;G(8)="nodeID:25611^v:given-name^Brian"
     149 ;G(9)="nodeID:25622^dcterms:identifier^981968"
     150 ;G(10)="nodeID:25622^dcterms:title^My Hospital Record 981968"
     151 ;G(11)="nodeID:25622^rdf:type^sp:Code"
     152 ;G(12)="nodeID:25622^sp:system^My Hospital Record"
     153 ;G(13)="nodeID:25623^rdf:type^v:Address"
     154 ;G(14)="nodeID:25623^rdf:type^v:Home"
     155 ;G(15)="nodeID:25623^rdf:type^v:Pref"
     156 ;G(16)="nodeID:25623^v:locality^Bixby"
     157 ;G(17)="nodeID:25623^v:postal-code^74008"
     158 ;G(18)="nodeID:25623^v:region^OK"
     159 ;G(19)="nodeID:25623^v:street-address^82 Lake St"
     160 ;G(20)="smart:981968/demographics^foaf:gender^male"
     161 ;G(21)="smart:981968/demographics^rdf:type^sp:Demographics"
     162 ;G(22)="smart:981968/demographics^sp:belongsTo^smart:981968"
     163 ;G(23)="smart:981968/demographics^sp:medicalRecordNumber^nodeID:25622"
     164 ;G(24)="smart:981968/demographics^v:adr^nodeID:25623"
     165 ;G(25)="smart:981968/demographics^v:bday^1956-03-23"
     166 ;G(26)="smart:981968/demographics^v:email^brian.brooks@example.com"
     167 ;G(27)="smart:981968/demographics^v:n^nodeID:25611"
     168 ;G(28)="smart:981968/demographics^v:tel^nodeID:25591"
     169 Q
     170 ;
     171PATIENT(GRTN,C0SARY) ; GRTN, passed by reference,
     172 ; is the return name of the graph created. "" if none
     173 ; C0SARY is passed in by reference and is the NHIN array of patient
     174 ;
     175 I $O(C0SARY("patient",""))="" D  Q  ;
     176 . I $D(DEBUG) W !,"No Patient array"
     177 . S GRTN=""
     178 S GRTN="" ; default to no patient
     179 N C0SGRF
     180 S C0SGRF="vistaSmart:"_ZPATID_"/patient"
     181 S ZPAT=C0SGRF ; subject is the same as the graph name
     182 I $D(DEBUG) W !,"Processing ",C0SGRF
     183 D DELGRAPH^C0XF2N(C0SGRF) ; delete the old graph
     184 D INITFARY^C0XF2N("C0XFARY") ; which triple store to use
     185 N FARY S FARY="C0XFARY"
     186 D USEFARY^C0XF2N(FARY)
     187 D VOCINIT^C0XUTIL
     188 ;
     189 N ZPN,ZR
     190 D STARTADD^C0XF2N
     191 ;
     192 ; First do the base demographic graph
     193 ;
     194 S ZPN=$NA(C0SARY("patient",1)) ; name of predicate array for this patient
     195 N SEX S SEX=$G(@ZPN@("gender@value"))
     196 I SEX="M" S SEX="male"
     197 I SEX="F" S SEX="female"
     198 S ZR("foaf:gender")=SEX
     199 S ZR("rdf:type")="sp:Demographics"
     200 S ZR("sp:belongsTo")=ZPAT
     201 N PATIENT
     202 S PATIENT=$P(ZPAT,"#",2)
     203 I $D(DEBUG) W !,"PROCESSING PATIENT ",PATIENT
     204 N NMREC S NMREC=$$ANONS^C0XF2N ; new anonomous subject for med rec graph
     205 S ZR("sp:medicalRecordNumber")=NMREC
     206 N NVADR S NVADR=$$ANONS^C0XF2N ; for address
     207 S ZR("v:adr")=NVADR
     208 N NNAME S NNAME=$$ANONS^C0XF2N ; for name
     209 S ZR("v:n")=NNAME
     210 N NTEL S NTEL=$$ANONS^C0XF2N ; for telephone
     211 I $D(@ZPN@("telecomList.telecom@value")) S ZR("v:tel")=NTEL ; only if exists
     212 N BDATE
     213 S ZX=""
     214 S ZX=$G(@ZPN@("dob@value")) ; date of birth in fileman format
     215 S BDATE=$$FMTE^XLFDT(ZX,"7D") ; ordered date
     216 S BDATE=$TR(BDATE,"/","-") ; change slashes to hyphens
     217 I BDATE="" S BDATE="UNKNOWN"
     218 N Z2,Z3
     219 S Z2=$P(BDATE,"-",2)
     220 S Z3=$P(BDATE,"-",3)
     221 I $L(Z2)=1 S $P(BDATE,"-",2)="0"_Z2
     222 I $L(Z3)=1 S $P(BDATE,"-",3)="0"_Z3
     223 S ZR("v:bday")=BDATE
     224 I $D(C0SVISTA) D  ;
     225 . S ZR("vista:SSN")=$G(@ZPN@("ssn@value")) ; SSN
     226 . S ZR("vista:DFN")=$G(@ZPN@("id@value")) ; DFN
     227 D ADDINN^C0XF2N(C0SGRF,ZPAT,.ZR) ; create base graph
     228 K ZR
     229 ;
     230 ; create address sub-graph
     231 ;
     232 S ZR("rdf:type")="v:Address"
     233 S ZR("rdf:type")="v:Home"
     234 S ZR("v:locality")=$G(@ZPN@("address@city"))
     235 S ZR("v:postal-code")=$G(@ZPN@("address@postalCode"))
     236 S ZR("v:region")=$G(@ZPN@("address@stateProvince"))
     237 S ZR("v:street-address")=$G(@ZPN@("address@streetLine1"))
     238 D ADDINN^C0XF2N(C0SGRF,NVADR,.ZR) ; create the vcard address
     239 K ZR
     240 ;
     241 ; create medical record subgraph
     242 ;
     243 S ZR("dcterms:identifier")=$G(@ZPN@("id@value"))
     244 S ZR("dcterms:title")="VistA Patient Record "_ZR("dcterms:identifier")
     245 S ZR("rdf:type")="sp:Code"
     246 S ZR("sp:system")="VistA Patient Record"
     247 D ADDINN^C0XF2N(C0SGRF,NMREC,.ZR) ; create medical record graph
     248 K ZR
     249 ;
     250 ; create name subgraph
     251 ;
     252 N ZNF,ZNL,ZNM,ZNAM
     253 S ZR("rdf:type")="v:Name"
     254 S ZX=$G(@ZPN@("givenNames@value")) ; first name and middle names
     255 S ZNF=$P(ZX," ",1) ; first name is first piece
     256 S ZNM=$P(ZX," ",2) ; middle names are the rest
     257 S ZR("v:additional-name")=ZNM
     258 S ZR("v:family-name")=$G(@ZPN@("familyName@value"))
     259 S ZR("v:given-name")=ZNF
     260 D ADDINN^C0XF2N(C0SGRF,NNAME,.ZR) ; insert name graph
     261 K ZR
     262 ;
     263 ; create telephone subgraph
     264 ;
     265 D  ;
     266 . S ZR("rdf:value")=$G(@ZPN@("telecomList.telecom@value"))
     267 . I ZR("rdf:value")="" Q  ; telephone number missing, no subgraph
     268 . S ZR("rdf:type")="v:Tel"
     269 . D ADDINN^C0XF2N(C0SGRF,NTEL,.ZR)
     270 K ZR
     271 ;
     272 ; load the demographics graph and all sub graphs to the triple store
     273 ;
     274 D BULKLOAD^C0XF2N(.C0XFDA)
     275 S GRTN=C0SGRF
     276 Q
     277 ;
     278AGES ; LIST ALL PATIENTS AND THEIR AGES
     279 N ZI S ZI=0
     280 F  S ZI=$O(^DPT(ZI)) Q:+ZI=0  D  ; FOR EVERY PATIENT
     281 . N ZDOB
     282 . S ZDOB=$$GET1^DIQ(2,ZI_",","DOB","I") ; FILEMAN DOB
     283 . N ZNAME
     284 . S ZNAME=$P(^DPT(ZI,0),U)
     285 . N ZSEX
     286 . S ZSEX=$$GET1^DIQ(2,ZI_",","SEX")
     287 . W !,"DFN:",ZI," ",ZNAME," AGE: ",+$$BRIEF^VWTIME(ZDOB)," YEAR OLD ",ZSEX
     288 Q
     289 ;
Note: See TracChangeset for help on using the changeset viewer.