diff --git a/p/CCRDPT.m b/p/CCRDPT.m index 12d7a38..02f26ed 100644 --- a/p/CCRDPT.m +++ b/p/CCRDPT.m @@ -1,5 +1,5 @@ CCRDPT ;CCRCCD/SMH - Routines to Extract Patient Data for CCDCCR; 6/15/08 - ;;0.1;CCRCCD;;Jun 15, 2008; + ;;0.1;CCRCCD;;Jun 15, 2008; ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU ;General Public License See attached copy of the License. ; @@ -16,161 +16,156 @@ CCRDPT ;CCRCCD/SMH - Routines to Extract Patient Data for CCDCCR; 6/15/08 ;You should have received a copy of the GNU General Public License along ;with this program; if not, write to the Free Software Foundation, Inc., ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - ; NOTE TO PROGRAMMER: You need to call INIT(DPT) to initialize; and - ; DESTROY to clean-up. - - ; The first line of every routine tests if the global exists. - - ; CCRDPT 83 lines CCRCCD/SMH - Routines to Extract Patient Data for - ; INIT 9 lines Copy DFN global to a local variable - ; DESTROY 6 lines Kill local variable - ; FAMILY 6 lines Family Name - ; GIVEN 6 lines Given Name - ; MIDDLE 6 lines Middle Name - ; SUFFIX 6 lines Suffix Name - ; DISPNAME 5 lines Display Name - ; DOB 6 lines Date of Birth - ; GENDER 4 lines Get Gender - ; SSN 4 lines Get SSN for ID - ; ADDRTYPE 4 lines Get Home Address - ; ADDR1 4 lines Get Home Address line 1 - ; ADDR2 5 lines Get Home Address line 2 - ; CITY 4 lines Get City for Home Address - ; STATE 11 lines Get State for Home Address - ; ZIP 4 lines Get Zip code for Home Address - ; COUNTY 4 lines Get County for our Address - ; COUNTRY 4 lines Get Country for our Address - ; RESTEL 4 lines Residential Telephone - ; WORKTEL 4 lines Work Telephone - ; EMAIL 4 lines Email Adddress - ; CELLTEL 4 lines Cell Phone - ; NOK1FAM 6 lines Next of Kin 1 (NOK1) Family Name - ; NOK1GIV 6 lines NOK1 Given Name - ; NOK1MID 6 lines NOK1 Middle Name - ; NOK1SUF 6 lines NOK1 Suffi Name - ; NOK1DISP 5 lines NOK1 Display Name - ; NOK1REL 4 lines NOK1 Relationship to the patient - ; NOK1ADD1 4 lines NOK1 Address 1 - ; NOK1ADD2 5 lines NOK1 Address 2 - ; NOK1CITY 4 lines NOK1 City - ; NOK1STAT 5 lines NOK1 State - ; NOK1ZIP 4 lines NOK1 Zip Code - ; NOK1HTEL; 4 lines NOK1 Home Telephone - ; NOK1WTEL; 4 lines NOK1 Work Telephone - ; NOK1SAME; 4 lines Is NOK1's Address the same the patient? - ; NOK2FAM 6 lines NOK2 Family Name - ; NOK2GIV 6 lines NOK2 Given Name - ; NOK2MID 6 lines NOK2 Middle Name - ; NOK2SUF 5 lines NOK2 Suffi Name - ; NOK2DISP 5 lines NOK2 Display Name - ; NOK2REL 4 lines NOK2 Relationship to the patient - ; NOK2ADD1 4 lines NOK2 Address 1 - ; NOK2ADD2 5 lines NOK2 Address 2 - ; NOK2CITY 4 lines NOK2 City - ; NOK2STAT 5 lines NOK2 State - ; NOK2ZIP 4 lines NOK2 Zip Code - ; NOK2HTEL; 4 lines NOK2 Home Telephone - ; NOK2WTEL; 4 lines NOK2 Work Telephone - ; NOK2SAME; 4 lines Is NOK2's Address the same the patient? - ; EMERFAM 6 lines Emergency Contact (EMER) Family Name - ; EMERGIV 6 lines EMER Given Name - ; EMERMID 6 lines EMER Middle Name - ; EMERSUF 5 lines EMER Suffi Name - ; EMERDISP 5 lines EMER Display Name - ; EMERREL 4 lines EMER Relationship to the patient - ; EMERADD1 4 lines EMER Address 1 - ; EMERADD2 5 lines EMER Address 2 - ; EMERCITY 4 lines EMER City - ; EMERSTAT 5 lines EMER State - ; EMERZIP 4 lines EMER Zip Code - ; EMERHTEL; 4 lines EMER Home Telephone - ; EMERWTEL; 4 lines EMER Work Telephone - ; EMERSAME; 4 lines Is EMER's Address the same the NOK? - + ; NOTE TO PROGRAMMER: You need to call INIT(DPT) to initialize; and + ; DESTROY to clean-up. + ; The first line of every routine tests if the global exists. + ; + ; CCRDPT 83 lines CCRCCD/SMH - Routines to Extract Patient Data for + ; INIT 9 lines Copy DFN global to a local variable + ; DESTROY 6 lines Kill local variable + ; FAMILY 6 lines Family Name + ; GIVEN 6 lines Given Name + ; MIDDLE 6 lines Middle Name + ; SUFFIX 6 lines Suffix Name + ; DISPNAME 5 lines Display Name + ; DOB 6 lines Date of Birth + ; GENDER 4 lines Get Gender + ; SSN 4 lines Get SSN for ID + ; ADDRTYPE 4 lines Get Home Address + ; ADDR1 4 lines Get Home Address line 1 + ; ADDR2 5 lines Get Home Address line 2 + ; CITY 4 lines Get City for Home Address + ; STATE 11 lines Get State for Home Address + ; ZIP 4 lines Get Zip code for Home Address + ; COUNTY 4 lines Get County for our Address + ; COUNTRY 4 lines Get Country for our Address + ; RESTEL 4 lines Residential Telephone + ; WORKTEL 4 lines Work Telephone + ; EMAIL 4 lines Email Adddress + ; CELLTEL 4 lines Cell Phone + ; NOK1FAM 6 lines Next of Kin 1 (NOK1) Family Name + ; NOK1GIV 6 lines NOK1 Given Name + ; NOK1MID 6 lines NOK1 Middle Name + ; NOK1SUF 6 lines NOK1 Suffi Name + ; NOK1DISP 5 lines NOK1 Display Name + ; NOK1REL 4 lines NOK1 Relationship to the patient + ; NOK1ADD1 4 lines NOK1 Address 1 + ; NOK1ADD2 5 lines NOK1 Address 2 + ; NOK1CITY 4 lines NOK1 City + ; NOK1STAT 5 lines NOK1 State + ; NOK1ZIP 4 lines NOK1 Zip Code + ; NOK1HTEL; 4 lines NOK1 Home Telephone + ; NOK1WTEL; 4 lines NOK1 Work Telephone + ; NOK1SAME; 4 lines Is NOK1's Address the same the patient? + ; NOK2FAM 6 lines NOK2 Family Name + ; NOK2GIV 6 lines NOK2 Given Name + ; NOK2MID 6 lines NOK2 Middle Name + ; NOK2SUF 5 lines NOK2 Suffi Name + ; NOK2DISP 5 lines NOK2 Display Name + ; NOK2REL 4 lines NOK2 Relationship to the patient + ; NOK2ADD1 4 lines NOK2 Address 1 + ; NOK2ADD2 5 lines NOK2 Address 2 + ; NOK2CITY 4 lines NOK2 City + ; NOK2STAT 5 lines NOK2 State + ; NOK2ZIP 4 lines NOK2 Zip Code + ; NOK2HTEL; 4 lines NOK2 Home Telephone + ; NOK2WTEL; 4 lines NOK2 Work Telephone + ; NOK2SAME; 4 lines Is NOK2's Address the same the patient? + ; EMERFAM 6 lines Emergency Contact (EMER) Family Name + ; EMERGIV 6 lines EMER Given Name + ; EMERMID 6 lines EMER Middle Name + ; EMERSUF 5 lines EMER Suffi Name + ; EMERDISP 5 lines EMER Display Name + ; EMERREL 4 lines EMER Relationship to the patient + ; EMERADD1 4 lines EMER Address 1 + ; EMERADD2 5 lines EMER Address 2 + ; EMERCITY 4 lines EMER City + ; EMERSTAT 5 lines EMER State + ; EMERZIP 4 lines EMER Zip Code + ; EMERHTEL; 4 lines EMER Home Telephone + ; EMERWTEL; 4 lines EMER Work Telephone + ; EMERSAME; 4 lines Is EMER's Address the same the NOK? + ; W "No Entry at top!" Q - - ; The following is a map of the relevant data in the patient global. - ; - ; ^DPT(D0,0)= (#.01) NAME [1F] ^ (#.02) SEX [2S] ^ (#.03) DATE OF BIRTH [3D] ^ - ; ==>^ (#.05) MARITAL STATUS [5P:11] ^ (#.06) RACE [6P:10] ^ (#.07) - ; ==>OCCUPATION [7F] ^ (#.08) RELIGIOUS PREFERENCE [8P:13] ^ (#.09) - ; ==>SOCIAL SECURITY NUMBER [9F] ^ (#.091) REMARKS [10F] ^ (#.092) - ; ==>PLACE OF BIRTH [CITY] [11F] ^ (#.093) PLACE OF BIRTH [STATE] - ; ==>[12P:5] ^ ^ (#.14) CURRENT MEANS TEST STATUS [14P:408.32] ^ - ; ==>(#.096) WHO ENTERED PATIENT [15P:200] ^ (#.097) DATE ENTERED INTO - ; ==>FILE [16D] ^ (#.098) HOW WAS PATIENT ENTERED? [17S] ^ (#.081) - ; ==>DUPLICATE STATUS [18S] ^ (#.082) PATIENT MERGED TO [19P:2] ^ - ; ==>(#.083) CHECK FOR DUPLICATE [20S] ^ (#.6) TEST PATIENT INDICATOR - ; ==>[21S] ^ - ; ^DPT(D0,.01,0)=^2.01^^ (#1) ALIAS - ; ^DPT(D0,.01,D1,0)= (#.01) ALIAS [1F] ^ (#1) ALIAS SSN [2F] ^ (#100.03) ALIAS - ; ==>COMPONENTS [3P:20] ^ - ; ^DPT(D0,.11)= (#.111) STREET ADDRESS [LINE 1] [1F] ^ (#.112) STREET ADDRESS - ; ==>[LINE 2] [2F] ^ (#.113) STREET ADDRESS [LINE 3] [3F] ^ (#.114) - ; ==>CITY [4F] ^ (#.115) STATE [5P:5] ^ (#.116) ZIP CODE [6F] ^ - ; ==>(#.117) COUNTY [7N] ^ ^ ^ ^ ^ (#.1112) ZIP+4 [12F] ^ - ; ==>(#.118) ADDRESS CHANGE DT/TM [13D] ^ (#.119) ADDRESS CHANGE - ; ==>SOURCE [14S] ^ (#.12) ADDRESS CHANGE SITE [15P:4] ^ (#.121) BAD - ; ==>ADDRESS INDICATOR [16S] ^ (#.122) ADDRESS CHANGE USER [17P:200] - ; ==>^ - ; ^DPT(D0,.121)= (#.1211) TEMPORARY STREET [LINE 1] [1F] ^ (#.1212) TEMPORARY - ; ==>STREET [LINE 2] [2F] ^ (#.1213) TEMPORARY STREET [LINE 3] [3F] - ; ==>^ (#.1214) TEMPORARY CITY [4F] ^ (#.1215) TEMPORARY STATE - ; ==>[5P:5] ^ (#.1216) TEMPORARY ZIP CODE [6F] ^ (#.1217) TEMPORARY - ; ==>ADDRESS START DATE [7D] ^ (#.1218) TEMPORARY ADDRESS END DATE - ; ==>[8D] ^ (#.12105) TEMPORARY ADDRESS ACTIVE? [9S] ^ (#.1219) - ; ==>TEMPORARY PHONE NUMBER [10F] ^ (#.12111) TEMPORARY ADDRESS - ; ==>COUNTY [11N] ^ (#.12112) TEMPORARY ZIP+4 [12F] ^ (#.12113) - ; ==>TEMPORARY ADDRESS CHANGE DT/TM [13D] ^ - ; ^DPT(D0,.121)= (#.12114) TEMPORARY ADDRESS CHANGE SITE [14P:4] ^ - ; ^DPT(D0,.13)= (#.131) PHONE NUMBER [RESIDENCE] [1F] ^ (#.132) PHONE NUMBER - ; ==>[WORK] [2F] ^ (#.133) EMAIL ADDRESS [3F] ^ (#.134) PHONE NUMBER - ; ==>[CELLULAR] [4F] ^ (#.135) PAGER NUMBER [5F] ^ (#.136) EMAIL - ; ==>ADDRESS CHANGE DT/TM [6D] ^ (#.137) EMAIL ADDRESS CHANGE SOURCE - ; ==>[7S] ^ (#.138) EMAIL ADDRESS CHANGE SITE [8P:4] ^ (#.139) - ; ==>CELLULAR NUMBER CHANGE DT/TM [9D] ^ (#.1311) CELLULAR NUMBER - ; ==>CHANGE SOURCE [10S] ^ (#.13111) CELLULAR NUMBER CHANGE SITE - ; ==>[11P:4] ^ (#.1312) PAGER NUMBER CHANGE DT/TM [12D] ^ (#.1313) - ; ==>PAGER NUMBER CHANGE SOURCE [13S] ^ (#.1314) PAGER NUMBER CHANGE - ; ==>SITE [14P:4] ^ - ; ^DPT(D0,.21)= (#.211) K-NAME OF PRIMARY NOK [1F] ^ (#.212) K-RELATIONSHIP TO - ; ==>PATIENT [2F] ^ (#.213) K-STREET ADDRESS [LINE 1] [3F] ^ (#.214) - ; ==>K-STREET ADDRESS [LINE 2] [4F] ^ (#.215) K-STREET ADDRESS [LINE - ; ==>3] [5F] ^ - ; ^DPT(D0,.21)= (#.216) K-CITY [6F] ^ (#.217) K-STATE [7P:5] ^ (#.218) K-ZIP - ; ==>CODE [8F] ^ (#.219) K-PHONE NUMBER [9F] ^ (#.2125) K-ADDRESS - ; ==>SAME AS PATIENT'S? [10S] ^ (#.21011) K-WORK PHONE NUMBER [11F] - ; ==>^ - ; ^DPT(D0,.211)= (#.2191) K2-NAME OF SECONDARY NOK [1F] ^ (#.2192) - ; ==>K2-RELATIONSHIP TO PATIENT [2F] ^ (#.2193) K2-STREET ADDRESS - ; ==>[LINE 1] [3F] ^ (#.2194) K2-STREET ADDRESS [LINE 2] [4F] ^ - ; ==>(#.2195) K2-STREET ADDRESS [LINE 3] [5F] ^ (#.2196) K2-CITY - ; ==>[6F] ^ (#.2197) K2-STATE [7P:5] ^ (#.2198) K2-ZIP CODE [8F] ^ - ; ==>(#.2199) K2-PHONE NUMBER [9F] ^ (#.21925) K2-ADDRESS SAME AS - ; ==>PATIENT'S? [10S] ^ (#.211011) K2-WORK PHONE NUMBER [11F] ^ - ; ^DPT(D0,.25)= (#.251) SPOUSE'S EMPLOYER NAME [1F] ^ (#.252) SPOUSE'S EMP - ; ==>STREET [LINE 1] [2F] ^ (#.253) SPOUSE'S EMP STREET [LINE 2] - ; ==>[3F] ^ (#.254) SPOUSE'S EMP STREET [LINE 3] [4F] ^ (#.255) - ; ==>SPOUSE'S EMPLOYER'S CITY [5F] ^ (#.256) SPOUSE'S EMPLOYER'S - ; ==>STATE [6P:5] ^ (#.257) SPOUSE'S EMP ZIP CODE [7F] ^ (#.258) - ; ==>SPOUSE'S EMP PHONE NUMBER [8F] ^ ^ ^ ^ ^ ^ (#.2514) - ; ==>SPOUSE'S OCCUPATION [14F] ^ (#.2515) SPOUSE'S EMPLOYMENT STATUS - ; ==>[15S] ^ (#.2516) SPOUSE'S RETIREMENT DATE [16D] ^ - ; ^DPT(D0,.33)= (#.331) E-NAME [1F] ^ (#.332) E-RELATIONSHIP TO PATIENT [2F] ^ - ; ==>(#.333) E-STREET ADDRESS [LINE 1] [3F] ^ (#.334) E-STREET - ; ==>ADDRESS [LINE 2] [4F] ^ (#.335) E-STREET ADDRESS [LINE 3] [5F] - ; ==>^ (#.336) E-CITY [6F] ^ (#.337) E-STATE [7P:5] ^ (#.338) E-ZIP - ; ==>CODE [8F] ^ (#.339) E-PHONE NUMBER [9F] ^ (#.3305) E-EMER. - ; ==>CONTACT SAME AS NOK? [10S] ^ (#.33011) E-WORK PHONE NUMBER - ; ==>[11F] ^ - -INIT(DFN) ; Copy DFN global to a local variable; PUBLIC - ; INPUT: Patient IEN (DFN) - ; OUTPUT: PT in the Symbol Table, representing the patient global - - ; Instead of accessing a global each single read (SLOOOOW) - ; read it off a local variable stored in Memory. + ; The following is a map of the relevant data in the patient global. + ; + ; ^DPT(D0,0)= (#.01) NAME [1F] ^ (#.02) SEX [2S] ^ (#.03) DATE OF BIRTH [3D] ^ + ; ==>^ (#.05) MARITAL STATUS [5P:11] ^ (#.06) RACE [6P:10] ^ (#.07) + ; ==>OCCUPATION [7F] ^ (#.08) RELIGIOUS PREFERENCE [8P:13] ^ (#.09) + ; ==>SOCIAL SECURITY NUMBER [9F] ^ (#.091) REMARKS [10F] ^ (#.092) + ; ==>PLACE OF BIRTH [CITY] [11F] ^ (#.093) PLACE OF BIRTH [STATE] + ; ==>[12P:5] ^ ^ (#.14) CURRENT MEANS TEST STATUS [14P:408.32] ^ + ; ==>(#.096) WHO ENTERED PATIENT [15P:200] ^ (#.097) DATE ENTERED INTO + ; ==>FILE [16D] ^ (#.098) HOW WAS PATIENT ENTERED? [17S] ^ (#.081) + ; ==>DUPLICATE STATUS [18S] ^ (#.082) PATIENT MERGED TO [19P:2] ^ + ; ==>(#.083) CHECK FOR DUPLICATE [20S] ^ (#.6) TEST PATIENT INDICATOR + ; ==>[21S] ^ + ; ^DPT(D0,.01,0)=^2.01^^ (#1) ALIAS + ; ^DPT(D0,.01,D1,0)= (#.01) ALIAS [1F] ^ (#1) ALIAS SSN [2F] ^ (#100.03) ALIAS + ; ==>COMPONENTS [3P:20] ^ + ; ^DPT(D0,.11)= (#.111) STREET ADDRESS [LINE 1] [1F] ^ (#.112) STREET ADDRESS + ; ==>[LINE 2] [2F] ^ (#.113) STREET ADDRESS [LINE 3] [3F] ^ (#.114) + ; ==>CITY [4F] ^ (#.115) STATE [5P:5] ^ (#.116) ZIP CODE [6F] ^ + ; ==>(#.117) COUNTY [7N] ^ ^ ^ ^ ^ (#.1112) ZIP+4 [12F] ^ + ; ==>(#.118) ADDRESS CHANGE DT/TM [13D] ^ (#.119) ADDRESS CHANGE + ; ==>SOURCE [14S] ^ (#.12) ADDRESS CHANGE SITE [15P:4] ^ (#.121) BAD + ; ==>ADDRESS INDICATOR [16S] ^ (#.122) ADDRESS CHANGE USER [17P:200] + ; ==>^ + ; ^DPT(D0,.121)= (#.1211) TEMPORARY STREET [LINE 1] [1F] ^ (#.1212) TEMPORARY + ; ==>STREET [LINE 2] [2F] ^ (#.1213) TEMPORARY STREET [LINE 3] [3F] + ; ==>^ (#.1214) TEMPORARY CITY [4F] ^ (#.1215) TEMPORARY STATE + ; ==>[5P:5] ^ (#.1216) TEMPORARY ZIP CODE [6F] ^ (#.1217) TEMPORARY + ; ==>ADDRESS START DATE [7D] ^ (#.1218) TEMPORARY ADDRESS END DATE + ; ==>[8D] ^ (#.12105) TEMPORARY ADDRESS ACTIVE? [9S] ^ (#.1219) + ; ==>TEMPORARY PHONE NUMBER [10F] ^ (#.12111) TEMPORARY ADDRESS + ; ==>COUNTY [11N] ^ (#.12112) TEMPORARY ZIP+4 [12F] ^ (#.12113) + ; ==>TEMPORARY ADDRESS CHANGE DT/TM [13D] ^ + ; ^DPT(D0,.121)= (#.12114) TEMPORARY ADDRESS CHANGE SITE [14P:4] ^ + ; ^DPT(D0,.13)= (#.131) PHONE NUMBER [RESIDENCE] [1F] ^ (#.132) PHONE NUMBER + ; ==>[WORK] [2F] ^ (#.133) EMAIL ADDRESS [3F] ^ (#.134) PHONE NUMBER + ; ==>[CELLULAR] [4F] ^ (#.135) PAGER NUMBER [5F] ^ (#.136) EMAIL + ; ==>ADDRESS CHANGE DT/TM [6D] ^ (#.137) EMAIL ADDRESS CHANGE SOURCE + ; ==>[7S] ^ (#.138) EMAIL ADDRESS CHANGE SITE [8P:4] ^ (#.139) + ; ==>CELLULAR NUMBER CHANGE DT/TM [9D] ^ (#.1311) CELLULAR NUMBER + ; ==>CHANGE SOURCE [10S] ^ (#.13111) CELLULAR NUMBER CHANGE SITE + ; ==>[11P:4] ^ (#.1312) PAGER NUMBER CHANGE DT/TM [12D] ^ (#.1313) + ; ==>PAGER NUMBER CHANGE SOURCE [13S] ^ (#.1314) PAGER NUMBER CHANGE + ; ==>SITE [14P:4] ^ + ; ^DPT(D0,.21)= (#.211) K-NAME OF PRIMARY NOK [1F] ^ (#.212) K-RELATIONSHIP TO + ; ==>PATIENT [2F] ^ (#.213) K-STREET ADDRESS [LINE 1] [3F] ^ (#.214) + ; ==>K-STREET ADDRESS [LINE 2] [4F] ^ (#.215) K-STREET ADDRESS [LINE + ; ==>3] [5F] ^ + ; ^DPT(D0,.21)= (#.216) K-CITY [6F] ^ (#.217) K-STATE [7P:5] ^ (#.218) K-ZIP + ; ==>CODE [8F] ^ (#.219) K-PHONE NUMBER [9F] ^ (#.2125) K-ADDRESS + ; ==>SAME AS PATIENT'S? [10S] ^ (#.21011) K-WORK PHONE NUMBER [11F] + ; ==>^ + ; ^DPT(D0,.211)= (#.2191) K2-NAME OF SECONDARY NOK [1F] ^ (#.2192) + ; ==>K2-RELATIONSHIP TO PATIENT [2F] ^ (#.2193) K2-STREET ADDRESS + ; ==>[LINE 1] [3F] ^ (#.2194) K2-STREET ADDRESS [LINE 2] [4F] ^ + ; ==>(#.2195) K2-STREET ADDRESS [LINE 3] [5F] ^ (#.2196) K2-CITY + ; ==>[6F] ^ (#.2197) K2-STATE [7P:5] ^ (#.2198) K2-ZIP CODE [8F] ^ + ; ==>(#.2199) K2-PHONE NUMBER [9F] ^ (#.21925) K2-ADDRESS SAME AS + ; ==>PATIENT'S? [10S] ^ (#.211011) K2-WORK PHONE NUMBER [11F] ^ + ; ^DPT(D0,.25)= (#.251) SPOUSE'S EMPLOYER NAME [1F] ^ (#.252) SPOUSE'S EMP + ; ==>STREET [LINE 1] [2F] ^ (#.253) SPOUSE'S EMP STREET [LINE 2] + ; ==>[3F] ^ (#.254) SPOUSE'S EMP STREET [LINE 3] [4F] ^ (#.255) + ; ==>SPOUSE'S EMPLOYER'S CITY [5F] ^ (#.256) SPOUSE'S EMPLOYER'S + ; ==>STATE [6P:5] ^ (#.257) SPOUSE'S EMP ZIP CODE [7F] ^ (#.258) + ; ==>SPOUSE'S EMP PHONE NUMBER [8F] ^ ^ ^ ^ ^ ^ (#.2514) + ; ==>SPOUSE'S OCCUPATION [14F] ^ (#.2515) SPOUSE'S EMPLOYMENT STATUS + ; ==>[15S] ^ (#.2516) SPOUSE'S RETIREMENT DATE [16D] ^ + ; ^DPT(D0,.33)= (#.331) E-NAME [1F] ^ (#.332) E-RELATIONSHIP TO PATIENT [2F] ^ + ; ==>(#.333) E-STREET ADDRESS [LINE 1] [3F] ^ (#.334) E-STREET + ; ==>ADDRESS [LINE 2] [4F] ^ (#.335) E-STREET ADDRESS [LINE 3] [5F] + ; ==>^ (#.336) E-CITY [6F] ^ (#.337) E-STATE [7P:5] ^ (#.338) E-ZIP + ; ==>CODE [8F] ^ (#.339) E-PHONE NUMBER [9F] ^ (#.3305) E-EMER. + ; ==>CONTACT SAME AS NOK? [10S] ^ (#.33011) E-WORK PHONE NUMBER + ; ==>[11F] ^DFN) ; Copy DFN global to a local variable; PUBLIC + ; INPUT: Patient IEN (DFN) + ; OUTPUT: PT in the Symbol Table, representing the patient global + ; Instead of accessing a global each single read (SLOOOOW) + ; read it off a local variable stored in Memory. +INIT(DFN) ; M PT=^DPT(DFN) Q ; diff --git a/p/CCRDPTT.m b/p/CCRDPTT.m index 9ac3906..3cf5aa9 100644 --- a/p/CCRDPTT.m +++ b/p/CCRDPTT.m @@ -1,4 +1,5 @@ CCRDPTT ; Unit Tester... + ;;0.1;CCRCCD;;Jun 15, 2008; ; ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU ;General Public License See attached copy of the License. @@ -26,19 +27,19 @@ CCRDPTT ; Unit Tester... ; STATS(105,0)="GIVEN() ; Given Name; PUBLIC; Extrinsic" ; STATS(111,0)="MIDDLE() ; Middle Name; PUBLIC; Extrinsic " ; etc. - + ; ; Load Routine Entry points; We get a sweeeeeet array D ANALYZE^ARJTXRD("CCRDPT",.OUT) ; Analyze a routine in the directory N X,Y ; Select Patient S DIC=2,DIC(0)="AEMQ" D ^DIC - + ; W "You have selected patient "_Y,!! D INIT^CCRDPT($P(Y,"^")) - ZWR PT + ; ZWR PT N I S I=165 F S I=$O(OUT(I)) Q:I="" D . W "OUT("_I_",0)"_" is "_$P(OUT(I,0)," ")_" " . W "valued at " . W @("$$"_$P(OUT(I,0),"()")_"^"_"CCRDPT"_"()") . W ! - Q + Q \ No newline at end of file diff --git a/p/CCRSYS.m b/p/CCRSYS.m index 102b576..f3a68e5 100644 --- a/p/CCRSYS.m +++ b/p/CCRSYS.m @@ -18,18 +18,17 @@ CCRSYS ;CCDCCR/SMH - Routine to Get EHR System Information;6JUL2008 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ; W "Enter at appropriate points." Q - + ; ; Originally, I was going to use VEPERVER, but VEPERVER ; actually kills ^TMP($J), outputs it to the screen in a user-friendly ; manner (press any key to continue), ; and is really a very half finished routine - + ; ; So for now, I am hard-coding the values. - + ; SYSNAME() ;Get EHR System Name; PUBLIC; Extrinsic Q "WorldVistA EHR/VOE" ; SYSVER() ;Get EHR System Version; PUBLIC; Extrinsic Q "1.0" ; - diff --git a/p/CCRUNIT.m b/p/CCRUNIT.m index 2590ced..fe7927f 100644 --- a/p/CCRUNIT.m +++ b/p/CCRUNIT.m @@ -1,22 +1,23 @@ CCRUNIT ; A routine that tests some crap - Q - ; + ;;0.1;CCDCCR;;JUL 13, 2007;Build 0 + Q + ; MEDS - N DEBUG S DEBUG=0 - N DFN S DFN=1 - K ^TMP($J) - W "Loading CCR Template into T using LOAD^GPLCCR0($NA(^TMP($J,""CCR"")))",!! - N T S T=$NA(^TMP($J,"CCR")) D LOAD^GPLCCR0(T) - B - N XPATH S XPATH="//ContinuityOfCareRecord/Body/Medications" - W "XPATH is: "_XPATH,! - W "Getting Med Template into INXML using",! - W "QUERY^GPLXPATH(T,XPATH,""INXML"")",!! - N INXML - D QUERY^GPLXPATH(T,XPATH,"INXML") - B - W "Executing EXTRACT^GPLMEDS(""INXML"",DFN,OUTXML)",! - W "OUTXML will be ^TMP($J,""OUT"")",! - N OUTXML S OUTXML=$NA(^TMP($J,"OUT")) - D EXTRACT^GPLMEDS("INXML",DFN,OUTXML) - Q + N DEBUG S DEBUG=0 + N DFN S DFN=1 + K ^TMP($J) + W "Loading CCR Template into T using LOAD^GPLCCR0($NA(^TMP($J,""CCR"")))",!! + N T S T=$NA(^TMP($J,"CCR")) D LOAD^GPLCCR0(T) + B + N XPATH S XPATH="//ContinuityOfCareRecord/Body/Medications" + W "XPATH is: "_XPATH,! + W "Getting Med Template into INXML using",! + W "QUERY^GPLXPATH(T,XPATH,""INXML"")",!! + N INXML + D QUERY^GPLXPATH(T,XPATH,"INXML") + B + W "Executing EXTRACT^GPLMEDS(""INXML"",DFN,OUTXML)",! + W "OUTXML will be ^TMP($J,""OUT"")",! + N OUTXML S OUTXML=$NA(^TMP($J,"OUT")) + D EXTRACT^GPLMEDS("INXML",DFN,OUTXML) + Q diff --git a/p/CCRUTIL.m b/p/CCRUTIL.m index 6a524cf..c0f799c 100644 --- a/p/CCRUTIL.m +++ b/p/CCRUTIL.m @@ -69,8 +69,8 @@ SORTDT(V1,V2,ORDR) ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT . . ; S VSRT($P(V2(ZTMP),U,4)_"000000"_ZCNT)=ZCNT ; PULL DATE . I DEBUG W "ZTMP=",ZTMP," " S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE - I DEBUG ZWR V2 - I DEBUG ZWR VSRT + ; I DEBUG ZWR V2 + ; I DEBUG ZWR VSRT N ZD,ZT ; DATA AND TIME ITERATORS N ZDONE ; DONE FLAG S (ZD,ZT)="" diff --git a/p/CCRVA200.m b/p/CCRVA200.m index 308eea9..a0d702d 100644 --- a/p/CCRVA200.m +++ b/p/CCRVA200.m @@ -19,9 +19,9 @@ CCRVA200 ;WV/CCDCCR/SMH - Routine to get Provider Data;07/13/2008 Q ; This routine uses Kernel APIs and Direct Global Access to get ; Proivder Data from File 200. - + ; ; The Global is VA(200,*) - + ; FAMILY(DUZ) ; Get Family Name; PUBLIC; EXTRINSIC ; INPUT: DUZ (i.e. File 200 IEN) ByVal ; OUTPUT: String @@ -75,7 +75,7 @@ SPEC(DUZ) ; Get Provider Specialty, PUBLIC; EXTRINSIC ; OUTPUT: String: ProviderType/Specialty/Subspecialty OR "" ; Uses a Kernel API. Returns -1 if a specialty is not specified ; in file 200. - ; Otherwise, returns IEN^Profession^Specialty^Sub­ specialty^Effect date^Expired date^VA code + ; Otherwise, returns IEN^Profession^Specialty^Sub­specialty^Effect date^Expired date^VA code N STR S STR=$$GET^XUA4A72(DUZ) Q:+STR<0 "" ; Sometimes we have 3 pieces, or 2. Deal with that. @@ -90,11 +90,11 @@ ADDTYPE(DUZ) ; Get Address Type, PUBLIC; EXTRINSIC ADDLINE1(DUZ) ; Get Address associated with this instituation; PUBLIC; EXTRINSIC ; INPUT: DUZ ByVal ; Output: String. - + ; ; First, get site number from the institution file. ; 1st piece returned by $$SITE^VASITE, which gets the system institution N INST S INST=$P($$SITE^VASITE(),U) - + ; ; Second, get mailing address ; There are two APIs to get the address, one for physical and one for ; mailing. We will check if mailing exists first, since that's the @@ -165,4 +165,3 @@ EMAIL(DUZ) ; Get Provider's Email. PUBLIC; EXTRINSIC N EMAIL S EMAIL=$G(^VA(200,DUZ,.15)) Q $P(EMAIL,U) ; - diff --git a/p/GPLACTOR.m b/p/GPLACTOR.m index 8c10781..c9954c1 100644 --- a/p/GPLACTOR.m +++ b/p/GPLACTOR.m @@ -81,7 +81,7 @@ PATIENT(INXML,AIEN,AOID,OUTXML) ; PROCESS A PATIENT ACTOR N AMAP,ZX S AMAP=$NA(^TMP($J,"AMAP")) K @AMAP - D INIT^CCRDPT(AIEN) + D INIT^CCRDPT(AIEN) S @AMAP@("ACTOROBJECTID")=AOID ;ACTOR OBJECT ID S @AMAP@("ACTORGIVENNAME")=$$GIVEN^CCRDPT S @AMAP@("ACTORMIDDLENAME")=$$MIDDLE^CCRDPT diff --git a/p/GPLCCD.m b/p/GPLCCD.m index da30bfa..68f8702 100644 --- a/p/GPLCCD.m +++ b/p/GPLCCD.m @@ -86,7 +86,7 @@ CCDRPC(CCRGRTN,DFN,CCRPART,TIME1,TIME2,HDRARY) ;RPC ENTRY POINT FOR CCR OUTPUT K ACTT1 K ACCT2 ; MAPPING THE PROVIDER ORGANIZATION,AUTHOR,INFORMANT,CUSTODIAN CDA HEADER ; FOR NOW, THEY ARE ALL THE SAME AND RESOLVE TO ORGANIZATION - D ORG^GPLACTORS(CCDGLO,DFN,"ACTORPATIENTORGANIZATION","ACTT2") ; MAP ORG + D ORG^GPLACTOR(CCDGLO,DFN,"ACTORPATIENTORGANIZATION","ACTT2") ; MAP ORG D CP^GPLXPATH("ACTT2",CCDGLO) ; K ^TMP("GPLCCR",$J,"CCRSTEP") ; KILL GLOBAL PRIOR TO ADDING TO IT @@ -115,10 +115,10 @@ CCDRPC(CCRGRTN,DFN,CCRPART,TIME1,TIME2,HDRARY) ;RPC ENTRY POINT FOR CCR OUTPUT ; NEED TO ADD BACK IN ACTOR PROCESSING AFTER WE FIGURE OUT LINKAGE ; D ACTLST^GPLCCR(CCDGLO,ACTGLO) ; GEN THE ACTOR LIST ; D QUERY^GPLXPATH(TGLOBAL,"//ContinuityOfCareRecord/Actors","ACTT") - ; D EXTRACT^GPLACTORS("ACTT",ACTGLO,"ACTT2") + ; D EXTRACT^GPLACTOR("ACTT",ACTGLO,"ACTT2") ; D INSINNER^GPLXPATH(CCDGLO,"ACTT2","//ContinuityOfCareRecord/Actors") N I,J,DONE S DONE=0 - F I=0:0 D Q:DONE ; DELETE UNTIL ALL EMPTY ELEMENTS ARE GONE + F I=0:0 D Q:DONE ; DELETE UNTIL ALL EMPTY ELEMENTS ARE GONE . S J=$$TRIM^GPLXPATH(CCDGLO) ; DELETE EMPTY ELEMENTS . W "TRIMMED",J,! . I J=0 S DONE=1 ; DONE WHEN TRIM RETURNS FALSE diff --git a/p/GPLCCD1.m b/p/GPLCCD1.m index 0d6d556..d7d69fc 100644 --- a/p/GPLCCD1.m +++ b/p/GPLCCD1.m @@ -1,4 +1,4 @@ -GPLCCD0 ; CCDCCR/GPL - CCD TEMPLATE AND ACCESS ROUTINES; 6/7/08 +GPLCCD1 ; CCDCCR/GPL - CCD TEMPLATE AND ACCESS ROUTINES; 6/7/08 ;;0.1;CCDCCR;nopatch;noreleasedate ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU ;General Public License See attached copy of the License. @@ -25,9 +25,9 @@ ZT(ZARY,BAT,LINE) ; private routine to add a line to the ZARY array ; ZARY IS PASSED BY NAME ; BAT is a string identifying the section ; LINE is a test which will evaluate to true or false - ; I '$G(@ZARY) D - . S @ZARY@(0)=0 ; initially there are no elements - . W "GOT HERE LOADING "_LINE,! + ; I '$G(@ZARY) D ; IF ZARY DOES NOT EXIST ' + ; . S @ZARY@(0)=0 ; initially there are no elements + ; . W "GOT HERE LOADING "_LINE,! N CNT ; count of array elements S CNT=@ZARY@(0) ; contains array count S CNT=CNT+1 ; increment count diff --git a/p/GPLCCR0.m b/p/GPLCCR0.m index 6bfb74c..2e7481f 100644 --- a/p/GPLCCR0.m +++ b/p/GPLCCR0.m @@ -25,9 +25,9 @@ ZT(ZARY,BAT,LINE) ; private routine to add a line to the ZARY array ; ZARY IS PASSED BY NAME ; BAT is a string identifying the section ; LINE is a test which will evaluate to true or false - ; I '$G(@ZARY) D - . S @ZARY@(0)=0 ; initially there are no elements - . W "GOT HERE LOADING "_LINE,! + ; I '$G(@ZARY) D ; + ; . S @ZARY@(0)=0 ; initially there are no elements + ; . W "GOT HERE LOADING "_LINE,! N CNT ; count of array elements S CNT=@ZARY@(0) ; contains array count S CNT=CNT+1 ; increment count diff --git a/p/GPLMEDS.m b/p/GPLMEDS.m index 1e5c882..c09066b 100644 --- a/p/GPLMEDS.m +++ b/p/GPLMEDS.m @@ -31,7 +31,7 @@ EXTRACT(MEDXML,DFN,MEDOUTXML) ; EXTRACT MEDICATIONS INTO PROVIDED XML TEMPLATE . W "ERROR RUNNINIG MEDICATIONS RPC",! . S @MEDOUTXML@(0)=0 . Q - I DEBUG ZWR MEDRSLT + ; I DEBUG ZWR MEDRSLT M GPLMEDS=MEDRSLT S MEDTVMAP=$NA(^TMP("GPLCCR",$J,"MEDICATIONS")) S MEDTARYTMP=$NA(^TMP("GPLCCR",$J,"MEDARYTMP")) diff --git a/p/GPLPROBS.m b/p/GPLPROBS.m index 18ddf34..1b2e7d3 100644 --- a/p/GPLPROBS.m +++ b/p/GPLPROBS.m @@ -37,7 +37,7 @@ EXTRACT(IPXML,DFN,OUTXML) ; EXTRACT PROBLEMS INTO PROVIDED XML TEMPLATE . W "NULL RESULT FROM LIST^ORQQPL3 ",! . S @OUTXML@(0)=0 . ; Q - I DEBUG ZWR RPCRSLT + ; I DEBUG ZWR RPCRSLT F J=1:1:RPCRSLT(0) D ; FOR EACH PROBLEM IN THE LIST . S VMAP=$NA(@TVMAP@(J)) . K @VMAP diff --git a/p/GPLUNIT.m b/p/GPLUNIT.m index 2121d6b..180c57c 100644 --- a/p/GPLUNIT.m +++ b/p/GPLUNIT.m @@ -112,7 +112,7 @@ TEST ; RUN ALL THE TEST CASES W "FAILED: ",TFAILED,! W ! W "THE TESTS!",! - I DEBUG ZWR ZTMP + ; I DEBUG ZWR ZTMP Q ; GTSTS(GTZARY,RTN) ; return an array of test names diff --git a/p/GPLVITAL.m b/p/GPLVITAL.m index 793df90..9dc2814 100644 --- a/p/GPLVITAL.m +++ b/p/GPLVITAL.m @@ -38,7 +38,7 @@ EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT VITALS INTO PROVIDED XML TEMPLATE K @VITTVMAP,@VITTARYTMP ; KILL OLD ARRAY VALUES N VSORT,VDATES,VCNT ; ARRAY FOR DATE SORTED VITALS INDEX D VITDATES(.VDATES) ; PULL OUT THE DATES INTO AN ARRAY - I DEBUG ZWR VDATES ;DEBUG + ; I DEBUG ZWR VDATES ;DEBUG S VCNT=$$SORTDT^CCRUTIL(.VSORT,.VDATES,-1) ; PUT VITALS IN REVERSE ; DATE ORDER AND COUNT THEM. VSORT CONTAINS INDIRECT INDEXES ONLY F J=1:1:VCNT D ; FOR EACH VITAL IN THE LIST @@ -174,7 +174,7 @@ EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT VITALS INTO PROVIDED XML TEMPLATE . . 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 ^TMP($J,"VITALARYTMP",*) ; SHOW THE RESULTS I DEBUG D PARY^GPLXPATH(VITOUTXML) N VITTMP,I D MISSING^GPLXPATH(VITOUTXML,"VITTMP") ; SEARCH XML FOR MISSING VARS @@ -183,44 +183,6 @@ EXTRACT(VITXML,DFN,VITOUTXML) ; EXTRACT VITALS INTO PROVIDED XML TEMPLATE . F I=1:1:VITTMP(0) W VITTMP(I),! Q ; -VITSORT(V1,V2) ; DEPRECATED USE $$RSORTDT^CCRUTIL - ; DATE SORT VITALS ARRAY AND RETURN INDEX IN V1 AND COUNT - ; AS EXTRINSIC - ; BOTH V1 AND V2 ARE PASSED BY REFERENCE - N VSRT ; TEMP FOR HASHING DATES - N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2 - S ZCNT=0 ; COUNTING NUMBER OF VITALS - S ZTMP="" ; - F ZI=0:0 D Q:$O(V2(ZTMP))="" ; FOR EACH VITAL IN THE ARRAY - . S ZCNT=ZCNT+1 ; INCREMENT THE COUNT - . S ZTMP=$O(V2(ZTMP)) ; NEXT VITAL - . I $D(V2(ZTMP)) D ; IF THE RESULT EXISTS - . . S ZP1=$P($P(V2(ZTMP),U,4),".",1) ; THE DATE PIECE - . . S ZP2=$P($P(V2(ZTMP),U,4),".",2) ; THE TIME PIECE - . . S VSRT(ZP1,ZP2_"00000"_ZCNT)=ZCNT ; HASH ON DATE AND TIME - . . ; S VSRT($P(V2(ZTMP),U,4)_"000000"_ZCNT)=ZCNT ; PULL DATE - . I DEBUG W "ZTMP=",ZTMP," " - S V1(0)=ZCNT ; ARRAYS ARE THE SAME SIZE - I DEBUG ZWR V2 - I DEBUG ZWR VSRT - N ZD,ZT ; DATA AND TIME ITERATORS - N ZDONE ; DONE FLAG - S (ZD,ZT)="" - S ZDONE=0 - N ZZCNT S ZZCNT=0 ; ANOTHER COUNTER - F ZI=0:0 D Q:ZDONE ; VISIT THE ARRAY IN DATE ORDER - . S ZD=$O(VSRT(ZD),-1) ; NEXT DATE - . I ZD="" S ZDONE=1 - . I 'ZDONE D ; MORE DATES - . . S ZT="" ; WANT FIRST TIME FOR THIS DATE - . . F ZJ=0:0 D Q:$O(VSRT(ZD,ZT),-1)="" ; LOOP THROUGH ALL TIMES - . . . S ZT=$O(VSRT(ZD,ZT),-1) ; NEXT TIME - . . . S ZZCNT=ZZCNT+1 ; INCREMENT COUNTER - . . . S V1(ZZCNT)=VSRT(ZD,ZT) ; PULL OUT THE INDEX - . ; S V1(ZI)=ZI ; PLUG FOR NOW, DATES NOT SORTED - I DEBUG ZWR V1 - Q ZCNT - ; VITDATES(VDT) ; VDT IS PASSED BY REFERENCE AND WILL CONTAIN THE ARRAY ; OF DATES IN THE VITALS RESULTS N VDTI,VDTJ,VTDCNT