- DGRRPSGT ; ALB/SGG - DG R&R PatientServices GET data - return XML ; 09/30/03
- ;;5.3;Registration;**557,1015**;Aug 13, 1993;Build 21
- ;
- DOC ;
- ; ==================================================================
- ; Documentation for the DGRRPS* routines is in DGRRPSAA.
- ; ==================================================================
- ; This routine is called from the RPC DGRR GET PATIENT SERVICES DATA
- ; ==================================================================
- ;
- ;
- PATIENT(RESULT,PARAMS) ;
- ;
- NEW CURLINE,ICN,PTID,ERRMESS,PSARRAY,PSGLBCNT,DGRRPS,GLOB,TRACECNT,TRACENO,REQDT
- ;
- DO INITIZE
- ;Call to INTRACE commented out to prevent to building of the XTMP global.
- ;DO INTRACE
- DO GETPATID(.ICN,.PTID,.ERRMESS) IF $G(ERRMESS)'="" GOTO ERROR
- S REQDT=$G(PARAMS("REQUESTED_DATE"))
- DO GETGLOBS
- ;
- BUILD ; BUILD THE PATIENT XML
- SET PSARRAY(1)=$$XMLHDR^DGRR557U_"^^^1" DO APPEND(.PSARRAY)
- SET PSARRAY(1)="<Patient>" DO APPEND(.PSARRAY)
- DO GETPSARY^DGRRPSID(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("PrimaryDemo")) DO GETPSARY^DGRRPSD1(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("SecondaryDemo")) DO GETPSARY^DGRRPSD2(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("TertiaryDemo")) DO GETPSARY^DGRRPSD3(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("MainAddress")) DO GETPSARY^DGRRPSAM(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("TemporaryAddress")) DO GETPSARY^DGRRPSAT(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("ConfidentialAddress")) DO GETPSARY^DGRRPSAC(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("ContactInfo")) DO GETPSARY^DGRRPSKN(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("ADTInfo")) DO GETPSARY^DGRRPSAD(.PSARRAY,REQDT) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("EnrollEligibility")) DO GETPSARY^DGRRPSEE(.PSARRAY) DO APPEND(.PSARRAY)
- IF +$G(PARAMS("Incompetent")) DO GETPSARY^DGRRPSIC(.PSARRAY) DO APPEND(.PSARRAY)
- DO GETPSARY^DGRRPSIN(.PSARRAY) DO APPEND(.PSARRAY)
- SET PSARRAY(1)="<Error Message=''></Error>" DO APPEND(.PSARRAY)
- SET PSARRAY(1)="</Patient>"_"^^^1" DO APPEND(.PSARRAY)
- ;Call to OUTTRACE commented out preventing the building/purging of the
- ;XTMP global.
- ;DO OUTTRACE
- EXIT QUIT
- ;
- APPEND(PSARRAY) ;
- ; Append PSARRAY(1...n)= TextOnly ^ XML_attribute ^ ValueOfAttribute ^ FileNowFlag
- ; In some code there are 5th and 6th pieces to this,, they are not used,, it was the start of a receiver/parser that was never needed
- NEW MAXGL,TEXT,ATTRIB,VALUE,CLOSEOUT,NEWLINE
- SET MAXGL=240 ; maximum global length
- SET PSARRAY="" FOR SET PSARRAY=$O(PSARRAY(PSARRAY)) QUIT:PSARRAY="" DO
- .SET TEXT=$P(PSARRAY(PSARRAY),"^",1)
- .SET ATTRIB=$P(PSARRAY(PSARRAY),"^",2)
- .SET VALUE=$P(PSARRAY(PSARRAY),"^",3)
- .SET CLOSEOUT=$P(PSARRAY(PSARRAY),"^",4)
- .SET CURLINE=$G(CURLINE)
- .SET NEWLINE=TEXT
- .IF ATTRIB'="" SET NEWLINE=NEWLINE_" "_ATTRIB_"='"_$S(VALUE'="":$$CHARCHK^DGRR557U(VALUE),1:"")_"'"
- .IF ($L(CURLINE)+$L(NEWLINE))>MAXGL DO
- ..SET ^TMP($J,"PS-DATA",PSGLBCNT)=$E(CURLINE_NEWLINE,1,MAXGL)
- ..SET PSGLBCNT=PSGLBCNT+1
- ..SET CURLINE=$E(CURLINE_NEWLINE,MAXGL+1,999),NEWLINE=""
- .SET CURLINE=CURLINE_NEWLINE
- .IF +$G(CLOSEOUT),+$L(CURLINE) DO
- ..SET ^TMP($J,"PS-DATA",PSGLBCNT)=CURLINE
- ..SET PSGLBCNT=PSGLBCNT+1
- ..SET CURLINE=""
- .QUIT
- KILL PSARRAY
- QUIT
- ;
- INITIZE ; Initialize variables
- KILL RESULT
- KILL ^TMP($J,"PS-DATA")
- SET PSGLBCNT=1
- SET DGRRPS="^TMP($J,""PS-DATA"")"
- SET RESULT=$NA(@DGRRPS)
- IF '$D(DT) D DTNOLF^DICRW
- KILL PSARRAY
- QUIT
- ;
- INTRACE ; Keep a record of what has been requested
- N PURGDT
- S PURGDT=$$FMADD^XLFDT(DT,31)
- IF '$D(^XTMP("DGRRPS",0)) SET ^XTMP("DGRRPS",0)=PURGDT_"^"_DT_"^"_"LAST 30 DAYS OF PATIENT SERVICES ACTIVITY - CREATED IN RTN DGRRPSGT - THIS GLOBAL IS SELF PURGING ON >10,000 RECORDS OR >31 DAYS - email:VHA OI SDD CS Person Demographic"
- SET $P(^XTMP("DGRRPS",0),"^",1)=PURGDT
- SET TRACECNT=$G(^XTMP("DGRRPS","COUNT"))+1,^XTMP("DGRRPS","COUNT")=TRACECNT
- SET ^XTMP("DGRRPS","TRACE",TRACECNT,"DATE",DT)=$$NOW^XLFDT
- MERGE ^XTMP("DGRRPS","TRACE",TRACECNT,"PARAMS")=PARAMS
- QUIT
- ;
- GETPATID(ICN,PTID,ERRMESS) ; Get patient PTID and ICN
- IF $G(PARAMS("PatientId_Type"))="ICN" DO
- .SET ICN=$G(PARAMS("PatientId"))
- .IF $E(ICN,1,6)=" ICN: " SET ICN=$E(ICN,7,99)
- .SET ICN=$P(ICN,"^",1)
- .SET PTID=$$GETDFN^MPIF001(ICN)
- .; Call MPI API to be sure ICN is returned in ICN_V_checksum format
- .SET ICN=$$GETICN^MPIF001(PTID)
- .IF $G(PTID)<1 SET ERRMESS=$P(PTID,"^",2)
- IF $G(PARAMS("PatientId_Type"))="DFN" DO
- .SET PTID=+$G(PARAMS("PatientId"))
- .SET ICN=$$GETICN^MPIF001(PTID)
- .;IF +ICN<1 SET ERRMESS=$P(ICN,"^",2)
- .IF ICN<1 SET ICN=""
- IF ($G(PARAMS("PatientId_Type"))'="DFN"),($G(PARAMS("PatientId_Type"))'="ICN") SET ERRMESS="Unknown PatientId_Type"
- QUIT
- ;
- GETGLOBS ; Get required DPT globals
- SET GLOB(0)=$G(^DPT(PTID,0))
- SET GLOB(.11)=$G(^DPT(PTID,.11))
- SET GLOB(.121)=$G(^DPT(PTID,.121))
- SET GLOB(.13)=$G(^DPT(PTID,.13))
- KILL GLOB(.14) MERGE GLOB(.14)=^DPT(PTID,.14)
- SET GLOB(.141)=$G(^DPT(PTID,.141))
- SET GLOB(.15)=$G(^DPT(PTID,.15))
- SET GLOB(.22)=$G(^DPT(PTID,.22))
- SET GLOB(.24)=$G(^DPT(PTID,.24))
- SET GLOB(.29)=$G(^DPT(PTID,.29))
- SET GLOB(.291)=$G(^DPT(PTID,.291))
- SET GLOB(.3)=$G(^DPT(PTID,.3))
- SET GLOB(.31)=$G(^DPT(PTID,.31))
- SET GLOB(.32)=$G(^DPT(PTID,.32))
- SET GLOB(.35)=$G(^DPT(PTID,.35))
- SET GLOB(.36)=$G(^DPT(PTID,.36))
- SET GLOB(.361)=$G(^DPT(PTID,.361))
- SET GLOB(38.1)=$G(^DGSL(38.1,PTID,0))
- SET GLOB(57)=$G(^DPT(PTID,57))
- SET GLOB("NAME")=$$GETNME(PTID)
- QUIT
- ;
- GETNME(PTID) ; return patient name components
- NEW RE,DGRRN
- S DGRRN("FILE")=2
- S DGRRN("FIELD")=.01
- S DGRRN("IENS")=$$IENS^DILF(+PTID)
- S RE=$$HLNAME^XLFNAME(.DGRRN)
- Q RE
- ;
- OUTTRACE ; Keep a record of what has been put out
- MERGE ^XTMP("DGRRPS","TRACE",+$G(TRACECNT),"DATA")=^TMP($J,"PS-DATA")
- PURGE ; Purge trace > 31 days and >10,000 records
- SET TRACENO="" FOR SET TRACENO=$O(^XTMP("DGRRPS","TRACE",TRACENO)) QUIT:TRACENO="" QUIT:($O(^XTMP("DGRRPS","TRACE",TRACENO,"DATE",""))>($$FMADD^XLFDT(DT,-31))) KILL ^XTMP("DGRRPS","TRACE",TRACENO)
- SET TRACENO="" FOR SET TRACENO=$O(^XTMP("DGRRPS","TRACE",TRACENO)) QUIT:TRACENO="" QUIT:(TRACENO>($O(^XTMP("DGRRPS","TRACE",""),-1)-10000)) KILL ^XTMP("DGRRPS","TRACE",TRACENO)
- QUIT
- ;
- ERROR ; Build an Error XML and quit
- DO INITIZE
- SET PSARRAY(1)=$$XMLHDR^DGRR557U_"^^^1"
- SET PSARRAY(2)="<Patient>"_"^^^1"
- SET PSARRAY(3)="<Error"
- SET PSARRAY(4)="^Message^"_ERRMESS
- SET PSARRAY(5)="^PatientId^"_$G(PARAMS("PatientId"))
- SET PSARRAY(6)="></Error>"_"^^^1"
- SET PSARRAY(7)="</Patient>"_"^^^1" DO APPEND(.PSARRAY)
- ;DO OUTTRACE
- QUIT
- DGRRPSGT ; ALB/SGG - DG R&R PatientServices GET data - return XML ; 09/30/03
- +1 ;;5.3;Registration;**557,1015**;Aug 13, 1993;Build 21
- +2 ;
- DOC ;
- +1 ; ==================================================================
- +2 ; Documentation for the DGRRPS* routines is in DGRRPSAA.
- +3 ; ==================================================================
- +4 ; This routine is called from the RPC DGRR GET PATIENT SERVICES DATA
- +5 ; ==================================================================
- +6 ;
- +7 ;
- PATIENT(RESULT,PARAMS) ;
- +1 ;
- +2 NEW CURLINE,ICN,PTID,ERRMESS,PSARRAY,PSGLBCNT,DGRRPS,GLOB,TRACECNT,TRACENO,REQDT
- +3 ;
- +4 DO INITIZE
- +5 ;Call to INTRACE commented out to prevent to building of the XTMP global.
- +6 ;DO INTRACE
- +7 DO GETPATID(.ICN,.PTID,.ERRMESS)
- IF $GET(ERRMESS)'=""
- GOTO ERROR
- +8 SET REQDT=$GET(PARAMS("REQUESTED_DATE"))
- +9 DO GETGLOBS
- +10 ;
- BUILD ; BUILD THE PATIENT XML
- +1 SET PSARRAY(1)=$$XMLHDR^DGRR557U_"^^^1"
- DO APPEND(.PSARRAY)
- +2 SET PSARRAY(1)="<Patient>"
- DO APPEND(.PSARRAY)
- +3 DO GETPSARY^DGRRPSID(.PSARRAY)
- DO APPEND(.PSARRAY)
- +4 IF +$GET(PARAMS("PrimaryDemo"))
- DO GETPSARY^DGRRPSD1(.PSARRAY)
- DO APPEND(.PSARRAY)
- +5 IF +$GET(PARAMS("SecondaryDemo"))
- DO GETPSARY^DGRRPSD2(.PSARRAY)
- DO APPEND(.PSARRAY)
- +6 IF +$GET(PARAMS("TertiaryDemo"))
- DO GETPSARY^DGRRPSD3(.PSARRAY)
- DO APPEND(.PSARRAY)
- +7 IF +$GET(PARAMS("MainAddress"))
- DO GETPSARY^DGRRPSAM(.PSARRAY)
- DO APPEND(.PSARRAY)
- +8 IF +$GET(PARAMS("TemporaryAddress"))
- DO GETPSARY^DGRRPSAT(.PSARRAY)
- DO APPEND(.PSARRAY)
- +9 IF +$GET(PARAMS("ConfidentialAddress"))
- DO GETPSARY^DGRRPSAC(.PSARRAY)
- DO APPEND(.PSARRAY)
- +10 IF +$GET(PARAMS("ContactInfo"))
- DO GETPSARY^DGRRPSKN(.PSARRAY)
- DO APPEND(.PSARRAY)
- +11 IF +$GET(PARAMS("ADTInfo"))
- DO GETPSARY^DGRRPSAD(.PSARRAY,REQDT)
- DO APPEND(.PSARRAY)
- +12 IF +$GET(PARAMS("EnrollEligibility"))
- DO GETPSARY^DGRRPSEE(.PSARRAY)
- DO APPEND(.PSARRAY)
- +13 IF +$GET(PARAMS("Incompetent"))
- DO GETPSARY^DGRRPSIC(.PSARRAY)
- DO APPEND(.PSARRAY)
- +14 DO GETPSARY^DGRRPSIN(.PSARRAY)
- DO APPEND(.PSARRAY)
- +15 SET PSARRAY(1)="<Error Message=''></Error>"
- DO APPEND(.PSARRAY)
- +16 SET PSARRAY(1)="</Patient>"_"^^^1"
- DO APPEND(.PSARRAY)
- +17 ;Call to OUTTRACE commented out preventing the building/purging of the
- +18 ;XTMP global.
- +19 ;DO OUTTRACE
- EXIT QUIT
- +1 ;
- APPEND(PSARRAY) ;
- +1 ; Append PSARRAY(1...n)= TextOnly ^ XML_attribute ^ ValueOfAttribute ^ FileNowFlag
- +2 ; In some code there are 5th and 6th pieces to this,, they are not used,, it was the start of a receiver/parser that was never needed
- +3 NEW MAXGL,TEXT,ATTRIB,VALUE,CLOSEOUT,NEWLINE
- +4 ; maximum global length
- SET MAXGL=240
- +5 SET PSARRAY=""
- FOR
- SET PSARRAY=$ORDER(PSARRAY(PSARRAY))
- IF PSARRAY=""
- QUIT
- Begin DoDot:1
- +6 SET TEXT=$PIECE(PSARRAY(PSARRAY),"^",1)
- +7 SET ATTRIB=$PIECE(PSARRAY(PSARRAY),"^",2)
- +8 SET VALUE=$PIECE(PSARRAY(PSARRAY),"^",3)
- +9 SET CLOSEOUT=$PIECE(PSARRAY(PSARRAY),"^",4)
- +10 SET CURLINE=$GET(CURLINE)
- +11 SET NEWLINE=TEXT
- +12 IF ATTRIB'=""
- SET NEWLINE=NEWLINE_" "_ATTRIB_"='"_$SELECT(VALUE'="":$$CHARCHK^DGRR557U(VALUE),1:"")_"'"
- +13 IF ($LENGTH(CURLINE)+$LENGTH(NEWLINE))>MAXGL
- Begin DoDot:2
- +14 SET ^TMP($JOB,"PS-DATA",PSGLBCNT)=$EXTRACT(CURLINE_NEWLINE,1,MAXGL)
- +15 SET PSGLBCNT=PSGLBCNT+1
- +16 SET CURLINE=$EXTRACT(CURLINE_NEWLINE,MAXGL+1,999)
- SET NEWLINE=""
- End DoDot:2
- +17 SET CURLINE=CURLINE_NEWLINE
- +18 IF +$GET(CLOSEOUT)
- IF +$LENGTH(CURLINE)
- Begin DoDot:2
- +19 SET ^TMP($JOB,"PS-DATA",PSGLBCNT)=CURLINE
- +20 SET PSGLBCNT=PSGLBCNT+1
- +21 SET CURLINE=""
- End DoDot:2
- +22 QUIT
- End DoDot:1
- +23 KILL PSARRAY
- +24 QUIT
- +25 ;
- INITIZE ; Initialize variables
- +1 KILL RESULT
- +2 KILL ^TMP($JOB,"PS-DATA")
- +3 SET PSGLBCNT=1
- +4 SET DGRRPS="^TMP($J,""PS-DATA"")"
- +5 SET RESULT=$NAME(@DGRRPS)
- +6 IF '$DATA(DT)
- DO DTNOLF^DICRW
- +7 KILL PSARRAY
- +8 QUIT
- +9 ;
- INTRACE ; Keep a record of what has been requested
- +1 NEW PURGDT
- +2 SET PURGDT=$$FMADD^XLFDT(DT,31)
- +3 IF '$DATA(^XTMP("DGRRPS",0))
- SET ^XTMP("DGRRPS",0)=PURGDT_"^"_DT_"^"_"LAST 30 DAYS OF PATIENT SERVICES ACTIVITY - CREATED IN RTN DGRRPSGT - THIS GLOBAL IS SELF PURGING ON >10,000 RECORDS OR >31 DAYS - email:VHA OI SDD CS Person Demographic"
- +4 SET $PIECE(^XTMP("DGRRPS",0),"^",1)=PURGDT
- +5 SET TRACECNT=$GET(^XTMP("DGRRPS","COUNT"))+1
- SET ^XTMP("DGRRPS","COUNT")=TRACECNT
- +6 SET ^XTMP("DGRRPS","TRACE",TRACECNT,"DATE",DT)=$$NOW^XLFDT
- +7 MERGE ^XTMP("DGRRPS","TRACE",TRACECNT,"PARAMS")=PARAMS
- +8 QUIT
- +9 ;
- GETPATID(ICN,PTID,ERRMESS) ; Get patient PTID and ICN
- +1 IF $GET(PARAMS("PatientId_Type"))="ICN"
- Begin DoDot:1
- +2 SET ICN=$GET(PARAMS("PatientId"))
- +3 IF $EXTRACT(ICN,1,6)=" ICN: "
- SET ICN=$EXTRACT(ICN,7,99)
- +4 SET ICN=$PIECE(ICN,"^",1)
- +5 SET PTID=$$GETDFN^MPIF001(ICN)
- +6 ; Call MPI API to be sure ICN is returned in ICN_V_checksum format
- +7 SET ICN=$$GETICN^MPIF001(PTID)
- +8 IF $GET(PTID)<1
- SET ERRMESS=$PIECE(PTID,"^",2)
- End DoDot:1
- +9 IF $GET(PARAMS("PatientId_Type"))="DFN"
- Begin DoDot:1
- +10 SET PTID=+$GET(PARAMS("PatientId"))
- +11 SET ICN=$$GETICN^MPIF001(PTID)
- +12 ;IF +ICN<1 SET ERRMESS=$P(ICN,"^",2)
- +13 IF ICN<1
- SET ICN=""
- End DoDot:1
- +14 IF ($GET(PARAMS("PatientId_Type"))'="DFN")
- IF ($GET(PARAMS("PatientId_Type"))'="ICN")
- SET ERRMESS="Unknown PatientId_Type"
- +15 QUIT
- +16 ;
- GETGLOBS ; Get required DPT globals
- +1 SET GLOB(0)=$GET(^DPT(PTID,0))
- +2 SET GLOB(.11)=$GET(^DPT(PTID,.11))
- +3 SET GLOB(.121)=$GET(^DPT(PTID,.121))
- +4 SET GLOB(.13)=$GET(^DPT(PTID,.13))
- +5 KILL GLOB(.14)
- MERGE GLOB(.14)=^DPT(PTID,.14)
- +6 SET GLOB(.141)=$GET(^DPT(PTID,.141))
- +7 SET GLOB(.15)=$GET(^DPT(PTID,.15))
- +8 SET GLOB(.22)=$GET(^DPT(PTID,.22))
- +9 SET GLOB(.24)=$GET(^DPT(PTID,.24))
- +10 SET GLOB(.29)=$GET(^DPT(PTID,.29))
- +11 SET GLOB(.291)=$GET(^DPT(PTID,.291))
- +12 SET GLOB(.3)=$GET(^DPT(PTID,.3))
- +13 SET GLOB(.31)=$GET(^DPT(PTID,.31))
- +14 SET GLOB(.32)=$GET(^DPT(PTID,.32))
- +15 SET GLOB(.35)=$GET(^DPT(PTID,.35))
- +16 SET GLOB(.36)=$GET(^DPT(PTID,.36))
- +17 SET GLOB(.361)=$GET(^DPT(PTID,.361))
- +18 SET GLOB(38.1)=$GET(^DGSL(38.1,PTID,0))
- +19 SET GLOB(57)=$GET(^DPT(PTID,57))
- +20 SET GLOB("NAME")=$$GETNME(PTID)
- +21 QUIT
- +22 ;
- GETNME(PTID) ; return patient name components
- +1 NEW RE,DGRRN
- +2 SET DGRRN("FILE")=2
- +3 SET DGRRN("FIELD")=.01
- +4 SET DGRRN("IENS")=$$IENS^DILF(+PTID)
- +5 SET RE=$$HLNAME^XLFNAME(.DGRRN)
- +6 QUIT RE
- +7 ;
- OUTTRACE ; Keep a record of what has been put out
- +1 MERGE ^XTMP("DGRRPS","TRACE",+$GET(TRACECNT),"DATA")=^TMP($JOB,"PS-DATA")
- PURGE ; Purge trace > 31 days and >10,000 records
- +1 SET TRACENO=""
- FOR
- SET TRACENO=$ORDER(^XTMP("DGRRPS","TRACE",TRACENO))
- IF TRACENO=""
- QUIT
- IF ($ORDER(^XTMP("DGRRPS","TRACE",TRACENO,"DATE",""))>($$FMADD^XLFDT(DT,-31)))
- QUIT
- KILL ^XTMP("DGRRPS","TRACE",TRACENO)
- +2 SET TRACENO=""
- FOR
- SET TRACENO=$ORDER(^XTMP("DGRRPS","TRACE",TRACENO))
- IF TRACENO=""
- QUIT
- IF (TRACENO>($ORDER(^XTMP("DGRRPS","TRACE",""),-1)-10000))
- QUIT
- KILL ^XTMP("DGRRPS","TRACE",TRACENO)
- +3 QUIT
- +4 ;
- ERROR ; Build an Error XML and quit
- +1 DO INITIZE
- +2 SET PSARRAY(1)=$$XMLHDR^DGRR557U_"^^^1"
- +3 SET PSARRAY(2)="<Patient>"_"^^^1"
- +4 SET PSARRAY(3)="<Error"
- +5 SET PSARRAY(4)="^Message^"_ERRMESS
- +6 SET PSARRAY(5)="^PatientId^"_$GET(PARAMS("PatientId"))
- +7 SET PSARRAY(6)="></Error>"_"^^^1"
- +8 SET PSARRAY(7)="</Patient>"_"^^^1"
- DO APPEND(.PSARRAY)
- +9 ;DO OUTTRACE
- +10 QUIT