- DGROUT ;DJH/AMA - ROM UTILITIES ; 28 Apr 2004 12:24 PM
- ;;5.3;Registration;**533,572,1015**;Aug 13, 1993;Build 21
- ;
- Q ;no direct entry
- ;
- MPIOK(DGDFN,DGICN,DGLST) ;return non-local LST and ICN
- ;This function retrieves an ICN given a pointer to the PATIENT (#2)
- ;file for a patient. When the ICN is not local and the local site
- ;is not the Last Site Treated (LST), the LST is retrieved as a
- ;pointer to the INSTITUTION (#4) file.
- ; Called from SNDQRY^DGROHLR
- ;
- ; Supported DBIA #2701: The supported DBIA is used to access MPI
- ; APIs to retrieve ICN, determine if ICN
- ; is local and if site is LST.
- ; Supported DBIA #2702: The supported DBIA is used to retrieve the
- ; MPI node from the PATIENT (#2) file.
- ;
- ; Input:
- ; DGDFN - IEN of patient in PATIENT (#2) file
- ; DGICN - passed by reference to contain national ICN
- ; DGLST - passed by reference to contain LST
- ;
- ; Output:
- ; Function Value - 1 on national ICN and non-local LST, 0 on failure
- ; DGICN - Patient's Integrated Control Number
- ; DGLST - Pointer to INSTITUTION (#4) file for LST if LST
- ; is not local, undefined otherwise.
- ;
- N DGRSLT
- S DGRSLT=0
- I $G(DGDFN)>0,$D(^DPT(DGDFN,"MPI")) D
- . S DGICN=$$GETICN^MPIF001(DGDFN)
- . ;
- . ;ICN must be valid
- . I (DGICN'>0) D Q
- . . S DGMSG(1)=" "
- . . S DGMSG(2)="The query to the LST has been terminated because required"
- . . S DGMSG(3)="information was not provided by the MPI."
- . . D EN^DDIOL(.DGMSG) R A:5
- . ;
- . ;ICN must not be local
- . I $$IFLOCAL^MPIF001(DGDFN) D Q
- . . S DGMSG(1)=" "
- . . S DGMSG(2)="The query to the LST has been terminated because required"
- . . S DGMSG(3)="information was not provided by the MPI."
- . . D EN^DDIOL(.DGMSG) R A:5
- . ;
- . ;Get LST from Treating Facility List
- . S DGLST=$$TFL(DGDFN)
- . ;
- . I (DGLST'>0) D Q
- . . S DGMSG(1)=" "
- . . S DGMSG(2)="The query to the LST has been terminated because required"
- . . S DGMSG(3)="information was not provided by the MPI."
- . . D EN^DDIOL(.DGMSG) R A:5
- . ;
- . S DGRSLT=1
- Q DGRSLT
- ;
- TFL(DFN) ;
- ;Retrieve Last Site Treated from the Treating Facility List ^DGCN(391.91
- ;This function will retrieve the most recent treatment site
- ;from the Treating Facility List (TFL) received from the MPI
- ;
- ; Input:
- ; DFN - (required) IEN of patient in PATIENT (#2) File
- ;
- ; Output:
- ; Function value - Facility IEN on success, 0 on failure
- ;
- N RSLT ;Result returned from call
- N QFL ;Quit flag
- N TFLDR ;Treating Facility List Record Number
- N DATA ;Array of TFL data
- N RDATA ;Array of Treating Facilities arranged by date and TFLDR
- N DATE,TFL
- ;
- S (RSLT,QFL)=0
- ;Check to see if there is a TFL for this patient.
- ;If not exit and return -1 to call.
- I '$D(^DGCN(391.91,"B",DFN)) G EXITTFL
- ;
- ;Go through the "B" index of TFL file and retrieve
- ;record numbers for the patient DFN.
- S TFLDR="" F S TFLDR=$O(^DGCN(391.91,"B",DFN,TFLDR)) Q:TFLDR="" D
- . ;Retrieve data from record and store in DATA array by record number.
- . S DATA(TFLDR)=$G(^DGCN(391.91,TFLDR,0))
- . ;Extract DATE from 3rd piece of record
- . S DATE=$P(DATA(TFLDR),"^",3)
- . ;Quit if DATE is null
- . Q:DATE=""
- . ;Get Station Number using the facility pointer to the Institution (#4) file
- . S FAC=$P(DATA(TFLDR),"^",2)
- . S FAC=$$STA^XUAF4(FAC) Q:FAC=""
- . ;Build RDATA array using the DATE and TFLDR
- . S RDATA(DATE,TFLDR)=FAC
- ;Exit if the RDATA array does not exist.
- G:'$D(RDATA) EXITTFL
- ;
- ;Reverse order through the RDATA array (start with the latest date).
- ;Extract the treating facility from the RDATA array.
- ;Check the facility against local facility number: if they are
- ;the same, then get the next facility. (Should never happen)
- S DATE="" F S DATE=$O(RDATA(DATE),-1) Q:DATE="" D Q:QFL=1
- . S TFL="" F S TFL=$O(RDATA(DATE,TFL)) Q:TFL="" D Q:QFL=1
- . . S FAC=RDATA(DATE,TFL) I FAC=$G(DIV(0)) Q
- . . ;If the facility is not the current facility, then set RSLT to the facility and quit
- . . S RSLT=FAC,QFL=1 ;set QFL to 1 to stop going through the RDATA array
- EXITTFL Q RSLT ;Return the LST to the calling routine
- DGROUT ;DJH/AMA - ROM UTILITIES ; 28 Apr 2004 12:24 PM
- +1 ;;5.3;Registration;**533,572,1015**;Aug 13, 1993;Build 21
- +2 ;
- +3 ;no direct entry
- QUIT
- +4 ;
- MPIOK(DGDFN,DGICN,DGLST) ;return non-local LST and ICN
- +1 ;This function retrieves an ICN given a pointer to the PATIENT (#2)
- +2 ;file for a patient. When the ICN is not local and the local site
- +3 ;is not the Last Site Treated (LST), the LST is retrieved as a
- +4 ;pointer to the INSTITUTION (#4) file.
- +5 ; Called from SNDQRY^DGROHLR
- +6 ;
- +7 ; Supported DBIA #2701: The supported DBIA is used to access MPI
- +8 ; APIs to retrieve ICN, determine if ICN
- +9 ; is local and if site is LST.
- +10 ; Supported DBIA #2702: The supported DBIA is used to retrieve the
- +11 ; MPI node from the PATIENT (#2) file.
- +12 ;
- +13 ; Input:
- +14 ; DGDFN - IEN of patient in PATIENT (#2) file
- +15 ; DGICN - passed by reference to contain national ICN
- +16 ; DGLST - passed by reference to contain LST
- +17 ;
- +18 ; Output:
- +19 ; Function Value - 1 on national ICN and non-local LST, 0 on failure
- +20 ; DGICN - Patient's Integrated Control Number
- +21 ; DGLST - Pointer to INSTITUTION (#4) file for LST if LST
- +22 ; is not local, undefined otherwise.
- +23 ;
- +24 NEW DGRSLT
- +25 SET DGRSLT=0
- +26 IF $GET(DGDFN)>0
- IF $DATA(^DPT(DGDFN,"MPI"))
- Begin DoDot:1
- +27 SET DGICN=$$GETICN^MPIF001(DGDFN)
- +28 ;
- +29 ;ICN must be valid
- +30 IF (DGICN'>0)
- Begin DoDot:2
- +31 SET DGMSG(1)=" "
- +32 SET DGMSG(2)="The query to the LST has been terminated because required"
- +33 SET DGMSG(3)="information was not provided by the MPI."
- +34 DO EN^DDIOL(.DGMSG)
- READ A:5
- End DoDot:2
- QUIT
- +35 ;
- +36 ;ICN must not be local
- +37 IF $$IFLOCAL^MPIF001(DGDFN)
- Begin DoDot:2
- +38 SET DGMSG(1)=" "
- +39 SET DGMSG(2)="The query to the LST has been terminated because required"
- +40 SET DGMSG(3)="information was not provided by the MPI."
- +41 DO EN^DDIOL(.DGMSG)
- READ A:5
- End DoDot:2
- QUIT
- +42 ;
- +43 ;Get LST from Treating Facility List
- +44 SET DGLST=$$TFL(DGDFN)
- +45 ;
- +46 IF (DGLST'>0)
- Begin DoDot:2
- +47 SET DGMSG(1)=" "
- +48 SET DGMSG(2)="The query to the LST has been terminated because required"
- +49 SET DGMSG(3)="information was not provided by the MPI."
- +50 DO EN^DDIOL(.DGMSG)
- READ A:5
- End DoDot:2
- QUIT
- +51 ;
- +52 SET DGRSLT=1
- End DoDot:1
- +53 QUIT DGRSLT
- +54 ;
- TFL(DFN) ;
- +1 ;Retrieve Last Site Treated from the Treating Facility List ^DGCN(391.91
- +2 ;This function will retrieve the most recent treatment site
- +3 ;from the Treating Facility List (TFL) received from the MPI
- +4 ;
- +5 ; Input:
- +6 ; DFN - (required) IEN of patient in PATIENT (#2) File
- +7 ;
- +8 ; Output:
- +9 ; Function value - Facility IEN on success, 0 on failure
- +10 ;
- +11 ;Result returned from call
- NEW RSLT
- +12 ;Quit flag
- NEW QFL
- +13 ;Treating Facility List Record Number
- NEW TFLDR
- +14 ;Array of TFL data
- NEW DATA
- +15 ;Array of Treating Facilities arranged by date and TFLDR
- NEW RDATA
- +16 NEW DATE,TFL
- +17 ;
- +18 SET (RSLT,QFL)=0
- +19 ;Check to see if there is a TFL for this patient.
- +20 ;If not exit and return -1 to call.
- +21 IF '$DATA(^DGCN(391.91,"B",DFN))
- GOTO EXITTFL
- +22 ;
- +23 ;Go through the "B" index of TFL file and retrieve
- +24 ;record numbers for the patient DFN.
- +25 SET TFLDR=""
- FOR
- SET TFLDR=$ORDER(^DGCN(391.91,"B",DFN,TFLDR))
- IF TFLDR=""
- QUIT
- Begin DoDot:1
- +26 ;Retrieve data from record and store in DATA array by record number.
- +27 SET DATA(TFLDR)=$GET(^DGCN(391.91,TFLDR,0))
- +28 ;Extract DATE from 3rd piece of record
- +29 SET DATE=$PIECE(DATA(TFLDR),"^",3)
- +30 ;Quit if DATE is null
- +31 IF DATE=""
- QUIT
- +32 ;Get Station Number using the facility pointer to the Institution (#4) file
- +33 SET FAC=$PIECE(DATA(TFLDR),"^",2)
- +34 SET FAC=$$STA^XUAF4(FAC)
- IF FAC=""
- QUIT
- +35 ;Build RDATA array using the DATE and TFLDR
- +36 SET RDATA(DATE,TFLDR)=FAC
- End DoDot:1
- +37 ;Exit if the RDATA array does not exist.
- +38 IF '$DATA(RDATA)
- GOTO EXITTFL
- +39 ;
- +40 ;Reverse order through the RDATA array (start with the latest date).
- +41 ;Extract the treating facility from the RDATA array.
- +42 ;Check the facility against local facility number: if they are
- +43 ;the same, then get the next facility. (Should never happen)
- +44 SET DATE=""
- FOR
- SET DATE=$ORDER(RDATA(DATE),-1)
- IF DATE=""
- QUIT
- Begin DoDot:1
- +45 SET TFL=""
- FOR
- SET TFL=$ORDER(RDATA(DATE,TFL))
- IF TFL=""
- QUIT
- Begin DoDot:2
- +46 SET FAC=RDATA(DATE,TFL)
- IF FAC=$GET(DIV(0))
- QUIT
- +47 ;If the facility is not the current facility, then set RSLT to the facility and quit
- +48 ;set QFL to 1 to stop going through the RDATA array
- SET RSLT=FAC
- SET QFL=1
- End DoDot:2
- IF QFL=1
- QUIT
- End DoDot:1
- IF QFL=1
- QUIT
- EXITTFL ;Return the LST to the calling routine
- QUIT RSLT