KBAIVPR ; GPL - VPR viewing routines ; 4/24/13 6:03pm ;;0.1;C0Q;nopatch;noreleasedate; ;Copyright 2013 George Lilly. Licensed Apache 2 ; Q ; SELPART() ; extrinsic which returns the part of the VPR selected N ZT S ZT(1)="all" S ZT(2)="demographics" S ZT(3)="reactions" S ZT(4)="problems" S ZT(5)="vitals" S ZT(6)="labs" S ZT(7)="meds" S ZT(8)="immunizations" S ZT(9)="observation" S ZT(10)="visits" S ZT(11)="appointments" S ZT(12)="documents" S ZT(13)="procedures" S ZT(14)="consults" S ZT(15)="flags" S ZT(16)="factors" S ZT(17)="skinTests" S ZT(18)="exams" S ZT(19)="education" S ZT(20)="insurance" K DIR S DIR(0)="SO^" F ZI=1:1:20 S DIR(0)=DIR(0)_ZI_":"_ZT(ZI)_";" S DIR("B")=1 S DIR("L")="Please select clinical category to view: " S DIR("L",1)="1 all 6 labs 11 appointments 16 factors" S DIR("L",2)="2 demographics 7 meds 12 documents 17 skinTests" S DIR("L",3)="3 reactions 8 immunizations 13 procedures 18 exams" S DIR("L",4)="4 problems 9 observation 14 consults 19 education" S DIR("L",5)="5 vitals 10 visits 15 flags 20 insurance" D ^DIR Q ZT(X) ; SELPART2() ; extrinsic which returns the part of the NHIN extract selected N ZT S ZT(1)="all" S ZT(2)="patient" S ZT(3)="allergy" S ZT(4)="problem" S ZT(5)="vital" S ZT(6)="lab" S ZT(7)="med" S ZT(8)="immunization" S ZT(9)="visit" S ZT(10)="appointment" S ZT(11)="procedure" K DIR S DIR(0)="SO^" F ZI=1:1:11 S DIR(0)=DIR(0)_ZI_":"_ZT(ZI)_";" S DIR("B")=1 S DIR("L")="Please select clinical category to view: " S DIR("L",1)="1 all 6 lab 11 procedure" S DIR("L",2)="2 patient 7 med " S DIR("L",3)="3 allergy 8 immunization" S DIR("L",4)="4 problems 9 visit" S DIR("L",5)="5 vitals 10 appointment" D ^DIR Q ZT(X) ; gen S G="all;demographics;reactions;problems;vitals;labs;meds;immunizations;observation;visits;appointments;documents;procedures;consults;flags;factors;skinTests;exams;education;insurance" S ZI="" F ZI=1:1 Q:$P(G,";",ZI)="" D ; . W !," S ZT("_ZI_")="""_$P(G,";",ZI)_"""" q ; gen2 S G="all;patient;allergy;problem;vital;lab;med;immunization;visit;appointment;procedure" S ZI="" F ZI=1:1 Q:$P(G,";",ZI)="" D ; . W !," S ZT("_ZI_")="""_$P(G,";",ZI)_"""" q ; PAT() ; extrinsic which returns a dfn from the patient selected S DIC=2,DIC(0)="AEMQ" D ^DIC I Y<1 Q ; EXIT S DFN=$P(Y,U,1) ; SET THE PATIENT Q +Y ; tree(where,prefix,docid,zout) ; show a tree starting at a node in MXML. ; node is passed by name ; i $g(prefix)="" s prefix="|--" ; starting prefix i '$d(KBAIJOB) s KBAIJOB=$J n node s node=$na(^TMP("MXMLDOM",KBAIJOB,docid,where)) n txt s txt=$$CLEAN($$ALLTXT(node)) w:'$g(DIQUIET) !,prefix_@node_" "_txt d oneout(zout,prefix_@node_" "_txt) n zi s zi="" f s zi=$o(@node@("A",zi)) q:zi="" d ; . w:'$G(DIQUIET) !,prefix_" : "_zi_"^"_$g(@node@("A",zi)) . d oneout(zout,prefix_" : "_zi_"^"_$g(@node@("A",zi))) f s zi=$o(@node@("C",zi)) q:zi="" d ; . d tree(zi,"| "_prefix,docid,zout) q ; oneout(zbuf,ztxt) ; adds a line to zbuf n zi s zi=$o(@zbuf@(""),-1)+1 s @zbuf@(zi)=ztxt q ; ALLTXT(where) ; extrinsic which returns all text lines from the node .. concatinated ; together n zti s zti="" n ztr s ztr="" f s zti=$o(@where@("T",zti)) q:zti="" d ; . s ztr=ztr_$g(@where@("T",zti)) q ztr ; CLEAN(STR) ; extrinsic function; returns string - gpl borrowed from the CCR package ;; Removes all non printable characters from a string. ;; STR by Value N TR,I F I=0:1:31 S TR=$G(TR)_$C(I) S TR=TR_$C(127) N ZR S ZR=$TR(STR,TR) S ZR=$$LDBLNKS(ZR) ; get rid of leading blanks QUIT ZR ; LDBLNKS(st) ; extrinsic which removes leading blanks from a string n pos f pos=1:1:$l(st) q:$e(st,pos)'=" " q $e(st,pos,$l(st)) ; show(what,docid,zout) ; I '$D(C0XJOB) S C0XJOB=$J d tree(what,,docid,zout) q ; GET(ZRTN,ZDFN,ZTYP) I ZTYP="all" S ZTYP="" D GET^VPRD(.ZRTN,ZDFN,ZTYP) Q ; GET2(ZRTN,ZDFN,ZTYP) I ZTYP="all" S ZTYP="" ;D GET^VPRD(.ZRTN,ZDFN,ZTYP) D GET^KBAINHIN(.ZRTN,ZDFN,ZTYP) ; CALL NHINV ROUTINES TO PULL XML Q ; PARSE(INXML) ; K ^TMP("MXMLERR",$J) Q $$EN^MXMLDOM(INXML,"W") ; VPR ; N ZDFN,ZTYPE ;N ZTMP S ZDFN=$$PAT() S ZTYPE=$$SELPART() D GET(.ZTMP,ZDFN,ZTYPE) N DOCID S DOCID=$$PARSE(.ZTMP) S GN=$NA(^TMP("VPROUT",$J)) D show(1,DOCID,GN) D BROWSE^DDBR(GN,"N","PATIENT "_ZDFN_" "_ZTYPE) K @GN,^TMP("MXMLDOM",$J),^TMP("VPR",$J),GN q ; wsVPR(OUT,FILTER) ; I '$D(DT) N DIQUIET S DIQUIET=1 D DT^DICRW I '$D(DUZ(2)) S DUZ(2)=1 S HTTPRSP("mime")="text/xml" I $G(OUT)="" S OUT=$NA(^TMP("VPROUT",$J)) K @OUT N ZDFN,ZTYPE ;N ZTMP S ZDFN=$G(FILTER("patientId")) S:ZDFN="" ZDFN=$G(FILTER("patientID")) S:ZDFN="" ZDFN=$G(FILTER("DFN")) Q:'ZDFN S ZTYPE=$G(FILTER("domain")) D GET(.ZTMP,ZDFN,ZTYPE) N FORMAT S FORMAT=$G(FILTER("format")) I FORMAT="" S FORMAT="xml" I FORMAT="xml" D Q ; . M @OUT=@ZTMP . D ADDCRLF^VPRJRUT(.OUT) N DOCID S DOCID=$$PARSE(.ZTMP) S OUT=$NA(^TMP("VPROUT",$J)) I FORMAT="outline" D Q ; . S DIQUIET=1 . D show(1,DOCID,OUT) . S HTTPRSP("mime")="text/html" . S @OUT@(.5)="
"
 . ;D tree^KBAIQLDT(1,,GNX,RTN)
 . S @OUT@($O(@OUT@(""),-1)+1)="
" . D ADDCRLF^VPRJRUT(OUT) I FORMAT="array" S FORMAT="mumps" I FORMAT="mumps" D Q ; . N ZDOM S ZDOM=$NA(^TMP("MXMLDOM",$J,DOCID)) . N RTN . d domo3^KBAIQLDE("RTN",,,ZDOM) . d listm(OUT,"RTN") . S HTTPRSP("mime")="text/html" . S @OUT@(.5)="
"
 . S @OUT@($O(@OUT@(""),-1)+1)="
" . D ADDCRLF^VPRJRUT(OUT) K ^TMP("MXMLDOM",$J),^TMP("VPR",$J),GN q ; NHIN ; N ZDFN,ZTYPE ;N ZTMP S ZDFN=$$PAT() S ZTYPE=$$SELPART2() D GET2(.ZTMP,ZDFN,ZTYPE) N DOCID S DOCID=$$PARSE(.ZTMP) S GN=$NA(^TMP("VPROUT",$J)) D show(1,DOCID,GN) D BROWSE^DDBR(GN,"N","PATIENT "_ZDFN_" "_ZTYPE) K @GN,^TMP("MXMLDOM",$J),^TMP("VPR",$J),GN q ; LABS ; S DFN=$$PAT() K OUT D LIST^C0CLABS S GN=$NA(^TMP("VPROUT",$J)) K @GN M @GN=OUT D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" LABS FROM CCR PACKAGE") K @GN Q ; CCRXML ; S DFN=$$PAT() K OUT D CCRRPC^C0CCCR(.OUT,DFN) S GN=$NA(^TMP("VPROUT",$J)) K @GN M @GN=OUT D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" CCR XML") K @GN Q ; CCR ; S DFN=$$PAT() N ZTMP D CCRRPC^C0CCCR(.ZTMP,DFN) K ZTMP(0) N ZCCR S ZCCR=$NA(^TMP("KBAIVPR","CCR")) K @ZCCR M @ZCCR=ZTMP N DOCID S DOCID=$$PARSE(ZCCR) I $D(^TMP("MXMLERR",$J)) D ; . ZWR ^TMP("MXMLERR",$J,*) . B I DOCID=0 B ; S GN=$NA(^TMP("VPROUT",$J)) K @GN D show(1,DOCID,GN) D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" CCR XML") K @GN,@ZCCR Q ; CCDA ; S DFN=$$PAT() N ZTMP D CCDARPC^KBAICDA(.ZTMP,DFN) K ZTMP(0) N ZCCDA S ZCCDA=$NA(^TMP("KBAIVPR",$J,"CCDA")) K @ZCCDA M @ZCCDA=@ZTMP N DOCID S DOCID=$$PARSE(ZCCDA) I $D(^TMP("MXMLERR",$J)) D ; . ZWR ^TMP("MXMLERR",$J,*) . B I DOCID=0 B ; S GN=$NA(^TMP("VPROUT",$J)) K @GN D show(1,DOCID,GN) D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" CCDA XML") K @GN,@ZCCDA Q ; listm(out,in) ; out is passed by name in is passed by name n i s i=$q(@in@("")) f s i=$q(@i) q:i="" d oneout^KBAIVPR(out,i_"="_@i) q ; wsSMART(OUT,FILTER) ; M ^GPL("SMART")=FILTER I '$D(DT) N DIQUIET S DIQUIET=1 D DT^DICRW S HTTPRSP("mime")="text/xml" S DFN=$G(FILTER("patientId")) I DFN="" Q ; N DOMS D DOMAINS(.DOMS) N DOMAIN S DOMAIN=$G(FILTER("domain")) S DOMAIN=$G(DOMS(DOMAIN)) I DOMAIN="" Q ; N FORMAT S FORMAT=$G(FILTER("format")) I FORMAT="" S FORMAT="rdf" I FORMAT="json" S HTTPRSP("mime")="application/json" D EN^C0SMART(.OUT,DFN,DOMAIN,FORMAT) D ADDCRLF^VPRJRUT(.OUT) M ^GPL("SMART")=OUT Q ; DOMAINS(DOMS) ; initializes domain mapping S DOMS("med")="med" S DOMS("medications")="med" S DOMS("problems")="problem" S DOMS("problem")="problem" S DOMS("labs")="lab" S DOMS("lab")="lab" S DOMS("patient")="patient" S DOMS("demographics")="patient" S DOMS("results")="lab" Q ; SMART ; S DFN=$$PAT() S ZTYPE=$$SELPART2() K G,OUT D EN^C0SMART(.G,DFN,ZTYPE,"raw") S GN=$NA(^TMP("KBAIOUT",$J)) K @GN D listm(GN,"G") D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" SMART MUMPS ARRAY") K @GN,G,OUT Q ; SMARTRDF ; S DFN=$$PAT() S ZTYPE=$$SELPART2() K G,OUT D EN^C0SMART(.G,DFN,ZTYPE,"rdf") N ZRDF S ZRDF=$NA(^TMP("KBAIVPR","RDF")) K @ZRDF M @ZRDF=G N DOCID S DOCID=$$PARSE(ZRDF) I $D(^TMP("MXMLERR",$J)) D ; . ZWR ^TMP("MXMLERR",$J,*) . B I DOCID=0 B ; S GN=$NA(^TMP("VPROUT",$J)) K @GN D show(1,DOCID,GN) D BROWSE^DDBR(GN,"N","PATIENT "_DFN_" RDF XML") K @GN,@ZRDF Q ; VPRM ; N ZDFN,ZTYPE N ZTMP S ZDFN=$$PAT() S ZTYPE=$$SELPART() D GETPAT^KBAIVPRE(.ZTMP,ZDFN,ZTYPE) S GN=$NA(^TMP("VPROUT",$J)) K @GN D listm(GN,"ZTMP") D BROWSE^DDBR(GN,"N","PATIENT "_ZDFN_" "_ZTYPE) K @GN,^TMP("VPR",$J),GN q ; GTREE(ROOT,DEPTH,PREFIX,LVL) ; show a global in a tree I $G(PREFIX)="" S PREFIX="|--" ; STARTING PREFIX I '$D(DEPTH) S DEPTH=1 ; USUALLY THIS IS WHAT WE WANT I +$G(LVL)>DEPTH Q ; ONLY GO THAT DEEP N ZGI S ZGI="" N ZVAL S ZVAL=$G(@ROOT) I $G(LVL)="" W !,ROOT_" "_$G(@ROOT@(0)) F S ZGI=$O(@ROOT@(ZGI)) Q:ZGI="" D ; . I $O(@ROOT@(ZGI,""))'="" D ; . . I $G(@ROOT@(ZGI))'="" W !,PREFIX_ZGI_" ",@ROOT@(ZGI) . . E W !,PREFIX_ZGI_" ",$G(@ROOT@(ZGI,0)) . E W !,PREFIX_ZGI_" "_$G(@ROOT@(ZGI)) . D GTREE($NA(@ROOT@(ZGI)),DEPTH,"| "_PREFIX,+$G(LVL)+1) Q ;