switch proccessing of vitals and problems so CCR would validate
added date time for ccr cleaned up template ccr (more to come) more work done in vitals section
This commit is contained in:
parent
e2223f14aa
commit
cd6dc2b91d
13
p/CCRUTIL.m
13
p/CCRUTIL.m
|
@ -1,9 +1,9 @@
|
|||
CCRUTIL ;CCRCCD/SMH - Various Utilites for generating the CCR/CCD;06/15/08
|
||||
CCRUTIL ;CCRCCD/SMH - Various Utilites for generating the CCR/CCD;06/15/08
|
||||
;;0.1;CCRCCD;;Jun 15, 2008;
|
||||
|
||||
|
||||
W "No Entry at Top!" Q
|
||||
|
||||
FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic
|
||||
|
||||
FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic
|
||||
; FORMAT is Format of Date. Can be either D (Day) or DT (Date and Time)
|
||||
; If not passed, or passed incorrectly, it's assumed that it is D.
|
||||
; FM Date format is "YYYMMDD.HHMMSS" HHMMSS may not be supplied.
|
||||
|
@ -15,12 +15,13 @@ FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrins
|
|||
S D=$E(DATE,6,7)
|
||||
S H=$E(DATE,9,10)
|
||||
S MM=$E(DATE,11,12)
|
||||
S S=$E(DATE,12,13)
|
||||
S S=$E(DATE,13,14)
|
||||
S OFF=$$TZ^XLFDT ; See Kernel Manual for documentation.
|
||||
; If H, MM and S are empty, it means that the FM date didn't supply the time.
|
||||
; In this case, set H, MM and S to "00"
|
||||
S:('$L(H)&'$L(MM)&'$L(S)) (H,MM,S)="00"
|
||||
S UTC=Y_"-"_M_"-"_D_"T"_H_":"_MM_":"_S_OFF
|
||||
I S="" S UTC=Y_"-"_M_"-"_D_"T"_H_":"_MM_OFF
|
||||
E S UTC=Y_"-"_M_"-"_D_"T"_H_":"_MM_":"_S_OFF
|
||||
I $L($G(FORMAT)),FORMAT="DT" Q UTC ; Date with time.
|
||||
E Q $P(UTC,"T")
|
||||
;
|
||||
|
|
305
p/GPLCCR.m
305
p/GPLCCR.m
|
@ -1,152 +1,153 @@
|
|||
GPLCCR ; CCDCCR/GPL - CCR MAIN PROCESSING; 6/6/08
|
||||
;;0.1;CCDCCR;nopatch;noreleasedate
|
||||
;
|
||||
; EXPORT A CCR
|
||||
;
|
||||
EXPORT ; EXPORT ENTRY POINT FOR CCR
|
||||
; Select a patient.
|
||||
S DIC=2,DIC(0)="AEMQ" D ^DIC
|
||||
I Y<1 Q ; EXIT
|
||||
S DFN=$P(Y,U,1) ; SET THE PATIENT
|
||||
N CCRGLO
|
||||
D CCRRPC(.CCRGLO,DFN,"CCR","","","")
|
||||
S OARY=$NA(^TMP($J,DFN,"CCR",1))
|
||||
S ONAM="PAT_"_DFN_"_CCR_V1.xml"
|
||||
S ODIR="/home/glilly/CCROUT"
|
||||
;S ODIR="/home/cedwards/"
|
||||
D OUTPUT^GPLXPATH(OARY,ONAM,ODIR)
|
||||
Q
|
||||
;
|
||||
CCRRPC(CCRGRTN,DFN,CCRPART,TIME1,TIME2,HDRARY) ;RPC ENTRY POINT FOR CCR OUTPUT
|
||||
; CCRGRTN IS RETURN ARRAY PASSED BY NAME
|
||||
; DFN IS PATIENT IEN
|
||||
; CCRPART IS "CCR" FOR ENTIRE CCR, OR SECTION NAME FOR A PART
|
||||
; OF THE CCR BODY.. PARTS INCLUDE "PROBLEMS" "VITALS" ETC
|
||||
; TIME1 IS STARTING TIME TO INCLUDE - NULL MEANS ALL
|
||||
; TIME2 IS ENDING TIME TO INCLUDE TIME IS FILEMAN TIME
|
||||
; - NULL MEANS NOW
|
||||
; HDRARY IS THE HEADER ARRAY DEFINING THE "FROM" AND
|
||||
; "TO" VARIABLES
|
||||
; IF NULL WILL DEFAULT TO "FROM" DUZ AND "TO" DFN
|
||||
S DEBUG=0
|
||||
S TGLOBAL=$NA(^TMP($J,"TEMPLATE")) ; GLOBAL FOR STORING TEMPLATE
|
||||
S CCRGLO=$NA(^TMP($J,DFN,"CCR")) ; GLOBAL FOR BUILDING THE CCR
|
||||
S ACTGLO=$NA(^TMP($J,DFN,"ACTORS")); GLOBAL FOR ALL ACTORS
|
||||
; TO GET PART OF THE CCR RETURNED, PASS CCRPART="PROBLEMS" ETC
|
||||
S CCRGRTN=$NA(^TMP($J,DFN,CCRPART)) ; RTN GLO NM OF PART OR ALL
|
||||
D LOAD^GPLCCR0(TGLOBAL) ; LOAD THE CCR TEMPLATE
|
||||
D CP^GPLXPATH(TGLOBAL,CCRGLO) ; COPY THE TEMPLATE TO CCR GLOBAL
|
||||
;
|
||||
; DELETE THE BODY, ACTORS AND SIGNATURES SECTIONS FROM GLOBAL
|
||||
; THESE WILL BE POPULATED AFTER CALLS TO THE XPATH ROUTINES
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Body")
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Actors")
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Signatures")
|
||||
I DEBUG F I=1:1:@CCRGLO@(0) W @CCRGLO@(I),!
|
||||
;
|
||||
D HDRMAP(CCRGLO,DFN,HDRARY) ; MAP HEADER VARIABLES
|
||||
;
|
||||
K ^TMP($J,"CCRSTEP") ; KILL GLOBAL PRIOR TO ADDING TO IT
|
||||
S CCRXTAB="^TMP($J,""CCRSTEP"")" ; GLOBAL TO STORE CCR STEPS
|
||||
D INITSTPS(CCRXTAB) ; INITIALIZED CCR PROCESSING STEPS
|
||||
N I,XI,TAG,RTN,CALL,XPATH,IXML,OXML,INXML,CCRBLD
|
||||
F I=1:1:@CCRXTAB@(0) D ; PROCESS THE CCR BODY SECTIONS
|
||||
. S XI=@CCRXTAB@(I) ; CALL COPONENTS TO PARSE
|
||||
. S RTN=$P(XI,";",2) ; NAME OF ROUTINE TO CALL
|
||||
. S TAG=$P(XI,";",1) ; LABEL INSIDE ROUTINE TO CALL
|
||||
. S XPATH=$P(XI,";",3) ; XPATH TO XML TO PASS TO ROUTINE
|
||||
. D QUERY^GPLXPATH(TGLOBAL,XPATH,"INXML") ; EXTRACT XML TO PASS
|
||||
. S IXML="INXML"
|
||||
. S OXML=$P(XI,";",4) ; ARRAY FOR SECTION VALUES
|
||||
. ; W OXML,!
|
||||
. S CALL="D "_TAG_"^"_RTN_"(IXML,DFN,OXML)" ; SETUP THE CALL
|
||||
. W "RUNNING ",CALL,!
|
||||
. X CALL
|
||||
. ; NOW INSERT THE RESULTS IN THE CCR BUFFER
|
||||
. D INSERT^GPLXPATH(CCRGLO,OXML,"//ContinuityOfCareRecord/Body")
|
||||
. I DEBUG F GPLI=1:1:@OXML@(0) W @OXML@(GPLI),!
|
||||
D ACTLST^GPLCCR(CCRGLO,ACTGLO) ; GEN THE ACTOR LIST
|
||||
Q
|
||||
;
|
||||
INITSTPS(TAB) ; INITIALIZE CCR PROCESSING STEPS
|
||||
; TAB IS PASSED BY NAME
|
||||
; W "TAB= ",TAB,!
|
||||
D PUSH^GPLXPATH(TAB,"EXTRACT;GPLVITALS;//ContinuityOfCareRecord/Body/VitalSigns;^TMP($J,DFN,""VITALS"")")
|
||||
D PUSH^GPLXPATH(TAB,"EXTRACT;GPLPROBS;//ContinuityOfCareRecord/Body/Problems;^TMP($J,DFN,""PROBLEMS"")")
|
||||
Q
|
||||
;
|
||||
HDRMAP(CXML,DFN,IHDR) ; MAP HEADER VARIABLES: FROM, TO ECT
|
||||
N VMAP S VMAP=$NA(^TMP($J,DFN,"HEADER"))
|
||||
; K @VMAP
|
||||
I IHDR="" D ; HEADER ARRAY IS NOT PROVIDED, USE DEFAULTS
|
||||
. S @VMAP@("ACTORPATIENT")="ACTORPATIENT_"_DFN
|
||||
. S @VMAP@("ACTORFROM")="ACTORPROVIDER_"_DUZ ; FROM DUZ - ???
|
||||
. S @VMAP@("ACTORFROM2")="ACTORPROVIDER_"_DUZ ; NEED BETTER WAY
|
||||
. S @VMAP@("ACTORTO")="ACTORPATIENT_"_DFN ; FOR TEST PURPOSES,
|
||||
. ; THIS IS THE USE CASE FOR THE PHR WHERE "TO" IS THE PATIENT
|
||||
I IHDR'="" D ; HEADER VALUES ARE PROVIDED
|
||||
. D CP^GPLXPATH(IHDR,VMAP) ; COPY HEADER VARIABLES TO MAP ARRAY
|
||||
N CTMP
|
||||
D MAP^GPLXPATH(CXML,VMAP,"CTMP")
|
||||
D CP^GPLXPATH("CTMP",CXML)
|
||||
Q
|
||||
;
|
||||
ACTLST(AXML,ACTRTN) ; RETURN THE ACTOR LIST FOR THE XML IN AXML
|
||||
; AXML AND ACTRTN ARE PASSED BY NAME
|
||||
; EACH ACTOR RECORD HAS 3 PARTS - IE IF OBJECTID=ACTORPATIENT_2
|
||||
; P1= OBJECTID - ACTORPATIENT_2
|
||||
; P2= OBJECT TYPE - PATIENT OR PROVIDER OR SOFTWARE
|
||||
; OR INSTITUTION
|
||||
; OR PERSON(IN PATIENT FILE IE NOK)
|
||||
; P3= IEN RECORD NUMBER FOR ACTOR - 2
|
||||
N I,J,K,L
|
||||
K @ACTRTN ; CLEAR RETURN ARRAY
|
||||
F I=1:1:@AXML@(0) D ; SCAN ALL LINES
|
||||
. I @AXML@(I)?.E1"<ActorID>".E D ; THERE IS AN ACTOR THIS LINE
|
||||
. . S J=$P($P(@AXML@(I),"<ActorID>",2),"</ActorID>",1)
|
||||
. . W "<ActorID>=>",J,!
|
||||
. . I J'="" S K(J)="" ; HASHING ACTOR
|
||||
. . ; TO GET RID OF DUPLICATES
|
||||
S I="" ; GOING TO $O THROUGH THE HASH
|
||||
F J=0:0 D Q:$O(K(I))=""
|
||||
. S I=$O(K(I)) ; WALK THROUGH THE HASH OF ACTORS
|
||||
. S $P(L,U,1)=I ; FIRST PIECE IS THE OBJECT ID
|
||||
. S $P(L,U,2)=$P($P(I,"ACTOR",2),"_",1) ; ACTOR TYPE
|
||||
. S $P(L,U,3)=$P(I,"_",2) ; IEN RECORD NUMBER FOR ACTOR
|
||||
. D PUSH^GPLXPATH(ACTRTN,L) ; ADD THE ACTOR TO THE RETURN ARRAY
|
||||
Q
|
||||
;
|
||||
TEST ; RUN ALL THE TEST CASES
|
||||
D TESTALL^GPLUNIT("GPLCCR")
|
||||
Q
|
||||
;
|
||||
ZTEST(WHICH) ; RUN ONE SET OF TESTS
|
||||
N ZTMP
|
||||
D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
|
||||
D ZTEST^GPLUNIT(.ZTMP,WHICH)
|
||||
Q
|
||||
;
|
||||
TLIST ; LIST THE TESTS
|
||||
N ZTMP
|
||||
D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
|
||||
D TLIST^GPLUNIT(.ZTMP)
|
||||
Q
|
||||
;
|
||||
;;><TEST>
|
||||
;;><PROBLEMS>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","PROBLEMS","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</Problems>"
|
||||
;;><VITALS>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","VITALS","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</VitalSigns>"
|
||||
;;><CCR>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</ContinuityOfCareRecord>"
|
||||
;;><ACTLST>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
|
||||
;;>>>D ACTLST^GPLCCR(GPL,"ACTTEST")
|
||||
;;></TEST>
|
||||
GPLCCR ; CCDCCR/GPL - CCR MAIN PROCESSING; 6/6/08
|
||||
;;0.1;CCDCCR;nopatch;noreleasedate
|
||||
;
|
||||
; EXPORT A CCR
|
||||
;
|
||||
EXPORT ; EXPORT ENTRY POINT FOR CCR
|
||||
; Select a patient.
|
||||
S DIC=2,DIC(0)="AEMQ" D ^DIC
|
||||
I Y<1 Q ; EXIT
|
||||
S DFN=$P(Y,U,1) ; SET THE PATIENT
|
||||
N CCRGLO
|
||||
D CCRRPC(.CCRGLO,DFN,"CCR","","","")
|
||||
S OARY=$NA(^TMP($J,DFN,"CCR",1))
|
||||
S ONAM="PAT_"_DFN_"_CCR_V1.xml"
|
||||
S ODIR="/home/glilly/CCROUT"
|
||||
;S ODIR="/home/cedwards/"
|
||||
D OUTPUT^GPLXPATH(OARY,ONAM,ODIR)
|
||||
Q
|
||||
;
|
||||
CCRRPC(CCRGRTN,DFN,CCRPART,TIME1,TIME2,HDRARY) ;RPC ENTRY POINT FOR CCR OUTPUT
|
||||
; CCRGRTN IS RETURN ARRAY PASSED BY NAME
|
||||
; DFN IS PATIENT IEN
|
||||
; CCRPART IS "CCR" FOR ENTIRE CCR, OR SECTION NAME FOR A PART
|
||||
; OF THE CCR BODY.. PARTS INCLUDE "PROBLEMS" "VITALS" ETC
|
||||
; TIME1 IS STARTING TIME TO INCLUDE - NULL MEANS ALL
|
||||
; TIME2 IS ENDING TIME TO INCLUDE TIME IS FILEMAN TIME
|
||||
; - NULL MEANS NOW
|
||||
; HDRARY IS THE HEADER ARRAY DEFINING THE "FROM" AND
|
||||
; "TO" VARIABLES
|
||||
; IF NULL WILL DEFAULT TO "FROM" DUZ AND "TO" DFN
|
||||
S DEBUG=0
|
||||
S TGLOBAL=$NA(^TMP($J,"TEMPLATE")) ; GLOBAL FOR STORING TEMPLATE
|
||||
S CCRGLO=$NA(^TMP($J,DFN,"CCR")) ; GLOBAL FOR BUILDING THE CCR
|
||||
S ACTGLO=$NA(^TMP($J,DFN,"ACTORS")); GLOBAL FOR ALL ACTORS
|
||||
; TO GET PART OF THE CCR RETURNED, PASS CCRPART="PROBLEMS" ETC
|
||||
S CCRGRTN=$NA(^TMP($J,DFN,CCRPART)) ; RTN GLO NM OF PART OR ALL
|
||||
D LOAD^GPLCCR0(TGLOBAL) ; LOAD THE CCR TEMPLATE
|
||||
D CP^GPLXPATH(TGLOBAL,CCRGLO) ; COPY THE TEMPLATE TO CCR GLOBAL
|
||||
;
|
||||
; DELETE THE BODY, ACTORS AND SIGNATURES SECTIONS FROM GLOBAL
|
||||
; THESE WILL BE POPULATED AFTER CALLS TO THE XPATH ROUTINES
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Body")
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Actors")
|
||||
D REPLACE^GPLXPATH(CCRGLO,"","//ContinuityOfCareRecord/Signatures")
|
||||
I DEBUG F I=1:1:@CCRGLO@(0) W @CCRGLO@(I),!
|
||||
;
|
||||
D HDRMAP(CCRGLO,DFN,HDRARY) ; MAP HEADER VARIABLES
|
||||
;
|
||||
K ^TMP($J,"CCRSTEP") ; KILL GLOBAL PRIOR TO ADDING TO IT
|
||||
S CCRXTAB="^TMP($J,""CCRSTEP"")" ; GLOBAL TO STORE CCR STEPS
|
||||
D INITSTPS(CCRXTAB) ; INITIALIZED CCR PROCESSING STEPS
|
||||
N I,XI,TAG,RTN,CALL,XPATH,IXML,OXML,INXML,CCRBLD
|
||||
F I=1:1:@CCRXTAB@(0) D ; PROCESS THE CCR BODY SECTIONS
|
||||
. S XI=@CCRXTAB@(I) ; CALL COPONENTS TO PARSE
|
||||
. S RTN=$P(XI,";",2) ; NAME OF ROUTINE TO CALL
|
||||
. S TAG=$P(XI,";",1) ; LABEL INSIDE ROUTINE TO CALL
|
||||
. S XPATH=$P(XI,";",3) ; XPATH TO XML TO PASS TO ROUTINE
|
||||
. D QUERY^GPLXPATH(TGLOBAL,XPATH,"INXML") ; EXTRACT XML TO PASS
|
||||
. S IXML="INXML"
|
||||
. S OXML=$P(XI,";",4) ; ARRAY FOR SECTION VALUES
|
||||
. ; W OXML,!
|
||||
. S CALL="D "_TAG_"^"_RTN_"(IXML,DFN,OXML)" ; SETUP THE CALL
|
||||
. W "RUNNING ",CALL,!
|
||||
. X CALL
|
||||
. ; NOW INSERT THE RESULTS IN THE CCR BUFFER
|
||||
. D INSERT^GPLXPATH(CCRGLO,OXML,"//ContinuityOfCareRecord/Body")
|
||||
. I DEBUG F GPLI=1:1:@OXML@(0) W @OXML@(GPLI),!
|
||||
D ACTLST^GPLCCR(CCRGLO,ACTGLO) ; GEN THE ACTOR LIST
|
||||
Q
|
||||
;
|
||||
INITSTPS(TAB) ; INITIALIZE CCR PROCESSING STEPS
|
||||
; TAB IS PASSED BY NAME
|
||||
; W "TAB= ",TAB,!
|
||||
D PUSH^GPLXPATH(TAB,"EXTRACT;GPLPROBS;//ContinuityOfCareRecord/Body/Problems;^TMP($J,DFN,""PROBLEMS"")")
|
||||
D PUSH^GPLXPATH(TAB,"EXTRACT;GPLVITALS;//ContinuityOfCareRecord/Body/VitalSigns;^TMP($J,DFN,""VITALS"")")
|
||||
Q
|
||||
;
|
||||
HDRMAP(CXML,DFN,IHDR) ; MAP HEADER VARIABLES: FROM, TO ECT
|
||||
N VMAP S VMAP=$NA(^TMP($J,DFN,"HEADER"))
|
||||
; K @VMAP
|
||||
S @VMAP@("DATETIME")=$$FMDTOUTC^CCRUTIL($$FMTHL7^XLFDT($$NOW^XLFDT),"DT")
|
||||
I IHDR="" D ; HEADER ARRAY IS NOT PROVIDED, USE DEFAULTS
|
||||
. S @VMAP@("ACTORPATIENT")="ACTORPATIENT_"_DFN
|
||||
. S @VMAP@("ACTORFROM")="ACTORPROVIDER_"_DUZ ; FROM DUZ - ???
|
||||
. S @VMAP@("ACTORFROM2")="ACTORPROVIDER_"_DUZ ; NEED BETTER WAY
|
||||
. S @VMAP@("ACTORTO")="ACTORPATIENT_"_DFN ; FOR TEST PURPOSES,
|
||||
. ; THIS IS THE USE CASE FOR THE PHR WHERE "TO" IS THE PATIENT
|
||||
I IHDR'="" D ; HEADER VALUES ARE PROVIDED
|
||||
. D CP^GPLXPATH(IHDR,VMAP) ; COPY HEADER VARIABLES TO MAP ARRAY
|
||||
N CTMP
|
||||
D MAP^GPLXPATH(CXML,VMAP,"CTMP")
|
||||
D CP^GPLXPATH("CTMP",CXML)
|
||||
Q
|
||||
;
|
||||
ACTLST(AXML,ACTRTN) ; RETURN THE ACTOR LIST FOR THE XML IN AXML
|
||||
; AXML AND ACTRTN ARE PASSED BY NAME
|
||||
; EACH ACTOR RECORD HAS 3 PARTS - IE IF OBJECTID=ACTORPATIENT_2
|
||||
; P1= OBJECTID - ACTORPATIENT_2
|
||||
; P2= OBJECT TYPE - PATIENT OR PROVIDER OR SOFTWARE
|
||||
; OR INSTITUTION
|
||||
; OR PERSON(IN PATIENT FILE IE NOK)
|
||||
; P3= IEN RECORD NUMBER FOR ACTOR - 2
|
||||
N I,J,K,L
|
||||
K @ACTRTN ; CLEAR RETURN ARRAY
|
||||
F I=1:1:@AXML@(0) D ; SCAN ALL LINES
|
||||
. I @AXML@(I)?.E1"<ActorID>".E D ; THERE IS AN ACTOR THIS LINE
|
||||
. . S J=$P($P(@AXML@(I),"<ActorID>",2),"</ActorID>",1)
|
||||
. . W "<ActorID>=>",J,!
|
||||
. . I J'="" S K(J)="" ; HASHING ACTOR
|
||||
. . ; TO GET RID OF DUPLICATES
|
||||
S I="" ; GOING TO $O THROUGH THE HASH
|
||||
F J=0:0 D Q:$O(K(I))=""
|
||||
. S I=$O(K(I)) ; WALK THROUGH THE HASH OF ACTORS
|
||||
. S $P(L,U,1)=I ; FIRST PIECE IS THE OBJECT ID
|
||||
. S $P(L,U,2)=$P($P(I,"ACTOR",2),"_",1) ; ACTOR TYPE
|
||||
. S $P(L,U,3)=$P(I,"_",2) ; IEN RECORD NUMBER FOR ACTOR
|
||||
. D PUSH^GPLXPATH(ACTRTN,L) ; ADD THE ACTOR TO THE RETURN ARRAY
|
||||
Q
|
||||
;
|
||||
TEST ; RUN ALL THE TEST CASES
|
||||
D TESTALL^GPLUNIT("GPLCCR")
|
||||
Q
|
||||
;
|
||||
ZTEST(WHICH) ; RUN ONE SET OF TESTS
|
||||
N ZTMP
|
||||
D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
|
||||
D ZTEST^GPLUNIT(.ZTMP,WHICH)
|
||||
Q
|
||||
;
|
||||
TLIST ; LIST THE TESTS
|
||||
N ZTMP
|
||||
D ZLOAD^GPLUNIT("ZTMP","GPLCCR")
|
||||
D TLIST^GPLUNIT(.ZTMP)
|
||||
Q
|
||||
;
|
||||
;;><TEST>
|
||||
;;><PROBLEMS>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","PROBLEMS","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</Problems>"
|
||||
;;><VITALS>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","VITALS","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</VitalSigns>"
|
||||
;;><CCR>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
|
||||
;;>>?@GPL@(@GPL@(0))["</ContinuityOfCareRecord>"
|
||||
;;><ACTLST>
|
||||
;;>>>K GPL S GPL=""
|
||||
;;>>>D CCRRPC^GPLCCR(.GPL,"2","CCR","","","")
|
||||
;;>>>D ACTLST^GPLCCR(GPL,"ACTTEST")
|
||||
;;></TEST>
|
1098
p/GPLCCR0.m
1098
p/GPLCCR0.m
File diff suppressed because it is too large
Load Diff
132
p/GPLVITALS.m
132
p/GPLVITALS.m
|
@ -1,49 +1,85 @@
|
|||
GPLVITALS ; CCDCCR/GPL - CCR/CCD PROCESSING FOR VITALS ; 6/6/08
|
||||
;;0.1;CCDCCR;nopatch;noreleasedate
|
||||
GPLVITALS ; CCDCCR/CJE - CCR/CCD PROCESSING FOR VITALS ; 07/03/08
|
||||
;;0.1;CCDCCR;;JUL 3,2008;
|
||||
EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT PROBLEMS INTO PROVIDED XML TEMPLATE
|
||||
;
|
||||
; VITXML AND OUTXML ARE PASSED BY NAME SO GLOBALS CAN BE USED
|
||||
; IVITXML WILL CONTAIN ONLY THE VITALS SECTION OF THE OVERALL TEMPLATE
|
||||
;
|
||||
N VITRSLT,J,K,VITPTMP,X,VITVMAP,TBUF
|
||||
D VITALS^ORQQVI(.VITRSLT,DFN,"","")
|
||||
I '$D(VITRSLT(1)) W "ERROR RUNNINIG VITALS RPC",! Q
|
||||
;ZWR RPCRSLT
|
||||
S VITTVMAP=$NA(^TMP($J,"VITALS"))
|
||||
S VITTARYTMP=$NA(^TMP($J,"VITALARYTMP"))
|
||||
F J=1:1:VITRSLT(1) D ; FOR EACH VITAL IN THE LIST
|
||||
. I $D(VITRSLT(J)) D
|
||||
. . S VITVMAP=$NA(@VITTVMAP@(J))
|
||||
. . K @VITVMAP
|
||||
. . I DEBUG W "VMAP= ",VMAP,!
|
||||
. . S VITPTMP=VITRSLT(J) ; PULL OUT VITAL FROM RPC RETURN ARRAY
|
||||
. . S @VITVMAP@("DATAOBJECTID")="VITAL"_J ; UNIQUE OBJID FOR VITAL
|
||||
. . I $P(VITPTMP,U,2)="HT" D
|
||||
. . . S @VITVMAP@("HEIGHTWEIGHTDATATIME")=$P(VITPTMP,U,4)
|
||||
. . . S @VITVMAP@("HEIGHTWEIGHTSOURCE")=$P(VITPTMP,U,7)
|
||||
. . . S @VITVMAP@("HEIGHTSOURCEID")=$P(VITPTMP,U,1)
|
||||
. . . S @VITVMAP@("HEIGHTINCHES")=$P(VITPTMP,U,3)
|
||||
. . I $P(VITPTMP,U,2)="WT" D
|
||||
. . . S @VITVMAP@("WEIGHTSOURCEID")=$P(VITPTMP,U,1)
|
||||
. . . S @VITVMAP@("WEIGHTLBS")=$P(VITPTMP,U,3)
|
||||
. . S VITARYTMP=$NA(@VITTARYTMP@(J))
|
||||
. . K @VITARYTMP
|
||||
. . D MAP^GPLXPATH(VITXML,VITVMAP,VITARYTMP)
|
||||
. . I J=1 D ; FIRST ONE IS JUST A COPY
|
||||
. . . ; W "FIRST ONE",!
|
||||
. . . D CP^GPLXPATH(VITARYTMP,VITOUTXML)
|
||||
. . . ; W "OUTXML ",OUTXML,!
|
||||
. . I J>1 D ; AFTER THE FIRST, INSERT INNER XML
|
||||
. . . D INSINNER^GPLXPATH(VITOUTXML,VITARYTMP)
|
||||
;ZWR ^TMP($J,"VITALS",*)
|
||||
;ZWR ^TMP($J,"VITALARYTMP",*) ; SHOW THE RESULTS
|
||||
; W "OUT OF FOR LOOP.",!
|
||||
;ZWR
|
||||
; ZWR @OUTXML
|
||||
; $$HTML^DILF(
|
||||
N VITTMP,I
|
||||
D MISSING^GPLXPATH(VITXML,"VITTMP") ; SEARCH XML FOR MISSING VARS
|
||||
I VITTMP(0)>0 D ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
|
||||
. W "VITALS MISSING ",!
|
||||
. F I=1:1:VITTMP(0) W VITTMP(I),!
|
||||
Q
|
||||
;
|
||||
; VITXML AND OUTXML ARE PASSED BY NAME SO GLOBALS CAN BE USED
|
||||
; IVITXML WILL CONTAIN ONLY THE VITALS SECTION OF THE OVERALL TEMPLATE
|
||||
;
|
||||
N VITRSLT,J,K,VITPTMP,X,VITVMAP,TBUF
|
||||
D VITALS^ORQQVI(.VITRSLT,DFN,"","")
|
||||
I '$D(VITRSLT(1)) W "ERROR RUNNINIG VITALS RPC",! Q
|
||||
; ZWR RPCRSLT
|
||||
S VITTVMAP=$NA(^TMP($J,"VITALS"))
|
||||
S VITTARYTMP=$NA(^TMP($J,"VITALARYTMP"))
|
||||
F J=1:1:VITRSLT(1) D ; FOR EACH VITAL IN THE LIST
|
||||
. I $D(VITRSLT(J)) D
|
||||
. . S VITVMAP=$NA(@VITTVMAP@(J))
|
||||
. . K @VITVMAP
|
||||
. . I DEBUG W "VMAP= ",VMAP,!
|
||||
. . S VITPTMP=VITRSLT(J) ; PULL OUT VITAL FROM RPC RETURN ARRAY
|
||||
. . S @VITVMAP@("VITALSIGNSDATAOBJECTID")="VITAL"_J ; UNIQUE OBJID FOR VITAL
|
||||
. . I $P(VITPTMP,U,2)="HT" D
|
||||
. . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
|
||||
. . . W "CONVERTED DATE TIME: ",@VITVMAP@("VITALSIGNSEXACTDATETIME"),!
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="HEIGHT"
|
||||
. . . ;S @VITVMAP@("VITALSIGNSSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="HEIGHT"
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVERSION")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="in"
|
||||
. . . ;S @VITVMAP@("HEIGHTWEIGHTSOURCE")=$P(VITPTMP,U,7)
|
||||
. . E I $P(VITPTMP,U,2)="WT" D
|
||||
. . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="WEIGHT"
|
||||
. . . ;S @VITVMAP@("VITALSIGNSSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="WEIGHT"
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVERSION")=""
|
||||
. . . ;S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="lbs"
|
||||
. . E D
|
||||
. . . ;W "IN VITAL: OTHER",!
|
||||
. . . S @VITVMAP@("VITALSIGNSDATETIMETYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSEXACTDATETIME")=$$FMDTOUTC^CCRUTIL($P(VITPTMP,U,4),"DT")
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="OTHER VITAL"
|
||||
. . . S @VITVMAP@("VITALSIGNSSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTOBJECTID")="VITALTEST"_J
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTTYPETEXT")="OBSERVED"
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONTEXT")="OTHER"
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVALUE")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODINGSYSTEM")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSDESCRIPTIONCODEVERSION")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTSOURCEACTORID")=""
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTVALUE")=$P(VITPTMP,U,3)
|
||||
. . . S @VITVMAP@("VITALSIGNSTESTRESULTUNIT")="UNKNOWN"
|
||||
. . . ;S @VITVMAP@("HEIGHTWEIGHTSOURCE")=$P(VITPTMP,U,7)
|
||||
. . S VITARYTMP=$NA(@VITTARYTMP@(J))
|
||||
. . K @VITARYTMP
|
||||
. . D MAP^GPLXPATH(VITXML,VITVMAP,VITARYTMP)
|
||||
. . I J=1 D ; FIRST ONE IS JUST A COPY
|
||||
. . . ; W "FIRST ONE",!
|
||||
. . . D CP^GPLXPATH(VITARYTMP,VITOUTXML)
|
||||
. . . ; W "OUTXML ",OUTXML,!
|
||||
. . I J>1 D ; AFTER THE FIRST, INSERT INNER XML
|
||||
. . . D INSINNER^GPLXPATH(VITOUTXML,VITARYTMP)
|
||||
; ZWR ^TMP($J,"VITALS",*)
|
||||
; ZWR ^TMP($J,"VITALARYTMP",*) ; SHOW THE RESULTS
|
||||
; ZWR @OUTXML
|
||||
N VITTMP,I
|
||||
D MISSING^GPLXPATH(VITOUTXML,"VITTMP") ; SEARCH XML FOR MISSING VARS
|
||||
I VITTMP(0)>0 D ; IF THERE ARE MISSING VARS - MARKED AS @@X@@
|
||||
. W "VITALS MISSING ",!
|
||||
. F I=1:1:VITTMP(0) W VITTMP(I),!
|
||||
Q
|
||||
;
|
||||
|
|
Loading…
Reference in New Issue