source: ccr/trunk/p/GPLCCR.m@ 56

Last change on this file since 56 was 56, checked in by George Lilly, 16 years ago

Put ODIR in global to ease versioning and numbered lines in PARY

File size: 6.8 KB
RevLine 
[38]1GPLCCR ; CCDCCR/GPL - CCR MAIN PROCESSING; 6/6/08
[43]2 ;;0.1;CCDCCR;nopatch;noreleasedate
[41]3 ;
4 ; EXPORT A CCR
5 ;
[38]6EXPORT ; EXPORT ENTRY POINT FOR CCR
[41]7 ; Select a patient.
8 S DIC=2,DIC(0)="AEMQ" D ^DIC
[44]9 I Y<1 Q ; EXIT
[41]10 S DFN=$P(Y,U,1) ; SET THE PATIENT
11 N CCRGLO
12 D CCRRPC(.CCRGLO,DFN,"CCR","","","")
[50]13 S OARY=$NA(^TMP("GPLCCR",$J,DFN,"CCR",1))
[41]14 S ONAM="PAT_"_DFN_"_CCR_V1.xml"
[56]15 S ODIRGLB=$NA(^TMP("GPLCCR","ODIR"))
16 I '$D(@ODIRGLB) D ; IF NOT ODIR HAS BEEN SET
17 . S @ODIRGLB="/home/glilly/CCROUT"
18 . ;S @ODIRGLB="/home/cedwards/"
19 . ;S @ODIRGLB="/opt/wv/p/"
20 S ODIR=@ODIRGLB
[41]21 D OUTPUT^GPLXPATH(OARY,ONAM,ODIR)
22 Q
23 ;
[38]24CCRRPC(CCRGRTN,DFN,CCRPART,TIME1,TIME2,HDRARY) ;RPC ENTRY POINT FOR CCR OUTPUT
[41]25 ; CCRGRTN IS RETURN ARRAY PASSED BY NAME
26 ; DFN IS PATIENT IEN
27 ; CCRPART IS "CCR" FOR ENTIRE CCR, OR SECTION NAME FOR A PART
28 ; OF THE CCR BODY.. PARTS INCLUDE "PROBLEMS" "VITALS" ETC
29 ; TIME1 IS STARTING TIME TO INCLUDE - NULL MEANS ALL
30 ; TIME2 IS ENDING TIME TO INCLUDE TIME IS FILEMAN TIME
31 ; - NULL MEANS NOW
32 ; HDRARY IS THE HEADER ARRAY DEFINING THE "FROM" AND
33 ; "TO" VARIABLES
34 ; IF NULL WILL DEFAULT TO "FROM" DUZ AND "TO" DFN
35 S DEBUG=0
[50]36 S TGLOBAL=$NA(^TMP("GPLCCR",$J,"TEMPLATE")) ; GLOBAL FOR STORING TEMPLATE
37 S CCRGLO=$NA(^TMP("GPLCCR",$J,DFN,"CCR")) ; GLOBAL FOR BUILDING THE CCR
38 S ACTGLO=$NA(^TMP("GPLCCR",$J,DFN,"ACTORS")) ; GLOBAL FOR ALL ACTORS
[41]39 ; TO GET PART OF THE CCR RETURNED, PASS CCRPART="PROBLEMS" ETC
[50]40 S CCRGRTN=$NA(^TMP("GPLCCR",$J,DFN,CCRPART)) ; RTN GLO NM OF PART OR ALL
[41]41 D LOAD^GPLCCR0(TGLOBAL) ; LOAD THE CCR TEMPLATE
42 D CP^GPLXPATH(TGLOBAL,CCRGLO) ; COPY THE TEMPLATE TO CCR GLOBAL
43 ;
44 ; DELETE THE BODY, ACTORS AND SIGNATURES SECTIONS FROM GLOBAL
45 ; THESE WILL BE POPULATED AFTER CALLS TO THE XPATH ROUTINES
46 D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Body")
47 D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Actors")
48 D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Signatures")
49 I DEBUG F I=1:1:@CCRGLO@(0) W @CCRGLO@(I),!
50 ;
51 D HDRMAP(CCRGLO,DFN,HDRARY) ; MAP HEADER VARIABLES
52 ;
[50]53 K ^TMP("GPLCCR",$J,"CCRSTEP") ; KILL GLOBAL PRIOR TO ADDING TO IT
54 S CCRXTAB=$NA(^TMP("GPLCCR",$J,"CCRSTEP")) ; GLOBAL TO STORE CCR STEPS
[41]55 D INITSTPS(CCRXTAB) ; INITIALIZED CCR PROCESSING STEPS
56 N I,XI,TAG,RTN,CALL,XPATH,IXML,OXML,INXML,CCRBLD
57 F I=1:1:@CCRXTAB@(0) D ; PROCESS THE CCR BODY SECTIONS
58 . S XI=@CCRXTAB@(I) ; CALL COPONENTS TO PARSE
59 . S RTN=$P(XI,";",2) ; NAME OF ROUTINE TO CALL
60 . S TAG=$P(XI,";",1) ; LABEL INSIDE ROUTINE TO CALL
61 . S XPATH=$P(XI,";",3) ; XPATH TO XML TO PASS TO ROUTINE
62 . D QUERY^GPLXPATH(TGLOBAL,XPATH,"INXML") ; EXTRACT XML TO PASS
63 . S IXML="INXML"
64 . S OXML=$P(XI,";",4) ; ARRAY FOR SECTION VALUES
65 . ; W OXML,!
66 . S CALL="D "_TAG_"^"_RTN_"(IXML,DFN,OXML)" ; SETUP THE CALL
67 . W "RUNNING ",CALL,!
68 . X CALL
69 . ; NOW INSERT THE RESULTS IN THE CCR BUFFER
70 . D INSERT^GPLXPATH(CCRGLO,OXML,"//ContinuityOfCareRecord/Body")
71 . I DEBUG F GPLI=1:1:@OXML@(0) W @OXML@(GPLI),!
72 D ACTLST^GPLCCR(CCRGLO,ACTGLO) ; GEN THE ACTOR LIST
[45]73 D QUERY^GPLXPATH(TGLOBAL,"//ContinuityOfCareRecord/Actors","ACTT")
74 D EXTRACT^GPLACTORS("ACTT",ACTGLO,"ACTT2")
75 D INSINNER^GPLXPATH(CCRGLO,"ACTT2","//ContinuityOfCareRecord/Actors")
[52]76 N I,J,DONE S DONE=0
77 F I=0:0 D Q:DONE ; DELETE UNTIL ALL EMPTY ELEMENTS ARE GONE
78 . S J=$$TRIM^GPLXPATH(CCRGLO) ; DELETE EMPTY ELEMENTS
79 . W "TRIMMED",J,!
80 . I J=0 S DONE=1 ; DONE WHEN TRIM RETURNS FALSE
[41]81 Q
82 ;
83INITSTPS(TAB) ; INITIALIZE CCR PROCESSING STEPS
84 ; TAB IS PASSED BY NAME
[50]85 W "TAB= ",TAB,!
86 D PUSH^GPLXPATH(TAB,"EXTRACT;GPLPROBS;//ContinuityOfCareRecord/Body/Problems;^TMP(""GPLCCR"",$J,DFN,""PROBLEMS"")")
87 D PUSH^GPLXPATH(TAB,"EXTRACT;GPLVITALS;//ContinuityOfCareRecord/Body/VitalSigns;^TMP(""GPLCCR"",$J,DFN,""VITALS"")")
[41]88 Q
89 ;
[38]90HDRMAP(CXML,DFN,IHDR) ; MAP HEADER VARIABLES: FROM, TO ECT
[50]91 N VMAP S VMAP=$NA(^TMP("GPLCCR",$J,DFN,"HEADER"))
[41]92 ; K @VMAP
[51]93 S @VMAP@("DATETIME")=$$FMDTOUTC^CCRUTIL($$NOW^XLFDT,"DT")
[41]94 I IHDR="" D ; HEADER ARRAY IS NOT PROVIDED, USE DEFAULTS
95 . S @VMAP@("ACTORPATIENT")="ACTORPATIENT_"_DFN
96 . S @VMAP@("ACTORFROM")="ACTORPROVIDER_"_DUZ ; FROM DUZ - ???
[45]97 . S @VMAP@("ACTORFROM2")="ACTORSYSTEM_1" ; SECOND FROM IS THE SYSTEM
[41]98 . S @VMAP@("ACTORTO")="ACTORPATIENT_"_DFN ; FOR TEST PURPOSES,
99 . ; THIS IS THE USE CASE FOR THE PHR WHERE "TO" IS THE PATIENT
100 I IHDR'="" D ; HEADER VALUES ARE PROVIDED
101 . D CP^GPLXPATH(IHDR,VMAP) ; COPY HEADER VARIABLES TO MAP ARRAY
102 N CTMP
103 D MAP^GPLXPATH(CXML,VMAP,"CTMP")
104 D CP^GPLXPATH("CTMP",CXML)
105 Q
106 ;
107ACTLST(AXML,ACTRTN) ; RETURN THE ACTOR LIST FOR THE XML IN AXML
108 ; AXML AND ACTRTN ARE PASSED BY NAME
109 ; EACH ACTOR RECORD HAS 3 PARTS - IE IF OBJECTID=ACTORPATIENT_2
110 ; P1= OBJECTID - ACTORPATIENT_2
111 ; P2= OBJECT TYPE - PATIENT OR PROVIDER OR SOFTWARE
112 ;OR INSTITUTION
113 ; OR PERSON(IN PATIENT FILE IE NOK)
114 ; P3= IEN RECORD NUMBER FOR ACTOR - 2
115 N I,J,K,L
116 K @ACTRTN ; CLEAR RETURN ARRAY
117 F I=1:1:@AXML@(0) D ; SCAN ALL LINES
118 . I @AXML@(I)?.E1"<ActorID>".E D ; THERE IS AN ACTOR THIS LINE
119 . . S J=$P($P(@AXML@(I),"<ActorID>",2),"</ActorID>",1)
120 . . W "<ActorID>=>",J,!
121 . . I J'="" S K(J)="" ; HASHING ACTOR
122 . . ; TO GET RID OF DUPLICATES
123 S I="" ; GOING TO $O THROUGH THE HASH
124 F J=0:0 D Q:$O(K(I))=""
125 . S I=$O(K(I)) ; WALK THROUGH THE HASH OF ACTORS
126 . S $P(L,U,1)=I ; FIRST PIECE IS THE OBJECT ID
127 . S $P(L,U,2)=$P($P(I,"ACTOR",2),"_",1) ; ACTOR TYPE
128 . S $P(L,U,3)=$P(I,"_",2) ; IEN RECORD NUMBER FOR ACTOR
129 . D PUSH^GPLXPATH(ACTRTN,L) ; ADD THE ACTOR TO THE RETURN ARRAY
130 Q
131 ;
[43]132TEST ; RUN ALL THE TEST CASES
[41]133 D TESTALL^GPLUNIT("GPLCCR")
134 Q
135 ;
136ZTEST(WHICH) ; RUN ONE SET OF TESTS
137 N ZTMP
138 D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
139 D ZTEST^GPLUNIT(.ZTMP,WHICH)
140 Q
141 ;
[43]142TLIST ; LIST THE TESTS
[44]143 N ZTMP
[41]144 D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
145 D TLIST^GPLUNIT(.ZTMP)
146 Q
[44]147 ;
[43]148 ;;><TEST>
149 ;;><PROBLEMS>
150 ;;>>>K GPL S GPL=""
151 ;;>>>D CCRRPC^GPLCCR(.GPL,"2","PROBLEMS","","","")
152 ;;>>?@GPL@(@GPL@(0))["</Problems>"
153 ;;><VITALS>
154 ;;>>>K GPL S GPL=""
155 ;;>>>D CCRRPC^GPLCCR(.GPL,"2","VITALS","","","")
156 ;;>>?@GPL@(@GPL@(0))["</VitalSigns>"
157 ;;><CCR>
158 ;;>>>K GPL S GPL=""
159 ;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
160 ;;>>?@GPL@(@GPL@(0))["</ContinuityOfCareRecord>"
161 ;;><ACTLST>
162 ;;>>>K GPL S GPL=""
163 ;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
164 ;;>>>D ACTLST^GPLCCR(GPL,"ACTTEST")
[45]165 ;;><ACTORS>
166 ;;>>>D ZTEST^GPLCCR("ACTLST")
167 ;;>>>D QUERY^GPLXPATH(TGLOBAL,"//ContinuityOfCareRecord/Actors","G2")
168 ;;>>>D EXTRACT^GPLACTORS("G2","ACTTEST","G3")
[46]169 ;;>>?G3(G3(0))["</Actors>"
[52]170 ;;><TRIM>
171 ;;>>>D ZTEST^GPLCCR("CCR")
172 ;;>>>W $$TRIM^GPLXPATH(CCRGLO)
[43]173 ;;></TEST>
Note: See TracBrowser for help on using the repository browser.