KIDS Distribution saved on Jan 04, 2012@01:44:46 consolidated release Test Build 2 **KIDS**:VWMU AUDIT 1.0T2^ **INSTALL NAME** VWMU AUDIT 1.0T2 "BLD",7917,0) VWMU AUDIT 1.0T2^^0^3120104^n "BLD",7917,1,0) ^^23^23^3120104^ "BLD",7917,1,1,0) CREATES THREE NEW FILES "BLD",7917,1,2,0) "BLD",7917,1,3,0) 1) THE DATA FILE IS NAMED 'AUDIT LOG FOR RPCS'. THIS FILE IS ANALOGOUS "BLD",7917,1,4,0) TO THE EXISTING VA FILE NAMED 'AUDIT LOG FOR OPTIONS'. IT WILL BE "BLD",7917,1,5,0) POPULATED AS USERS RUN CERTAIN RPC'S. THIS IS THE FILE OUT OF WHICH "BLD",7917,1,6,0) REPORTS WILL BE NEEDED. "BLD",7917,1,7,0) "BLD",7917,1,8,0) 2) THE DRIVER FILE IS NAMED 'LOGGABLE RPC'. THIS FILE LISTS THE NAMES OF "BLD",7917,1,9,0) RPCS THAT MAY NEED TO BE AUDITED IN THE 'AUDIT LOG FOR RPCS'. SITE TURNS "BLD",7917,1,10,0) THE 'ACTIVE' FIELD ON OR OFF TO CONTROL THIS. THERE IS ALSO A 'READABLE "BLD",7917,1,11,0) NAME' FIELD THAT COULD BE USED TO TRANSLATE 'ORQQPL PROBLEM LIST' TO "BLD",7917,1,12,0) SOMETHING MORE USER-FRIENDLY LIKE 'SHOW PATIENT'S PROBLEM LIST'. THIS "BLD",7917,1,13,0) FILE ALSO HAS INFORMATION ON HOW TO INTERCEPT INPUT PARAMETERS AT THE TIME "BLD",7917,1,14,0) OF THE RPC CALL SO AS TO IDENTIFY WHICH PATIENT IS BEING DEALT WITH ON THE "BLD",7917,1,15,0) CLIENT SIDE. NOTE THAT AN ENTRY IN THIS FILE NEED NOT NECESSARILY "BLD",7917,1,16,0) CORRESPOND TO AN ACTUAL RPC IN FILE 8994 AT THE SITE, BECAUSE THE .01 "BLD",7917,1,17,0) FIELD IS FREE-TEXT, NOT A POINTER. "BLD",7917,1,18,0) "BLD",7917,1,19,0) 3) THE (EMPTY) DATA FILE NAMED 'AUDIT LOG FOR MU'. THIS FILE IS A FILE "BLD",7917,1,20,0) WHERE AUDIT RECORDS ARE COLLECTED FROM AUDIT DATA ELSEWHERE ON THE SYSTEM. "BLD",7917,1,21,0) WHEN THE DATE RANGE FOR AUDITING IS SPECIFIED, THIS FILE IS RECREATED "BLD",7917,1,22,0) BASED ON INFORMATION IN OTHER AUDIT FILES, SUCH AS THE THE AUDIT FOR THE "BLD",7917,1,23,0) PATIENT FILE IN ^DIA AND THE ABOVE MENTIONED AUDIT LOG FOR RPCS. "BLD",7917,4,0) ^9.64PA^8994.8^3 "BLD",7917,4,8994.8,0) 8994.8 "BLD",7917,4,8994.8,222) y^y^f^^y^^y^m^y "BLD",7917,4,8994.81,0) 8994.81 "BLD",7917,4,8994.81,222) y^y^f^^^^n "BLD",7917,4,250001.1,0) 250001.1 "BLD",7917,4,250001.1,222) y^y^f^^^^n "BLD",7917,4,"B",8994.8,8994.8) "BLD",7917,4,"B",8994.81,8994.81) "BLD",7917,4,"B",250001.1,250001.1) "BLD",7917,6.3) 3 "BLD",7917,"KRN",0) ^9.67PA^779.2^20 "BLD",7917,"KRN",.4,0) .4 "BLD",7917,"KRN",.401,0) .401 "BLD",7917,"KRN",.402,0) .402 "BLD",7917,"KRN",.403,0) .403 "BLD",7917,"KRN",.403,"NM",0) ^9.68A^1^1 "BLD",7917,"KRN",.403,"NM",1,0) XWBA FILE #8994.8^8994.8^0 "BLD",7917,"KRN",.403,"NM","B","XWBA FILE #8994.8",1) "BLD",7917,"KRN",.5,0) .5 "BLD",7917,"KRN",.84,0) .84 "BLD",7917,"KRN",3.6,0) 3.6 "BLD",7917,"KRN",3.8,0) 3.8 "BLD",7917,"KRN",9.2,0) 9.2 "BLD",7917,"KRN",9.8,0) 9.8 "BLD",7917,"KRN",9.8,"NM",0) ^9.68A^3^3 "BLD",7917,"KRN",9.8,"NM",1,0) VWMUAUD^^0^B16355018 "BLD",7917,"KRN",9.8,"NM",2,0) XWBPRS^^0^B39321763 "BLD",7917,"KRN",9.8,"NM",3,0) XWBVW^^0^B9598967 "BLD",7917,"KRN",9.8,"NM","B","VWMUAUD",1) "BLD",7917,"KRN",9.8,"NM","B","XWBPRS",2) "BLD",7917,"KRN",9.8,"NM","B","XWBVW",3) "BLD",7917,"KRN",19,0) 19 "BLD",7917,"KRN",19,"NM",0) ^9.68A^3^3 "BLD",7917,"KRN",19,"NM",1,0) XWBVWDISP^^0 "BLD",7917,"KRN",19,"NM",2,0) XWBVWLOG^^0 "BLD",7917,"KRN",19,"NM",3,0) XWBVWPURGE^^0 "BLD",7917,"KRN",19,"NM","B","XWBVWDISP",1) "BLD",7917,"KRN",19,"NM","B","XWBVWLOG",2) "BLD",7917,"KRN",19,"NM","B","XWBVWPURGE",3) "BLD",7917,"KRN",19.1,0) 19.1 "BLD",7917,"KRN",101,0) 101 "BLD",7917,"KRN",409.61,0) 409.61 "BLD",7917,"KRN",771,0) 771 "BLD",7917,"KRN",779.2,0) 779.2 "BLD",7917,"KRN",870,0) 870 "BLD",7917,"KRN",8989.51,0) 8989.51 "BLD",7917,"KRN",8989.52,0) 8989.52 "BLD",7917,"KRN",8994,0) 8994 "BLD",7917,"KRN","B",.4,.4) "BLD",7917,"KRN","B",.401,.401) "BLD",7917,"KRN","B",.402,.402) "BLD",7917,"KRN","B",.403,.403) "BLD",7917,"KRN","B",.5,.5) "BLD",7917,"KRN","B",.84,.84) "BLD",7917,"KRN","B",3.6,3.6) "BLD",7917,"KRN","B",3.8,3.8) "BLD",7917,"KRN","B",9.2,9.2) "BLD",7917,"KRN","B",9.8,9.8) "BLD",7917,"KRN","B",19,19) "BLD",7917,"KRN","B",19.1,19.1) "BLD",7917,"KRN","B",101,101) "BLD",7917,"KRN","B",409.61,409.61) "BLD",7917,"KRN","B",771,771) "BLD",7917,"KRN","B",779.2,779.2) "BLD",7917,"KRN","B",870,870) "BLD",7917,"KRN","B",8989.51,8989.51) "BLD",7917,"KRN","B",8989.52,8989.52) "BLD",7917,"KRN","B",8994,8994) "BLD",7917,"QUES",0) ^9.62^^ "DATA",8994.8,1,0) SC MEAN TEST "DATA",8994.8,1,100) 1 "DATA",8994.8,2,0) TIU NOTES "DATA",8994.8,2,100) 1 "DATA",8994.8,3,0) TIU SUMMARIES "DATA",8994.8,3,100) 1 "DATA",8994.8,4,0) TIU LOAD BOILERPLATE TEXT "DATA",8994.8,4,100) 2 "DATA",8994.8,5,0) TIU CREATE RECORD "DATA",8994.8,5,100) 1 "DATA",8994.8,6,0) TIU DOCUMENTS BY CONTEXT "DATA",8994.8,6,100) 3 "DATA",8994.8,7,0) TIU NOTES 16 BIT "DATA",8994.8,7,100) 1 "DATA",8994.8,8,0) ORWLR CUMULATIVE REPORT "DATA",8994.8,8,100) 1 "DATA",8994.8,9,0) ORQQVS DETAIL NOTES "DATA",8994.8,9,100) 1 "DATA",8994.8,10,0) ORWRA IMAGING EXAMS "DATA",8994.8,10,100) 1 "DATA",8994.8,11,0) ORWRA REPORT TEXT "DATA",8994.8,11,100) 1 "DATA",8994.8,12,0) ORQQPL PROBLEM LIST^^SHOW PATIENT'S PROBLEM LIST "DATA",8994.8,12,100) 1 "DATA",8994.8,13,0) ORQQPL INIT PT "DATA",8994.8,13,100) 1 "DATA",8994.8,14,0) ORWRP REPORT TEXT "DATA",8994.8,14,100) 1 "DATA",8994.8,15,0) ORWRP PRINT REPORT "DATA",8994.8,15,100) 2 "DATA",8994.8,16,0) ORWLR CUMULATIVE SECTION "DATA",8994.8,16,100) 1 "DATA",8994.8,17,0) ORQQPL ADD SAVE "DATA",8994.8,17,100) 1 "DATA",8994.8,18,0) ORWRA PRINT REPORT "DATA",8994.8,18,100) 2 "DATA",8994.8,19,0) ORWCS LIST OF CONSULT REPORTS "DATA",8994.8,19,100) 1 "DATA",8994.8,20,0) ORWCS REPORT TEXT "DATA",8994.8,20,100) 1 "DATA",8994.8,21,0) ORWCS PRINT REPORT "DATA",8994.8,21,100) 2 "DATA",8994.8,22,0) ORWRP16 REPORT TEXT "DATA",8994.8,22,100) 1 "DATA",8994.8,23,0) GMRC LIST CONSULT REQUESTS "DATA",8994.8,23,100) 1 "DATA",8994.8,24,0) PSB MEDICATION HISTORY "DATA",8994.8,24,100) 1 "DATA",8994.8,25,0) PSB GETPRNS "DATA",8994.8,25,100) 1 "DATA",8994.8,26,0) PSB REPORT "DATA",8994.8,26,100) 2 "DATA",8994.8,27,0) TIU TEMPLATE GETTEXT "DATA",8994.8,27,100) 1 "DATA",8994.8,28,0) DG SENSITIVE RECORD ACCESS "DATA",8994.8,28,100) 1 "DATA",8994.8,29,0) DG SENSITIVE RECORD BULLETIN "DATA",8994.8,29,100) 1 "DATA",8994.8,30,0) DG CHK BS5 XREF Y/N "DATA",8994.8,30,100) 1 "DATA",8994.8,31,0) DG CHK BS5 XREF ARRAY "DATA",8994.8,31,100) 1 "DATA",8994.8,32,0) DG CHK PAT MEANS TEST REQUIRED "DATA",8994.8,32,100) 1 "DATA",8994.8,33,0) DG CHK PAT/DIV MEANS TEST "DATA",8994.8,33,100) 1 "DATA",8994.8,34,0) ORWMC PATIENT PROCEDURES "DATA",8994.8,34,100) 1 "DATA",8994.8,35,0) ORWPT DISCHARGE "DATA",8994.8,35,100) 1 "DATA",8994.8,36,0) ORWPCE ACTPROB "DATA",8994.8,36,100) 1 "DATA",8994.8,37,0) ORWORB KILL UNSIG ORDERS ALERT "DATA",8994.8,37,100) 1 "DATA",8994.8,38,0) ORWRP PRINT LAB REPORTS "DATA",8994.8,38,100) 2 "DATA",8994.8,39,0) ORWPT CWAD "DATA",8994.8,39,100) 1 "DATA",8994.8,40,0) ORQQPL CHECK DUP "DATA",8994.8,40,100) 1 "DATA",8994.8,41,0) ORQQCN DEFAULT REQUEST REASON "DATA",8994.8,41,100) 2 "DATA",8994.8,42,0) ORWORB KILL EXPIR MED ALERT "DATA",8994.8,42,100) 1 "DATA",8994.8,43,0) ORWRP PRINT REMOTE REPORT "DATA",8994.8,43,100) 2 "DATA",8994.8,44,0) ORWPCE HASVISIT "DATA",8994.8,44,100) 2 "DATA",8994.8,45,0) ORWORB KILL EXPIR OI ALERT "DATA",8994.8,45,100) 1 "DATA",8994.8,46,0) DVBAB REPORT CPDETAILS "DATA",8994.8,46,100) 1 "DATA",8994.8,47,0) DVBAB REPORT 7131INQ "DATA",8994.8,47,100) 1 "DATA",8994.8,48,0) MAGGDGRPD "DATA",8994.8,48,100) 1 "DATA",8994.8,49,0) MAGGLAB START "DATA",8994.8,49,100) 4 "DATA",8994.8,50,0) MAGGSUR GET "DATA",8994.8,50,100) 1 "DATA",8994.8,51,0) MAGG QUE PATIENT "DATA",8994.8,51,100) 2 "DATA",8994.8,52,0) MAGG PAT IMAGES "DATA",8994.8,52,100) 1 "DATA",8994.8,53,0) MAGG PAT EACH IMAGE "DATA",8994.8,53,100) 1 "DATA",8994.8,54,0) MAGG PAT INFO "DATA",8994.8,54,100) 1 "DATA",8994.8,55,0) MAGG PAT BS5 CHECK "DATA",8994.8,55,100) 1 "DATA",8994.8,56,0) MAGG PAT PHOTOS "DATA",8994.8,56,100) 1 "DATA",8994.8,57,0) ORWRP PRINT V REPORT "DATA",8994.8,57,100) 2 "DATA",8994.8,58,0) ORWMC PATIENT PROCEDURES1 "DATA",8994.8,58,100) 1 "DATA",8994.8,59,0) ORWRA IMAGING EXAMS1 "DATA",8994.8,59,100) 1 "DATA",8994.8,60,0) ORWRA REPORT TEXT1 "DATA",8994.8,60,100) 1 "DATA",8994.8,61,0) DENTV EXCEL EXTRACT "DATA",8994.8,61,100) 4 "DATA",8994.8,62,0) MAGJ PT INFO "DATA",8994.8,62,100) 1 "DATA",8994.8,63,0) PSB GETORDERTAB "DATA",8994.8,63,100) 1 "DATA",8994.8,64,0) PSB IV ORDER HISTORY "DATA",8994.8,64,100) 1 "DATA",8994.8,65,0) DSIC DPT GET DEMO "DATA",8994.8,65,100) 1 "DATA",8994.8,66,0) DSIC GET VISITS ONLY "DATA",8994.8,66,100) 1 "DATA",8994.8,67,0) DSIC SR LIST "DATA",8994.8,67,100) 1 "DATA",8994.8,68,0) DSIC PX IMMUN LIST "DATA",8994.8,68,100) 1 "DATA",8994.8,69,0) MSCGMAG PAT IMAGES "DATA",8994.8,69,100) 1 "DATA",8994.8,70,0) DSIC CPT GET CODE "DATA",8994.8,70,100) 4 "DATA",8994.8,71,0) DSIC CPT GET DETAIL DESC "DATA",8994.8,71,100) 3 "DATA",8994.8,72,0) DSIC CPT GET MODIFIER LIST "DATA",8994.8,72,100) 4 "DATA",8994.8,73,0) DSIC DPT INP INFO "DATA",8994.8,73,100) 1 "DATA",8994.8,74,0) DSIC DPT INP INFO BRIEF "DATA",8994.8,74,100) 1 "DATA",8994.8,75,0) MSC RM PATIENT GET DEMO "DATA",8994.8,75,100) 1 "DATA",8994.8,76,0) MSC GET PATIENT HISTORY "DATA",8994.8,76,100) 1 "DATA",8994.8,77,0) ORWDXA DC^1 "DATA",8994.8,77,101) 1 "DATA",8994.8,78,0) ORWDX SAVE^1^^M "DATA",8994.8,78,100) 1 "DATA",8994.8,79,0) ORWDAL32 SAVE ALLERGY^1 "DATA",8994.8,79,100) 2 "DATA",8994.8,80,0) TIU GET RECORD TEXT^1^^A "DATA",8994.8,81,0) ORQQVI NOTEVIT^1 "DATA",8994.8,81,100) 1 "FIA",8994.8) LOGGABLE RPC "FIA",8994.8,0) ^XWBVW( "FIA",8994.8,0,0) 8994.8 "FIA",8994.8,0,1) y^y^f^^y^^y^m^y "FIA",8994.8,0,10) "FIA",8994.8,0,11) "FIA",8994.8,0,"RLRO") "FIA",8994.8,8994.8) 0 "FIA",8994.81) AUDIT LOG FOR RPCS "FIA",8994.81,0) ^XUSEC(8994, "FIA",8994.81,0,0) 8994.81P "FIA",8994.81,0,1) y^y^f^^^^n "FIA",8994.81,0,10) "FIA",8994.81,0,11) "FIA",8994.81,0,"RLRO") "FIA",8994.81,8994.81) 0 "FIA",250001.1) AUDIT LOG FOR MU "FIA",250001.1,0) ^XUSEC(250001.1, "FIA",250001.1,0,0) 250001.1 "FIA",250001.1,0,1) y^y^f^^^^n "FIA",250001.1,0,10) "FIA",250001.1,0,11) "FIA",250001.1,0,"RLRO") "FIA",250001.1,250001.1) 0 "KRN",.403,112,-1) 0^1 "KRN",.403,112,0) XWBA^@^@^^3110215.0839^^^8994.8^0^0^1 "KRN",.403,112,21) 1 "KRN",.403,112,40,0) ^.4031I^1^1 "KRN",.403,112,40,1,0) 1^XWBA HEADER^1,1 "KRN",.403,112,40,1,1) Page 1 "KRN",.403,112,40,1,40,0) ^.4032IP^432^1 "KRN",.403,112,40,1,40,432,0) XWBA^1^2,1^e "KRN",.403,112,40,1,40,432,2) 15 "KRN",.403,112,40,1,40,432,"COMP MUL") S GFT="" F S GFT=$O(^XWBVW("B",GFT)) Q:GFT="" F D=0:0 S D=$O(^XWBVW("B",GFT,D)) Q:'D N Y S (Y,D0)=D X DICMX Q:'$D(D) "KRN",.403,112,40,1,40,432,"COMP MUL PTR") 8994.8 "KRN",.404,432,0) XWBA^8994.8 "KRN",.404,432,40,0) ^.4044I^4^4 "KRN",.404,432,40,1,0) 1^^3^^NAME "KRN",.404,432,40,1,1) .01 "KRN",.404,432,40,1,2) 2,2^57 "KRN",.404,432,40,2,0) 2^^3 "KRN",.404,432,40,2,1) .02 "KRN",.404,432,40,2,2) 2,60^3 "KRN",.404,432,40,3,0) 3^^3 "KRN",.404,432,40,3,1) 100 "KRN",.404,432,40,3,2) 2,67^5 "KRN",.404,432,40,4,0) 4^^3 "KRN",.404,432,40,4,1) 101 "KRN",.404,432,40,4,2) 2,75^5 "KRN",.404,433,0) XWBA HEADER^8994.8 "KRN",.404,433,40,0) ^.4044I^^0 "KRN",19,11039,-1) 0^2 "KRN",19,11039,0) XWBVWLOG^Audited RPCs Log^^P^^^^^^^^RPC BROKER^n^^ "KRN",19,11039,1,0) ^^2^2^3110214^ "KRN",19,11039,1,1,0) This report sorts on date/time then RPC, prints all data "KRN",19,11039,1,2,0) elements of each entry requested. "KRN",19,11039,60) XUSEC(8994, "KRN",19,11039,62) 0 "KRN",19,11039,63) [XWBALOGP] "KRN",19,11039,64) [XWBVWLOGS] "KRN",19,11039,65) "KRN",19,11039,66) "KRN",19,11039,"U") AUDITED RPCS LOG "KRN",19,11040,-1) 0^3 "KRN",19,11040,0) XWBVWPURGE^Audited RPCs Purge^^R^^^^^^^^RPC BROKER "KRN",19,11040,1,0) ^^2^2^3110214^ "KRN",19,11040,1,1,0) This prompts for a beginning and ending date AND time to purge "KRN",19,11040,1,2,0) the RPC Audit entries. "KRN",19,11040,25) XWBPURGE^XWBVW "KRN",19,11040,"U") AUDITED RPCS PURGE "KRN",19,11041,-1) 0^1 "KRN",19,11041,0) XWBVWDISP^RPC Audit Display^^P^^^^^^^y^RPC BROKER "KRN",19,11041,1,0) ^^2^2^3110214^ "KRN",19,11041,1,1,0) This display sorts on RPC, then date/time. Also prompts for "KRN",19,11041,1,2,0) print device to generate a hard copy of listing. "KRN",19,11041,60) XUSEC(8994, "KRN",19,11041,62) 0 "KRN",19,11041,63) [XWBADISPLAY] "KRN",19,11041,64) [XWBVWDISPS] "KRN",19,11041,65) "KRN",19,11041,66) "KRN",19,11041,"U") RPC AUDIT DISPLAY "MBREQ") 0 "ORD",8,.403) .403;8;;;EDEOUT^DIFROMSO(.403,DA,"",XPDA);FPRE^DIFROMSI(.403,"",XPDA);EPRE^DIFROMSI(.403,DA,$E("N",$G(XPDNEW)),XPDA,"",OLDA);;EPOST^DIFROMSI(.403,DA,"",XPDA);DEL^DIFROMSK(.403,"",%) "ORD",8,.403,0) FORM "ORD",18,19) 19;18;;;OPT^XPDTA;OPTF1^XPDIA;OPTE1^XPDIA;OPTF2^XPDIA;;OPTDEL^XPDIA "ORD",18,19,0) OPTION "QUES","XPF1",0) Y "QUES","XPF1","??") ^D REP^XPDH "QUES","XPF1","A") Shall I write over your |FLAG| File "QUES","XPF1","B") YES "QUES","XPF1","M") D XPF1^XPDIQ "QUES","XPF2",0) Y "QUES","XPF2","??") ^D DTA^XPDH "QUES","XPF2","A") Want my data |FLAG| yours "QUES","XPF2","B") YES "QUES","XPF2","M") D XPF2^XPDIQ "QUES","XPI1",0) YO "QUES","XPI1","??") ^D INHIBIT^XPDH "QUES","XPI1","A") Want KIDS to INHIBIT LOGONs during the install "QUES","XPI1","B") NO "QUES","XPI1","M") D XPI1^XPDIQ "QUES","XPM1",0) PO^VA(200,:EM "QUES","XPM1","??") ^D MG^XPDH "QUES","XPM1","A") Enter the Coordinator for Mail Group '|FLAG|' "QUES","XPM1","B") "QUES","XPM1","M") D XPM1^XPDIQ "QUES","XPO1",0) Y "QUES","XPO1","??") ^D MENU^XPDH "QUES","XPO1","A") Want KIDS to Rebuild Menu Trees Upon Completion of Install "QUES","XPO1","B") NO "QUES","XPO1","M") D XPO1^XPDIQ "QUES","XPZ1",0) Y "QUES","XPZ1","??") ^D OPT^XPDH "QUES","XPZ1","A") Want to DISABLE Scheduled Options, Menu Options, and Protocols "QUES","XPZ1","B") NO "QUES","XPZ1","M") D XPZ1^XPDIQ "QUES","XPZ2",0) Y "QUES","XPZ2","??") ^D RTN^XPDH "QUES","XPZ2","A") Want to MOVE routines to other CPUs "QUES","XPZ2","B") NO "QUES","XPZ2","M") D XPZ2^XPDIQ "RTN") 3 "RTN","VWMUAUD") 0^1^B16355018 "RTN","VWMUAUD",1,0) VWMUAUD ;DJW;Generate Meaningful Use Audit "RTN","VWMUAUD",2,0) ;0.1;;;;;Build 3 "RTN","VWMUAUD",3,0) ; "RTN","VWMUAUD",4,0) GEN S U="^" K DEBUG "RTN","VWMUAUD",5,0) N X,Y,VWBEG,VWEND "RTN","VWMUAUD",6,0) W !,"Generate Meaningful Use Audit" "RTN","VWMUAUD",7,0) K DIR S DIR(0)="D^::ER",DIR("A")="From Date/Time" "RTN","VWMUAUD",8,0) I $D(DEBUG) S Y=3110601.0030 "RTN","VWMUAUD",9,0) E D ^DIR Q:$D(DIROUT) Q:+Y=-1 "RTN","VWMUAUD",10,0) S VWBEG=Y "RTN","VWMUAUD",11,0) K DIR S DIR(0)="D^::ER",DIR("A")="Until Date/Time" "RTN","VWMUAUD",12,0) I $D(DEBUG) S Y=3110605.1530 "RTN","VWMUAUD",13,0) E D ^DIR Q:$D(DIROUT) Q:+Y=-1 "RTN","VWMUAUD",14,0) S VWEND=Y "RTN","VWMUAUD",15,0) W !,"From: " S Y=VWBEG X ^DD("DD") W Y," Thru " "RTN","VWMUAUD",16,0) S Y=VWEND X ^DD("DD") W Y,! "RTN","VWMUAUD",17,0) ; "RTN","VWMUAUD",18,0) N FDA "RTN","VWMUAUD",19,0) S FDA=$P($G(^XUSEC(250001.1,0),"AUDIT LOG FOR MU^250001.1"),U,1,2) "RTN","VWMUAUD",20,0) K ^XUSEC(250001.1) S ^XUSEC(250001.1,0)=FDA K FDA "RTN","VWMUAUD",21,0) ; look at AUDIT of PATIENT "RTN","VWMUAUD",22,0) K VWCNT S VWCNT=0,D=VWBEG-0.00000001 "RTN","VWMUAUD",23,0) F D Q:$O(^DIA(2,"C",D))="" Q:$O(^DIA(2,"C",D))>VWEND "RTN","VWMUAUD",24,0) . S D=$O(^DIA(2,"C",D)) "RTN","VWMUAUD",25,0) . S I=0 F S I=$O(^DIA(2,"C",D,I)) Q:I="" D "RTN","VWMUAUD",26,0) .. S VWCNT=VWCNT+1 "RTN","VWMUAUD",27,0) .. I $G(DEBUG) D "RTN","VWMUAUD",28,0) ... W "^DIA(2,""C"","""_D_""","""_I_""")",! "RTN","VWMUAUD",29,0) ... N IEN S IEN=I N DA,DIC,DR,DIQ,DIA S DIA=2 "RTN","VWMUAUD",30,0) ... N %,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z "RTN","VWMUAUD",31,0) ... S DA=IEN,DIC="^DIA(2,",DR="0",DIQ(0)="CR" "RTN","VWMUAUD",32,0) ... D EN1^DIQ "RTN","VWMUAUD",33,0) .. S RESULT=$$CLASSPT(2,I,.VWCNT) "RTN","VWMUAUD",34,0) .. D:RESULT'="" SETMUAUD(VWCNT,RESULT) "RTN","VWMUAUD",35,0) D RPT("AUDIT OF PATIENT") "RTN","VWMUAUD",36,0) ; "RTN","VWMUAUD",37,0) W ! S VWCNTPAT=VWCNT "RTN","VWMUAUD",38,0) F I="MODIFIED","CREATED","DELETED","ACCESSED" D "RTN","VWMUAUD",39,0) . S VWCNTPAT(I)=$G(VWCNT(I)),VWCNT(I)=0 "RTN","VWMUAUD",40,0) ; look at AUDIT LOG FOR RPCS "RTN","VWMUAUD",41,0) S D=VWBEG-0.000000001 "RTN","VWMUAUD",42,0) F D Q:$O(^XUSEC(8994,D))="" Q:$O(^XUSEC(8994,D))>VWEND S VWCNT=VWCNT+1 "RTN","VWMUAUD",43,0) . S D=$O(^XUSEC(8994,D)) "RTN","VWMUAUD",44,0) . I $G(DEBUG) "RTN","VWMUAUD",45,0) .. W "^XUSEC(8994,"""_D_""",0)",! "RTN","VWMUAUD",46,0) .. N IEN S IEN=D N D,DA,DIC,DR,DIQ "RTN","VWMUAUD",47,0) .. S DA=IEN,DIC="^XUSEC(8994,",DR="0:~",DIQ(0)="CR" "RTN","VWMUAUD",48,0) .. D EN1^DIQ "RTN","VWMUAUD",49,0) . S RESULT=$$CLASSRPC(8994.81,D,.VWCNT) "RTN","VWMUAUD",50,0) . D:RESULT'="" SETMUAUD(VWCNT,RESULT) "RTN","VWMUAUD",51,0) ; "RTN","VWMUAUD",52,0) S VWCNT=VWCNT-VWCNTPAT "RTN","VWMUAUD",53,0) D RPT("AUDIT LOG FOR RPCS") "RTN","VWMUAUD",54,0) W ! S VWCNT=VWCNT+VWCNTPAT "RTN","VWMUAUD",55,0) F I="MODIFIED","CREATED","DELETED","ACCESSED" D "RTN","VWMUAUD",56,0) . S VWCNT(I)=VWCNT(I)+VWCNTPAT(I) "RTN","VWMUAUD",57,0) D RPT("") "RTN","VWMUAUD",58,0) S $P(^XUSEC(250001.1,0),U,3,4)=$O(^XUSEC(250001.1," "),-1)_U_VWCNT "RTN","VWMUAUD",59,0) Q "RTN","VWMUAUD",60,0) SETMUAUD(IEN,VAL) ; "RTN","VWMUAUD",61,0) I $G(DEBUG) W RES,! "RTN","VWMUAUD",62,0) S ^XUSEC(250001.1,IEN,0)=VAL "RTN","VWMUAUD",63,0) S ^XUSEC(250001.1,"B",$P(VAL,U),IEN)="" "RTN","VWMUAUD",64,0) S ^XUSEC(250001.1,"C",$P(VAL,U,4),IEN)="" "RTN","VWMUAUD",65,0) I $G(DEBUG) D "RTN","VWMUAUD",66,0) . N DA,DIC,DR,DIQ "RTN","VWMUAUD",67,0) . S DA=IEN,DIC="^XUSEC(250001.1,",DR="0",DIQ(0)="CR" "RTN","VWMUAUD",68,0) . D EN1^DIQ "RTN","VWMUAUD",69,0) ;S DA=1,DR=0,DIC="^XUSEC(250001.1,",DIQ(0)="CR" D EN1^DIQ "RTN","VWMUAUD",70,0) Q "RTN","VWMUAUD",71,0) RPT(MSG) ; "RTN","VWMUAUD",72,0) W !,VWCNT," Audit records found" W:$G(MSG)'="" " for ",MSG "RTN","VWMUAUD",73,0) S C="" F S C=$O(VWCNT(C)) Q:C="" D "RTN","VWMUAUD",74,0) . W !,"Count of ",C," records is ",VWCNT(C) "RTN","VWMUAUD",75,0) Q "RTN","VWMUAUD",76,0) ; "RTN","VWMUAUD",77,0) CLASSRPC(FILE,AUDIEN,COUNT) ; "RTN","VWMUAUD",78,0) I $G(AUDIEN)="" Q "" "RTN","VWMUAUD",79,0) I $D(^XUSEC(8994,AUDIEN,0)) D Q $$RP("A") "RTN","VWMUAUD",80,0) . S COUNT("ACCESSED")=$G(COUNT("ACCESSED"))+1 "RTN","VWMUAUD",81,0) S COUNT("OTHER")=$G(COUNT("OTHER"))+1 "RTN","VWMUAUD",82,0) Q $$RP("O") "RTN","VWMUAUD",83,0) ; "RTN","VWMUAUD",84,0) RP(X) ; "RTN","VWMUAUD",85,0) I '$G(AUDIEN) Q "" "RTN","VWMUAUD",86,0) N DFN S DFN=$G(^XUSEC(8994,AUDIEN,100)) "RTN","VWMUAUD",87,0) N WHO S WHO=$P(^XUSEC(8994,AUDIEN,0),U,2) "RTN","VWMUAUD",88,0) ;N WHEN S WHEN=$P(AUDIEN,".")_"."_$P($P(AUDIEN,".",2),1,6) "RTN","VWMUAUD",89,0) N WHEN S WHEN=+$J(AUDIEN,1,6) "RTN","VWMUAUD",90,0) N RPCCALL S RPCCALL=$P($G(^XUSEC(8994,AUDIEN,0)),U) "RTN","VWMUAUD",91,0) N AUX S AUX=$P(^XWB(8994,RPCCALL,0),U) "RTN","VWMUAUD",92,0) Q "RPC;"_AUDIEN_U_DFN_U_WHO_U_WHEN_U_X_U_AUX "RTN","VWMUAUD",93,0) ; "RTN","VWMUAUD",94,0) PT(X) ; "RTN","VWMUAUD",95,0) I '$G(AUDIEN) Q "" "RTN","VWMUAUD",96,0) N DFN S DFN=$P(^DIA(2,AUDIEN,0),U) "RTN","VWMUAUD",97,0) N WHO S WHO=$P(^DIA(2,AUDIEN,0),U,4) "RTN","VWMUAUD",98,0) N WHEN S WHEN=$P(^DIA(2,AUDIEN,0),U,2) "RTN","VWMUAUD",99,0) N OPTION S OPTION=$P($G(^DIA(2,AUDIEN,4.1)),U) "RTN","VWMUAUD",100,0) S OPTION=$P($G(^DIC(19,+OPTION,0),OPTION),U,1) "RTN","VWMUAUD",101,0) N AUX S AUX=OPTION "RTN","VWMUAUD",102,0) Q "FILE"_FILE_";"_AUDIEN_U_DFN_U_WHO_U_WHEN_U_X_U_AUX "RTN","VWMUAUD",103,0) ; "RTN","VWMUAUD",104,0) CLASSPT(FILE,AUDIEN,COUNT) ; "RTN","VWMUAUD",105,0) I FILE'=2 W !,"not PATIENT" Q "RTN","VWMUAUD",106,0) I AUDIEN="" W !,"Null IEN" Q "RTN","VWMUAUD",107,0) ; "RTN","VWMUAUD",108,0) I $D(^DIA(FILE,AUDIEN,2)),$D(^DIA(FILE,AUDIEN,3)) D Q $$PT("M") "RTN","VWMUAUD",109,0) . S COUNT("MODIFIED")=$G(COUNT("MODIFIED"))+1 Q "RTN","VWMUAUD",110,0) I $D(^DIA(FILE,AUDIEN,2)) D Q $$PT("D") "RTN","VWMUAUD",111,0) . S COUNT("DELETED")=$G(COUNT("DELETED"))+1 Q "RTN","VWMUAUD",112,0) I $D(^DIA(FILE,AUDIEN,3)) D Q $$PT("C") "RTN","VWMUAUD",113,0) . S COUNT("CREATED")=$G(COUNT("CREATED"))+1 Q "RTN","VWMUAUD",114,0) S COUNT("ACCESSED")=$G(COUNT("ACCESSED"))+1 "RTN","VWMUAUD",115,0) Q $$PT("A") "RTN","XWBPRS") 0^2^B39321763 "RTN","XWBPRS",1,0) XWBPRS ;ISF/STAFF - VISTA BROKER MSG PARSER ;18FEB2011 "RTN","XWBPRS",2,0) ;;1.1;RPC BROKER;**35,43,46,VW**;Mar 28, 1997;Build 3 "RTN","XWBPRS",3,0) ;XWB holds info from the message used by the RPC "RTN","XWBPRS",4,0) CALLP(XWBP,XWBDEBUG) ;make API call using Protocol string "RTN","XWBPRS",5,0) N ERR,S,XWBARY K XWB "RTN","XWBPRS",6,0) S ERR=0 "RTN","XWBPRS",7,0) S ERR=$$PRSP("[XWB]") ;Read the rest of the protocol header "RTN","XWBPRS",8,0) I '+ERR S ERR=$$PRSM ;Read and parse message "RTN","XWBPRS",9,0) I $G(XWB(2,"RPC"))="XUS SET SHARED" S XWBSHARE=1 Q "RTN","XWBPRS",10,0) I '+ERR S ERR=$$RPC ;Check the RPC "RTN","XWBPRS",11,0) I +ERR S XWBSEC=$P(ERR,U,2) ;P10 -- dpc "RTN","XWBPRS",12,0) I '+ERR D CHKPRMIT^XWBSEC($G(XWB(2,"RPC"))) ;checks if RPC allowed to run "RTN","XWBPRS",13,0) S:$L($G(XWBSEC)) ERR="-1^"_XWBSEC "RTN","XWBPRS",14,0) I '+ERR D "RTN","XWBPRS",15,0) . D CAPI(.XWBP,XWB("PARAM")) "RTN","XWBPRS",16,0) E I ($G(XWBTCMD)'="#BYE#") D LOG^XWBTCPM("Bad Msg"_ERR),CLRBUF "RTN","XWBPRS",17,0) I 'XWBDEBUG K XWB "RTN","XWBPRS",18,0) I $D(XWBARY) K @XWBARY,XWBARY "RTN","XWBPRS",19,0) Q "RTN","XWBPRS",20,0) ; "RTN","XWBPRS",21,0) PRSP(P) ;ef, Parse Protocol "RTN","XWBPRS",22,0) ;M Extrinsic Function "RTN","XWBPRS",23,0) ;Outputs "RTN","XWBPRS",24,0) ;ERR 0 for success, "-1^Text" if error "RTN","XWBPRS",25,0) ; "RTN","XWBPRS",26,0) N ERR,C,M,R,X "RTN","XWBPRS",27,0) S R=0,C=";",ERR=0 "RTN","XWBPRS",28,0) S P=$$BREAD^XWBRW(4) "RTN","XWBPRS",29,0) IF $L(P)'=4 S ERR="-1^Short Header info" "RTN","XWBPRS",30,0) IF +ERR=0 D "RTN","XWBPRS",31,0) . S XWB(R,"VER")=+$E(P,1) "RTN","XWBPRS",32,0) . S XWB(R,"TYPE")=+$E(P,2) "RTN","XWBPRS",33,0) . S (XWBENVL,XWB(R,"LENV"))=+$E(P,3) "RTN","XWBPRS",34,0) . S (XWBPRT,XWB(R,"RT"))=+$E(P,4) "RTN","XWBPRS",35,0) I XWBENVL<1 S (XWBENVL,XWB(R,"LENV"))=3 "RTN","XWBPRS",36,0) Q ERR "RTN","XWBPRS",37,0) ; "RTN","XWBPRS",38,0) PRSM() ;ef, Parse message "RTN","XWBPRS",39,0) ;M Extrinsic Function "RTN","XWBPRS",40,0) ;See document on msg format "RTN","XWBPRS",41,0) ;Outputs "RTN","XWBPRS",42,0) ;ERR 0 for success, "-1^Text" if error "RTN","XWBPRS",43,0) N C,EX1,ERR,R,X,CNK "RTN","XWBPRS",44,0) S R=1,C=";",CNK=0,EX1=0 ;Max buffer "RTN","XWBPRS",45,0) S ERR="-1^Invalid Chunk" "RTN","XWBPRS",46,0) F S CNK=$$BREAD^XWBRW(1) Q:("12345"'[CNK) D Q:EX1 "RTN","XWBPRS",47,0) . S EX1=(CNK=5),@("ERR=$$PRS"_CNK) "RTN","XWBPRS",48,0) Q ERR "RTN","XWBPRS",49,0) ; "RTN","XWBPRS",50,0) PRS1() ;Parse the HEADER chunk "RTN","XWBPRS",51,0) N %,L,R "RTN","XWBPRS",52,0) S R=1 "RTN","XWBPRS",53,0) S XWB(R,"VER")=$$SREAD "RTN","XWBPRS",54,0) S XWB(R,"RETURN")=$$SREAD "RTN","XWBPRS",55,0) Q 0 "RTN","XWBPRS",56,0) ; "RTN","XWBPRS",57,0) PRS2() ;Parse the RPC chunk "RTN","XWBPRS",58,0) N L,R "RTN","XWBPRS",59,0) S R=2 "RTN","XWBPRS",60,0) S (XWBAPVER,XWB(R,"VER"))=$$SREAD ;RPC version "RTN","XWBPRS",61,0) S XWB(R,"RPC")=$$SREAD "RTN","XWBPRS",62,0) I $G(XWBDEBUG)>1 D LOG^XWBTCPM("RPC: "_XWB(R,"RPC")) "RTN","XWBPRS",63,0) Q 0 "RTN","XWBPRS",64,0) PRS3() ;Parse the Security chunk "RTN","XWBPRS",65,0) N L,R "RTN","XWBPRS",66,0) S R=3 "RTN","XWBPRS",67,0) Q 0 "RTN","XWBPRS",68,0) PRS4() ;Parse the Command chunk "RTN","XWBPRS",69,0) N R "RTN","XWBPRS",70,0) S R=4,XWBTCMD=$$SREAD,XWB(R,"CMD")=XWBTCMD "RTN","XWBPRS",71,0) I $G(XWBDEBUG)>1 D LOG^XWBTCPM("CMD: "_XWBTCMD) "RTN","XWBPRS",72,0) Q ("TCPConnect^#BYE#"[XWBTCMD) "RTN","XWBPRS",73,0) ; "RTN","XWBPRS",74,0) PRS5() ;Parse Data Parameter chunk "RTN","XWBPRS",75,0) ;M Extrinsic Function "RTN","XWBPRS",76,0) ;Outputs "RTN","XWBPRS",77,0) ;ERR 0 for success, "-1^Text" if error "RTN","XWBPRS",78,0) ; "RTN","XWBPRS",79,0) N CONT,DONE,ERR,F,FL,IX,K,L,P1,P2,P3,P4,P5,MAXP,R,TY,VA "RTN","XWBPRS",80,0) S R=5,ERR=0,F=3,IX=0,DONE=0,CONT="f",XWB("PARAM")="" "RTN","XWBPRS",81,0) F S:CONT="f" TY=$$BREAD^XWBRW(1) D Q:DONE S CONT=$$BREAD^XWBRW(1) S:CONT'="t" IX=IX+1 "RTN","XWBPRS",82,0) . K VA,P1 "RTN","XWBPRS",83,0) . IF TY=$C(4) S DONE=1 Q ;EOT "RTN","XWBPRS",84,0) . IF TY=0 D Q ;literal "RTN","XWBPRS",85,0) . . D LREAD("VA") "RTN","XWBPRS",86,0) . . S XWB(R,"P",IX)=VA(1) D PARAM($NA(XWB(R,"P",IX))) "RTN","XWBPRS",87,0) . . Q "RTN","XWBPRS",88,0) . IF TY=1 D Q ;reference "RTN","XWBPRS",89,0) . . D LREAD("VA") "RTN","XWBPRS",90,0) . . S XWB(R,"P",IX)=$$GETV(VA(1)) D PARAM($NA(XWB(R,"P",IX))) "RTN","XWBPRS",91,0) . . Q "RTN","XWBPRS",92,0) . IF TY=2 D Q ;list "RTN","XWBPRS",93,0) . . I CONT'="t" D "RTN","XWBPRS",94,0) . . . S XWBARY=$$OARY,XWB(R,"P",IX)="."_XWBARY "RTN","XWBPRS",95,0) . . . D PARAM(XWB(R,"P",IX)) "RTN","XWBPRS",96,0) . . D LREAD("P1") Q:P1(1)="" D LREAD("VA") "RTN","XWBPRS",97,0) . . D LINST(XWBARY,P1(1),VA(1)) "RTN","XWBPRS",98,0) . . Q "RTN","XWBPRS",99,0) . IF TY=3 D Q ;global "RTN","XWBPRS",100,0) . . I CONT'="t" D "RTN","XWBPRS",101,0) . . . S XWBARY=$NA(^TMP("XWBA",$J,IX)),XWB(R,"P",IX)=XWBARY "RTN","XWBPRS",102,0) . . . K @XWBARY S @XWBARY="" "RTN","XWBPRS",103,0) . . . D PARAM(XWBARY) "RTN","XWBPRS",104,0) . . D LREAD("P1") Q:P1(1)="" D LREAD("VA") "RTN","XWBPRS",105,0) . . D GINST(XWBARY,P1(1),VA(1)) "RTN","XWBPRS",106,0) . . Q "RTN","XWBPRS",107,0) . IF TY=4 D Q ;empty - ,, "RTN","XWBPRS",108,0) . . S XWB(R,"XWB",IX)="" "RTN","XWBPRS",109,0) . . Q "RTN","XWBPRS",110,0) . IF TY=5 D Q "RTN","XWBPRS",111,0) . . ;stream still to be done "RTN","XWBPRS",112,0) . Q ;End of loop "RTN","XWBPRS",113,0) Q ERR "RTN","XWBPRS",114,0) PARAM(NA) ;Add a new parameter to the list "RTN","XWBPRS",115,0) N A "RTN","XWBPRS",116,0) S A=$G(XWB("PARAM")) S:'$L(NA) NA="""""" ;Empty "RTN","XWBPRS",117,0) S A=A_$S($L(A):",",1:"")_$S(TY=3:"$NA(",1:"")_NA_$S(TY=3:")",1:"") "RTN","XWBPRS",118,0) S XWB("PARAM")=A "RTN","XWBPRS",119,0) Q "RTN","XWBPRS",120,0) ; "RTN","XWBPRS",121,0) RPC() ;Check the rpc information. "RTN","XWBPRS",122,0) ;M Extrinsic Function "RTN","XWBPRS",123,0) ;Outputs "RTN","XWBPRS",124,0) ;ERR 0 for success, "-1^Text" if error "RTN","XWBPRS",125,0) ; "RTN","XWBPRS",126,0) N C,DR,ERR,M,R,RPC,T,X "RTN","XWBPRS",127,0) S R=2,C=";",ERR=0,M=512 ;Max buffer "RTN","XWBPRS",128,0) S RPC=$G(XWB(R,"RPC")) I '$L(RPC) Q "-1^No RPC sent" "RTN","XWBPRS",129,0) S T=$O(^XWB(8994,"B",RPC,0)) "RTN","XWBPRS",130,0) I '+T Q "-1^Remote Procedure '"_RPC_"' doesn't exist on the server." "RTN","XWBPRS",131,0) S T(0)=$G(^XWB(8994,T,0)) "RTN","XWBPRS",132,0) I $P(T(0),U,6)=1!($P(T(0),U,6)=2) Q "-1^Remote Procedure '"_RPC_"' cannot be run at this time." ;P10. Check INACTIVE field. - dpc. "RTN","XWBPRS",133,0) S XWB(R,"RTAG")=$P(T(0),"^",2) "RTN","XWBPRS",134,0) S XWB(R,"RNAM")=$P(T(0),"^",3) "RTN","XWBPRS",135,0) S XWBPTYPE=$P(T(0),"^",4) "RTN","XWBPRS",136,0) S XWBWRAP=+$P(T(0),"^",8) "RTN","XWBPRS",137,0) Q ERR "RTN","XWBPRS",138,0) ; "RTN","XWBPRS",139,0) SREAD() ;Read a S_PACK "RTN","XWBPRS",140,0) N L,V7 "RTN","XWBPRS",141,0) S L=$$BREAD^XWBRW(1),L=$A(L) "RTN","XWBPRS",142,0) S V7=$$BREAD^XWBRW(L) "RTN","XWBPRS",143,0) Q V7 "RTN","XWBPRS",144,0) ; "RTN","XWBPRS",145,0) LREAD(ROOT) ;Read a L_PACK "RTN","XWBPRS",146,0) N L,V7,I ;p45 Remove limit on length of string. "RTN","XWBPRS",147,0) S I=1,@ROOT@(I)="" "RTN","XWBPRS",148,0) S L=$$BREAD^XWBRW(XWBENVL),L=+L "RTN","XWBPRS",149,0) I L>0 S V7=$$BREAD^XWBRW(L),@ROOT@(I)=V7,I=I+1 "RTN","XWBPRS",150,0) Q "RTN","XWBPRS",151,0) ; "RTN","XWBPRS",152,0) ;X can be something like '"TEXT",1,0'. "RTN","XWBPRS",153,0) LINST(A,X,XWBY) ;instantiate local array "RTN","XWBPRS",154,0) IF XWBY=$C(1) S XWBY="" "RTN","XWBPRS",155,0) S X=A_"("_X_")" "RTN","XWBPRS",156,0) S @X=XWBY "RTN","XWBPRS",157,0) Q "RTN","XWBPRS",158,0) ; "RTN","XWBPRS",159,0) ;S can be something like '"TEXT",1,0'. "RTN","XWBPRS",160,0) GINST(R,S,V) ;instantiate global "RTN","XWBPRS",161,0) N N "RTN","XWBPRS",162,0) I V=$C(1) S V="" "RTN","XWBPRS",163,0) S N=$P(R,")")_","_S_")" "RTN","XWBPRS",164,0) S @N=V "RTN","XWBPRS",165,0) Q "RTN","XWBPRS",166,0) ; "RTN","XWBPRS",167,0) GETV(V) ;get value of V - reference parameter "RTN","XWBPRS",168,0) N X "RTN","XWBPRS",169,0) S X=V "RTN","XWBPRS",170,0) IF $E(X,1,2)="$$" Q "" "RTN","XWBPRS",171,0) IF $C(34,36)[$E(V) X "S V="_$$VCHK(V) "RTN","XWBPRS",172,0) E S V=@V "RTN","XWBPRS",173,0) Q V "RTN","XWBPRS",174,0) ; "RTN","XWBPRS",175,0) VCHK(S) ;Parse string for first argument "RTN","XWBPRS",176,0) N C,I,P "RTN","XWBPRS",177,0) F I=1:1 S C=$E(S,I) D VCHKP:C="(",VCHKQ:C=$C(34) Q:" ,"[C "RTN","XWBPRS",178,0) Q $E(S,1,I-1) "RTN","XWBPRS",179,0) VCHKP S P=1 ;Find closing paren "RTN","XWBPRS",180,0) F I=I+1:1 S C=$E(S,I) Q:P=0!(C="") I "()"""[C D VCHKQ:C=$C(34) S P=P+$S("("[C:1,")"[C:-1,1:0) "RTN","XWBPRS",181,0) Q "RTN","XWBPRS",182,0) VCHKQ ;Find closing quote "RTN","XWBPRS",183,0) F I=I+1:1 S C=$E(S,I) Q:C=""!(C=$C(34)) "RTN","XWBPRS",184,0) Q "RTN","XWBPRS",185,0) CLRBUF ;Empties Input buffer "RTN","XWBPRS",186,0) N % "RTN","XWBPRS",187,0) F R *%:2 Q:'$T!(%=4) ;!(%=-1) "RTN","XWBPRS",188,0) Q "RTN","XWBPRS",189,0) ZZZ(X) ;Convert "RTN","XWBPRS",190,0) N I "RTN","XWBPRS",191,0) F S I=$F(X,"$C(") Q:'I S J=$F(X,")",I),X=$E(X,1,I-4)_$C($E(X,I,J-2))_$E(X,J,999) "RTN","XWBPRS",192,0) Q X "RTN","XWBPRS",193,0) ; "RTN","XWBPRS",194,0) CAPI(XWBY,PAR) ;make API call "RTN","XWBPRS",195,0) N XWBCALL,T,DX,DY "RTN","XWBPRS",196,0) S XWBCALL=XWB(2,"RTAG")_"^"_XWB(2,"RNAM")_"(.XWBY"_$S($L(PAR):","_PAR,1:"")_")",XWBCALL2="" "RTN","XWBPRS",197,0) K PAR "RTN","XWBPRS",198,0) O XWBNULL U XWBNULL ;p43 Make sure its open "RTN","XWBPRS",199,0) ; "RTN","XWBPRS",200,0) I $G(XWBDEBUG)>2 D LOG^XWBDLOG("Call: "_$E(XWBCALL,1,247)) "RTN","XWBPRS",201,0) ;start RUM for RPC "RTN","XWBPRS",202,0) I $G(XWB(2,"CAPI"))]"" D LOGRSRC^%ZOSV(XWB(2,"CAPI"),2,1) "RTN","XWBPRS",203,0) VWAUDIT I $G(XWB(2,"RPC"))]"" D TRAP^XWBVW(.XWB) "RTN","XWBPRS",204,0) D @XWBCALL S XWBCALL2=XWBCALL ;Save call for debug "RTN","XWBPRS",205,0) ; "RTN","XWBPRS",206,0) ;restart RUM for handler "RTN","XWBPRS",207,0) D LOGRSRC^%ZOSV("$BROKER HANDLER$",2,1) "RTN","XWBPRS",208,0) ; "RTN","XWBPRS",209,0) U XWBTDEV "RTN","XWBPRS",210,0) Q "RTN","XWBPRS",211,0) ; "RTN","XWBPRS",212,0) OARY() ;create storage array "RTN","XWBPRS",213,0) N A,DONE,I "RTN","XWBPRS",214,0) S I=1+$G(XWB("ARRAY")),XWB("ARRAY")=I "RTN","XWBPRS",215,0) S A="XWBS"_I "RTN","XWBPRS",216,0) K @A ;temp fix for single array "RTN","XWBPRS",217,0) S @A="" ;set naked "RTN","XWBPRS",218,0) Q A "RTN","XWBPRS",219,0) ; "RTN","XWBPRS",220,0) CREF(R,P) ;Convert array contained in P to reference A "RTN","XWBPRS",221,0) N I,X,DONE,F1,S "RTN","XWBPRS",222,0) S DONE=0 "RTN","XWBPRS",223,0) S S="" "RTN","XWBPRS",224,0) F I=1:1 D Q:DONE "RTN","XWBPRS",225,0) . IF $P(P,",",I)="" S DONE=1 Q "RTN","XWBPRS",226,0) . S X(I)=$P(P,",",I) "RTN","XWBPRS",227,0) . IF X(I)?1"."1A.E D "RTN","XWBPRS",228,0) . . S F1=$F(X(I),".") "RTN","XWBPRS",229,0) . . S X(I)="."_R "RTN","XWBPRS",230,0) . S S=S_X(I)_"," "RTN","XWBPRS",231,0) Q $E(S,1,$L(S)-1) "RTN","XWBPRS",232,0) ; "RTN","XWBVW") 0^3^B9598967 "RTN","XWBVW",1,0) XWBVW ;GFT - PURGE RPC AUDIT;18FEB2011 "RTN","XWBVW",2,0) ;;8.0;KERNEL;;Jul 10, 1995;Build 3 "RTN","XWBVW",3,0) ; "RTN","XWBVW",4,0) ; "RTN","XWBVW",5,0) ; "RTN","XWBVW",6,0) TRAP(XWB) ;BRING IN THE XWB ARRAY AT TIME OF CALL "RTN","XWBVW",7,0) N DFN,RPCNAME "RTN","XWBVW",8,0) S RPCNAME=$G(XWB(2,"RPC")) "RTN","XWBVW",9,0) S DFN=$$FINDFN(RPCNAME) ;'RPCNAME' IS NAME OF RPC TO BE FOUND IN FILE 8994.8 "RTN","XWBVW",10,0) I DFN D LOGRPC(RPCNAME,DFN) "RTN","XWBVW",11,0) Q "RTN","XWBVW",12,0) ; "RTN","XWBVW",13,0) ; "RTN","XWBVW",14,0) FINDFN(RPCNAME) ;XWB ARRAY IS ALSO DEFINED WHEN ENTERING HERE "RTN","XWBVW",15,0) N XWBVW,X "RTN","XWBVW",16,0) I $G(RPCNAME)="" Q "" "RTN","XWBVW",17,0) S XWBVW=$O(^XWBVW("B",RPCNAME,0)) I 'XWBVW Q "" "RTN","XWBVW",18,0) I '$P($G(^XWBVW(XWBVW,0)),"^",2) Q "" ;WON'T WORK IF LOGGABLE RPC IS NOT ACTIVE "RTN","XWBVW",19,0) S X=+$G(^XWBVW(XWBVW,100)) I X Q +$G(XWB(5,"P",X-1)) ;NODE 100 SAYS WHICH PARAMETER IS DFN; PARAMETERS ARE NUMBERED STARTING FROM 0 "RTN","XWBVW",20,0) S X=+$G(^XWBVW(XWBVW,101)) I X S X=+$G(XWB(5,"P",X-1)) I X S X=$P($G(^OR(100,X,0)),U,2) I X["DPT(" Q +X ;NODE 101 SAYS WHICH PARAMETER IS ORDER "RTN","XWBVW",21,0) Q "" "RTN","XWBVW",22,0) ; "RTN","XWBVW",23,0) ; "RTN","XWBVW",24,0) LOGRPC(RPC,XWBDFN) ;RPC audit --- something like XQ12 routine "RTN","XWBVW",25,0) N %,Y,XWBVW "RTN","XWBVW",26,0) I '$G(XWBDFN) Q "RTN","XWBVW",27,0) I RPC'?1.NP Q:RPC="" S RPC=$O(^XWB(8994,"B",RPC,0)) Q:'RPC "RTN","XWBVW",28,0) S %=$P($H,",",2),%=DT_(%\60#60/100+(%\3600)+(%#60/10000)/100) "RTN","XWBVW",29,0) L +^XUSEC(8994,0):0 "RTN","XWBVW",30,0) F XWBVW=%:.00000001 Q:'$D(^XUSEC(8994,XWBVW)) "RTN","XWBVW",31,0) S ^(XWBVW,0)=RPC_"^"_$G(DUZ)_"^"_$I_"^"_$J "RTN","XWBVW",32,0) L -^XUSEC(8994,0) "RTN","XWBVW",33,0) S $P(^(0),U,3,4)=XWBVW_"^"_($P(^XUSEC(8994,0),U,4)+1) "RTN","XWBVW",34,0) D GETENV^%ZOSV S $P(^XUSEC(8994,XWBVW,0),U,6)=$P(Y,U,2) "RTN","XWBVW",35,0) S ^XUSEC(8994,XWBVW,100)=XWBDFN "RTN","XWBVW",36,0) ;djw-indices "RTN","XWBVW",37,0) S ^XUSEC(8994,"APAT",XWBDFN,XWBVW)="" "RTN","XWBVW",38,0) S ^XUSEC(8994,"AD",+$G(DUZ),XWBVW)="" "RTN","XWBVW",39,0) Q "RTN","XWBVW",40,0) ; "RTN","XWBVW",41,0) ; "RTN","XWBVW",42,0) ; "RTN","XWBVW",43,0) XWBPURGE ;RPC audit purge --- 'XWBAPURGE' Option --- stolen from XUAPURGE routine "RTN","XWBVW",44,0) N %DT,BDATE,EDATE,ZTIO,ZTRTN,ZTUCI,ZTSAVE,ZTSK "RTN","XWBVW",45,0) D BEG G:'$D(EDATE) END "RTN","XWBVW",46,0) ;S ZTIO="",ZTRTN="PURGE^XWBVW",ZTDESC="Purge Menu Option Audit Entries" F G="BDATE","EDATE" S ZTSAVE(G)="" "RTN","XWBVW",47,0) ;D ^%ZTLOAD K ZTIO,ZTRTN,ZTDESC,ZTUCI,ZTSAVE "RTN","XWBVW",48,0) ;Q "RTN","XWBVW",49,0) PURGE F REC=BDATE-.000001:0 S REC=$O(^XUSEC(8994,REC)) Q:REC'>0!(REC>EDATE) S DIK="^XUSEC(8994,",DA=REC D ^DIK K DA "RTN","XWBVW",50,0) END Q "RTN","XWBVW",51,0) ; "RTN","XWBVW",52,0) BEG W !!,"You will be asked for a date range to purge, Begin to End" "RTN","XWBVW",53,0) S %DT("A")="PURGE BEGIN DATE: ",%DT="AETX" D ^%DT S BDATE=Y G:Y<1 END S %DT(0)=BDATE,%DT("A")="PURGE END DATE: " D ^%DT S EDATE=Y G:Y<1 END "RTN","XWBVW",54,0) Q "RTN","XWBVW",55,0) ; "RTN","XWBVW",56,0) ; "RTN","XWBVW",57,0) ; "RTN","XWBVW",58,0) ; "RTN","XWBVW",59,0) ; "RTN","XWBVW",60,0) POPTEMPL(TEMPLATE) ;FROM AN 8994 TEMPLATE INTO 8994.8 "RTN","XWBVW",61,0) N DIC,DFN,RPC,DFNX,ORD,ORDX "RTN","XWBVW",62,0) Q:$P($G(^DIBT(TEMPLATE,0)),U,4)-8994 "RTN","XWBVW",63,0) F RPC=0:0 S RPC=$O(^DIBT(TEMPLATE,1,RPC)) Q:'RPC D POPRPC(RPC) "RTN","XWBVW",64,0) Q "RTN","XWBVW",65,0) ; "RTN","XWBVW",66,0) POPRPC(RPC) ; "RTN","XWBVW",67,0) S X=$P(^XWB(8994,RPC,0),U,2,3) I X[U,$T(@X)]"" D "RTN","XWBVW",68,0) .S (DFN,DFNX,ORD,ORDX)=0 "RTN","XWBVW",69,0) .F SEQ=0:0 S SEQ=$O(^XWB(8994,RPC,2,SEQ)) Q:'SEQ D Q:DFN "RTN","XWBVW",70,0) ..I $P(^(SEQ,0),U)["DFN" S DFNX=SEQ,DFN=$P(^(0),U,5) Q "RTN","XWBVW",71,0) ..;I $P(^(0),U)["ORIFN" S ORDX=SEQ,ORD=$P(^(0),U,5) "RTN","XWBVW",72,0) .S:DFN DFNX=DFN Q:'DFNX "RTN","XWBVW",73,0) .S DIC=8994.8,DIC(0)="L",DIC("DR")="100///"_DFNX,X=$$GET1^DIQ(8994,RPC,.01) D ^DIC "RTN","XWBVW",74,0) Q "SEC","^DIC",8994.8,8994.8,0,"AUDIT") @ "SEC","^DIC",8994.8,8994.8,0,"DD") @ "SEC","^DIC",8994.8,8994.8,0,"DEL") @ "SEC","^DIC",8994.8,8994.8,0,"LAYGO") @ "SEC","^DIC",8994.8,8994.8,0,"RD") @ "SEC","^DIC",8994.8,8994.8,0,"WR") @ "SEC","^DIC",8994.81,8994.81,0,"AUDIT") @ "SEC","^DIC",8994.81,8994.81,0,"DD") @ "SEC","^DIC",8994.81,8994.81,0,"DEL") @ "SEC","^DIC",8994.81,8994.81,0,"LAYGO") @ "SEC","^DIC",8994.81,8994.81,0,"RD") @ "SEC","^DIC",8994.81,8994.81,0,"WR") @ "SEC","^DIC",250001.1,250001.1,0,"AUDIT") @ "SEC","^DIC",250001.1,250001.1,0,"DD") @ "SEC","^DIC",250001.1,250001.1,0,"DEL") @ "SEC","^DIC",250001.1,250001.1,0,"LAYGO") @ "SEC","^DIC",250001.1,250001.1,0,"RD") @ "SEC","^DIC",250001.1,250001.1,0,"WR") @ "VER") 8.0^22.0 "^DD",8994.8,8994.8,0) FIELD^^.04^6 "^DD",8994.8,8994.8,0,"DT") 3110621 "^DD",8994.8,8994.8,0,"IX","B",8994.8,.01) "^DD",8994.8,8994.8,0,"NM","LOGGABLE RPC") "^DD",8994.8,8994.8,.01,0) NAME^RFXJ60^^0;1^K:'$D(^XWB(8994,"B")) X "^DD",8994.8,8994.8,.01,1,0) ^.1 "^DD",8994.8,8994.8,.01,1,1,0) 8994.8^B "^DD",8994.8,8994.8,.01,1,1,1) S ^XWBVW("B",$E(X,1,30),DA)="" "^DD",8994.8,8994.8,.01,1,1,2) K ^XWBVW("B",$E(X,1,30),DA) "^DD",8994.8,8994.8,.01,3) MUST BE NAME OF AN RPC "^DD",8994.8,8994.8,.01,"DT") 3110214 "^DD",8994.8,8994.8,.02,0) ACTIVE^S^1:YES;^0;2^Q "^DD",8994.8,8994.8,.02,3) 'YES' IF RPC IS TO BE AUDITED IN 'AUDIT LOG FOR RPCS' FILE "^DD",8994.8,8994.8,.02,"DT") 3110214 "^DD",8994.8,8994.8,.03,0) READABLE NAME^FJ99^^0;3^K:$L(X)>99!($L(X)<4) X "^DD",8994.8,8994.8,.03,3) Answer must be 4-99 characters in length. "^DD",8994.8,8994.8,.03,"DT") 3110326 "^DD",8994.8,8994.8,.04,0) ACTION OCCURRED^S^A:ACCESSED;M:MODIFIED;D:DELETED;C:CREATED;^0;4^Q "^DD",8994.8,8994.8,.04,"DT") 3110621 "^DD",8994.8,8994.8,100,0) PATIENT PARAMETER^NJ1,0^^100;1^K:+X'=X!(X>9)!(X<1)!(X?.E1"."1.N) X "^DD",8994.8,8994.8,100,3) TELLS WHICH PARAMETER OF THE RPC CALL IS THE 'DFN' "^DD",8994.8,8994.8,100,"DT") 3110214 "^DD",8994.8,8994.8,101,0) ORDER PARAMETER^NJ1,0^^101;1^K:+X'=X!(X>9)!(X<1)!(X?.E1"."1.N) X "^DD",8994.8,8994.8,101,3) TELLS WHICH PARAMETER OF THE RPC CALL IS THE ORDER NUMBER "^DD",8994.8,8994.8,101,"DT") 3110214 "^DD",8994.81,8994.81,0) FIELD^^100^9 "^DD",8994.81,8994.81,0,"DT") 3110215 "^DD",8994.81,8994.81,0,"NM","AUDIT LOG FOR RPCS") "^DD",8994.81,8994.81,.001,0) DATE/TIME^D^^ ^S %DT="ETXR" D ^%DT S X=Y K:Y<1 X "^DD",8994.81,8994.81,.001,21,0) ^^5^5^2890125^ "^DD",8994.81,8994.81,.001,21,1,0) Entries in this file are uniquely identified by the precise time when "^DD",8994.81,8994.81,.001,21,2,0) the option was accessed. An entry will be made as specified in the "^DD",8994.81,8994.81,.001,21,3,0) Kernel Site Parameters File. Once the date set in the 'Initiate "^DD",8994.81,8994.81,.001,21,4,0) Audit' Field has been reached, this file will be used to maintain a "^DD",8994.81,8994.81,.001,21,5,0) log according to the 'Option Audit' flag. "^DD",8994.81,8994.81,.001,"AUDIT") n "^DD",8994.81,8994.81,.001,"DT") 3110215 "^DD",8994.81,8994.81,.01,0) RPC^RP8994'^XWB(8994,^0;1^Q "^DD",8994.81,8994.81,.01,1,0) ^.1^^0 "^DD",8994.81,8994.81,.01,3) "^DD",8994.81,8994.81,.01,21,0) ^^1^1^2890125^ "^DD",8994.81,8994.81,.01,21,1,0) This field indicates the name of the option being audited. "^DD",8994.81,8994.81,.01,"AUDIT") n "^DD",8994.81,8994.81,.01,"DT") 3110215 "^DD",8994.81,8994.81,1,0) USER^P200'^VA(200,^0;2^Q "^DD",8994.81,8994.81,1,21,0) ^^1^1^2890125^ "^DD",8994.81,8994.81,1,21,1,0) This field indicates the name of the user who has accessed the option. "^DD",8994.81,8994.81,1,"AUDIT") n "^DD",8994.81,8994.81,1,"DT") 3110213 "^DD",8994.81,8994.81,2,0) DEVICE^FXJ60^^0;3^K:$L(X)>60!($L(X)<1) X "^DD",8994.81,8994.81,2,3) "^DD",8994.81,8994.81,2,21,0) ^^1^1^2890125^ "^DD",8994.81,8994.81,2,21,1,0) This field indicates the device used while the option was accessed. "^DD",8994.81,8994.81,2,"AUDIT") n "^DD",8994.81,8994.81,2,"DT") 3110215 "^DD",8994.81,8994.81,3,0) JOB^NJ8,0^^0;4^K:+X'=X!(X>99999999)!(X<1)!(X?.E1"."1N.N) X "^DD",8994.81,8994.81,3,3) TYPE A WHOLE NUMBER BETWEEN 1 AND 99999999 "^DD",8994.81,8994.81,3,21,0) ^^1^1^2890125^ "^DD",8994.81,8994.81,3,21,1,0) This field records the job number associated with the option access. "^DD",8994.81,8994.81,3,"AUDIT") n "^DD",8994.81,8994.81,3,"DT") 3110213 "^DD",8994.81,8994.81,5,0) CPU^F^^0;6^K:$L(X)>16!($L(X)<1) X "^DD",8994.81,8994.81,5,3) ANSWER MUST BE 1-16 CHARACTERS IN LENGTH "^DD",8994.81,8994.81,5,21,0) ^^1^1^2890125^ "^DD",8994.81,8994.81,5,21,1,0) This field records the CPU location of the option access. "^DD",8994.81,8994.81,5,"AUDIT") n "^DD",8994.81,8994.81,5,"DT") 3110213 "^DD",8994.81,8994.81,8,0) SUBJECT^FX^^2;E1,65^K:$L(X)>65!($L(X)<3) X "^DD",8994.81,8994.81,8,3) Answer must be 3-65 characters in length. "^DD",8994.81,8994.81,8,21,0) ^^3^3^2911230^ "^DD",8994.81,8994.81,8,21,1,0) For a Server-type option this field will contain the subject of "^DD",8994.81,8994.81,8,21,2,0) the MailMan message that activated (or tried to activate) the "^DD",8994.81,8994.81,8,21,3,0) option. "^DD",8994.81,8994.81,8,"AUDIT") n "^DD",8994.81,8994.81,8,"DT") 3110215 "^DD",8994.81,8994.81,9,0) ACTION^F^^3;E1,245^K:$L(X)>245!($L(X)<1) X "^DD",8994.81,8994.81,9,3) Answer must be 1-245 characters in length. "^DD",8994.81,8994.81,9,21,0) ^^3^3^2911230^ "^DD",8994.81,8994.81,9,21,1,0) For a Server-type option this field will contain the resulting action "^DD",8994.81,8994.81,9,21,2,0) of a server request. In the event of an error, the error will be "^DD",8994.81,8994.81,9,21,3,0) trapped by the server software and entered into this field. "^DD",8994.81,8994.81,9,"AUDIT") n "^DD",8994.81,8994.81,9,"DT") 3110215 "^DD",8994.81,8994.81,100,0) PATIENT^P2'^DPT(^100;1^Q "^DD",8994.81,8994.81,100,"DT") 3110214 "^DD",250001.1,250001.1,0) FIELD^^4^10 "^DD",250001.1,250001.1,0,"DDA") N "^DD",250001.1,250001.1,0,"DT") 3110620 "^DD",250001.1,250001.1,0,"IX","B",250001.1,.01) "^DD",250001.1,250001.1,0,"NM","AUDIT LOG FOR MU") "^DD",250001.1,250001.1,.01,0) AUDIT ID^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X "^DD",250001.1,250001.1,.01,1,0) ^.1 "^DD",250001.1,250001.1,.01,1,1,0) 250001.1^B "^DD",250001.1,250001.1,.01,1,1,1) S ^XUSEC(250001.1,"B",$E(X,1,30),DA)="" "^DD",250001.1,250001.1,.01,1,1,2) K ^XUSEC(250001.1,"B",$E(X,1,30),DA) "^DD",250001.1,250001.1,.01,3) Answer must be 3-30 characters in length. "^DD",250001.1,250001.1,.01,"DT") 3110620 "^DD",250001.1,250001.1,.02,0) PATIENT NAME^P2'^DPT(^0;2^Q "^DD",250001.1,250001.1,.02,"DT") 3110620 "^DD",250001.1,250001.1,.03,0) USER NAME^P200'^VA(200,^0;3^Q "^DD",250001.1,250001.1,.03,"DT") 3110620 "^DD",250001.1,250001.1,.04,0) AUDIT DTTM^D^^0;4^S %DT="ESTXR" D ^%DT S X=Y K:Y<1 X "^DD",250001.1,250001.1,.04,"DT") 3110620 "^DD",250001.1,250001.1,.05,0) ACTION OCCURRED^S^C:CREATED;M:MODIFIED;A:ACCESSED;D:DELETED;O:OTHER;^0;5^Q "^DD",250001.1,250001.1,.05,3) "^DD",250001.1,250001.1,.05,"DT") 3110620 "^DD",250001.1,250001.1,.06,0) ACTION INDICATION^F^^0;6^K:$L(X)>80!($L(X)<1) X "^DD",250001.1,250001.1,.06,3) Answer must be 1-80 characters in length. "^DD",250001.1,250001.1,.06,"DT") 3110620 "^DD",250001.1,250001.1,1,0) AUDIT DATE^CD^^ ; ^S Y(250001.1,1,1)=$S($D(^XUSEC(250001.1,D0,0)):^(0),1:"") S X=$P(Y(250001.1,1,1),U,4),X=X S X=X\1,X=$P(X,".",1) "^DD",250001.1,250001.1,1,9) ^ "^DD",250001.1,250001.1,1,9.01) 250001.1^.04 "^DD",250001.1,250001.1,1,9.1) DATE(INTERNAL(#.04)\1) "^DD",250001.1,250001.1,2,0) AUDIT TIME^CF^^ ; ^S Y(250001.1,2,1)=$S($D(^XUSEC(250001.1,D0,0)):^(0),1:"") S X=$P(Y(250001.1,2,1),U,4),X=X#1_"000000",X=$E(X,2,3)_":"_$E(X,4,5)_":"_$E(X,6,7) "^DD",250001.1,250001.1,2,9) ^ "^DD",250001.1,250001.1,2,9.01) 250001.1^1;250001.1^.04 "^DD",250001.1,250001.1,2,9.1) INTERNAL(AUDIT DTTM)#1 "^DD",250001.1,250001.1,2,9.2) X "N I,Y "_$P(^DD(250001.1,1,0),U,5,99) S Y(250001.1,2,2)=X S Y(250001.1,2,1)=$S($D(^XUSEC(250001.1,D0,0)):^(0),1:"") S X=$P(Y(250001.1,2,1),U,4),X=X S X=XY(250001.1,2,2) "^DD",250001.1,250001.1,3,0) USER ID^CJ15^^ ; ^S Y(250001.1,3,1)=$S($D(^XUSEC(250001.1,D0,0)):^(0),1:"") S X=$P(Y(250001.1,3,1),U,3),X=X "^DD",250001.1,250001.1,3,9) ^ "^DD",250001.1,250001.1,3,9.01) 250001.1^.03 "^DD",250001.1,250001.1,3,9.1) INTERNAL(#.03) "^DD",250001.1,250001.1,4,0) PATIENT ID^C^^ ; ^S Y(250001.1,4,1)=$S($D(^XUSEC(250001.1,D0,0)):^(0),1:"") S X=$P(Y(250001.1,4,1),U,2),X=X "^DD",250001.1,250001.1,4,9) ^ "^DD",250001.1,250001.1,4,9.01) 250001.1^.02 "^DD",250001.1,250001.1,4,9.1) INTERNAL(PATIENT NAME) "^DIC",8994.8,8994.8,0) LOGGABLE RPC^8994.8 "^DIC",8994.8,8994.8,0,"GL") ^XWBVW( "^DIC",8994.8,8994.8,"%D",0) ^^10^10^3110331^ "^DIC",8994.8,8994.8,"%D",1,0) THIS FILE LISTS THE NAMES OF "^DIC",8994.8,8994.8,"%D",2,0) RPCS THAT MAY NEED TO BE AUDITED IN THE 'AUDIT LOG FOR RPCS'. SITE TURNS "^DIC",8994.8,8994.8,"%D",3,0) THE 'ACTIVE' FIELD ON OR OFF TO CONTROL THIS. THERE IS ALSO A 'READABLE "^DIC",8994.8,8994.8,"%D",4,0) NAME' FIELD THAT COULD BE USED TO TRANSLATE 'ORQQPL PROBLEM LIST' TO "^DIC",8994.8,8994.8,"%D",5,0) SOMETHING MORE USER-FRIENDLY LIKE 'SHOW PATIENT'S PROBLEM LIST'. THIS "^DIC",8994.8,8994.8,"%D",6,0) FILE ALSO HAS INFORMATION ON HOW TO INTERCEPT INPUT PARAMETERS AT THE "^DIC",8994.8,8994.8,"%D",7,0) TIME OF THE RPC CALL SO AS TO IDENTIFY WHICH PATIENT IS BEING DEALT WITH "^DIC",8994.8,8994.8,"%D",8,0) ON THE CLIENT SIDE. NOTE THAT AN ENTRY IN THIS FILE NEED NOT NECESSARILY "^DIC",8994.8,8994.8,"%D",9,0) CORRESPOND TO AN ACTUAL RPC IN FILE 8994 AT THE SITE, BECAUSE THE .01 "^DIC",8994.8,8994.8,"%D",10,0) FIELD IS FREE-TEXT, NOT A POINTER. "^DIC",8994.8,"B","LOGGABLE RPC",8994.8) "^DIC",8994.81,8994.81,0) AUDIT LOG FOR RPCS^8994.81 "^DIC",8994.81,8994.81,0,"GL") ^XUSEC(8994, "^DIC",8994.81,8994.81,"%D",0) ^^9^9^3110331^ "^DIC",8994.81,8994.81,"%D",1,0) THIS FILE IS ANALOGOUS "^DIC",8994.81,8994.81,"%D",2,0) TO THE EXISTING VA FILE NAMED 'AUDIT LOG FOR OPTIONS'. "^DIC",8994.81,8994.81,"%D",3,0) IT WILL BE POPULATED AS USERS "^DIC",8994.81,8994.81,"%D",4,0) RUN CERTAIN RPC'S. THIS IS THE FILE OUT OF WHICH REPORTS WILL BE NEEDED. "^DIC",8994.81,8994.81,"%D",5,0) "^DIC",8994.81,8994.81,"%D",6,0) "^DIC",8994.81,8994.81,"%D",7,0) File 8994.8 establishes "^DIC",8994.81,8994.81,"%D",8,0) when and how a log of RPC "^DIC",8994.81,8994.81,"%D",9,0) usage will be recorded in this file. "^DIC",8994.81,"B","AUDIT LOG FOR RPCS",8994.81) "^DIC",250001.1,250001.1,0) AUDIT LOG FOR MU^250001.1 "^DIC",250001.1,250001.1,0,"GL") ^XUSEC(250001.1, "^DIC",250001.1,250001.1,"%D",0) ^^1^1^3110620^ "^DIC",250001.1,250001.1,"%D",1,0) Audit Log for Meaningful Use "^DIC",250001.1,"B","AUDIT LOG FOR MU",250001.1) **END** **END**