HDISVF01 ;BPFO/JRP - FILE UTILITIES/API;12/20/2004 ; 07 Mar 2005 9:53 AM
;;1.0;HEALTH DATA & INFORMATICS;**1**;Feb 22, 2005
;
;---- Begin HDIS VUID IMPLEMENTATION STATUS file (#7118.25) APIs ----
;
GETSTAT(FILE,FIELD,DATE,FAC,DOMAIN,TYPE) ;Get file/field implementation status
; Input : FILE - File number
; FIELD - Field number (defaults to .01)
; DATE - FileMan date/time to return status for (optional)
; (defaults to NOW)
; FAC - Facility number (optional) (defaults to current)
; DOMAIN - Domain/IP address (optional) (defaults to current)
; TYPE - Type of system (optional) (defaults to current)
; 0 = Test 1 = Production
;Output : StatusCode ^ StatusPointer ^ StatusDate
; Notes : Values for "not started" status and no date are returned
; on bad input or if no entry is found
; : If time is not included with the date, the last status
; for the given day is returned
; : If more than one entry for the same date/time is found, the
; higher entry number is returned
N IEN,STATCODE,STATPTR,STATDT,NOTYET,FFPTR,SYSPTR,X
;Calculate output for bad input
S STATCODE=0
S X=$$GETIEN^HDISVF06(STATCODE,+$$GETTYPE^HDISVF02(),.STATPTR)
S NOTYET=STATCODE_"^"_STATPTR_"^"
;Check input
S FILE=+$G(FILE)
I 'FILE Q NOTYET
S FIELD=+$G(FIELD)
I 'FIELD S FIELD=.01
S DATE=+$G(DATE)
I 'DATE S DATE=$$NOW^XLFDT()
I '$P(DATE,".",2) S $P(DATE,".",2)=24
S FAC=+$G(FAC)
I 'FAC S FAC=$$FACNUM()
S DOMAIN=$G(DOMAIN)
I DOMAIN="" S DOMAIN=$G(^XMB("NETNAME"))
S TYPE=$G(TYPE)
I TYPE="" S TYPE=$$PROD^XUPROD()
I ('FAC)!(DOMAIN="")!(TYPE="") Q NOTYET
;Get pointers
I '$$FINDSYS^HDISVF07(DOMAIN,FAC,TYPE,1,.SYSPTR) Q NOTYET
I '$$GETIEN^HDISVF05(FILE,FIELD,.FFPTR) Q NOTYET
;Get status date/time closest to input date/time
S DATE=DATE+.0000001
S STATDT=+$O(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,DATE),-1)
I 'STATDT Q NOTYET
;Build list of entry numbers with found status date/time
K IEN
S STATPTR=0
F S STATPTR=+$O(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,STATDT,STATPTR)) Q:'STATPTR D
.S IEN=0
.F S IEN=+$O(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,STATDT,STATPTR,IEN)) Q:'IEN D
..S IEN(IEN)=STATPTR
;Get last entry number
S IEN=+$O(IEN(""),-1)
I 'IEN Q NOTYET
;Build output
S STATPTR=IEN(IEN)
S X=$$GETCODE^HDISVF06(STATPTR,.STATCODE)
Q STATCODE_"^"_STATPTR_"^"_STATDT
;
SETSTAT(FILE,FIELD,CODE,DATE,STTYPE,FAC,DOMAIN,SYTYPE) ;Set file/field implementation status
; Input : FILE - File number
; FIELD - Field number (defaults to .01)
; CODE - Status code to set (defaults to "not started")
; DATE - FileMan date/time to return status for (optional)
; (defaults to NOW)
; STTYPE - Type of status code being used (optional)
; 1 = Client (default) 2 = Server
; FAC - Facility number (optional) (defaults to current)
; DOMAIN - Domain/IP address (optional) (defaults to current)
; SYTYPE - Type of system (optional) (defaults to current)
; 0 = Test 1 = Production
;Output : None
; Notes : If time is not included with the date, 1 second past
; midnight will be used as the time
; : If an entry for the given file/field and date/time already
; exists, a new entry will still be added
N FFPTR,SYSPTR
;Check input
S FILE=+$G(FILE)
I 'FILE Q
S FIELD=+$G(FIELD)
I 'FIELD S FIELD=.01
S CODE=+$G(CODE)
S DATE=+$G(DATE)
I 'DATE S DATE=$$NOW^XLFDT()
I '$P(DATE,".",2) S $P(DATE,".",2)="000001"
S STTYPE=+$G(STTYPE)
I ('STTYPE)!(STTYPE<1)!(STTYPE>2) S STTYPE=1
S FAC=+$G(FAC)
I 'FAC S FAC=$$FACNUM()
S DOMAIN=$G(DOMAIN)
I DOMAIN="" S DOMAIN=$G(^XMB("NETNAME"))
S SYTYPE=$G(SYTYPE)
I SYTYPE="" S SYTYPE=$$PROD^XUPROD()
I ('FAC)!(DOMAIN="")!(SYTYPE="") Q
;Get pointers
I '$$FINDSYS^HDISVF07(DOMAIN,FAC,SYTYPE,1,.SYSPTR) Q
I '$$GETIEN^HDISVF05(FILE,FIELD,.FFPTR) Q
;Create entry
D ADDSTAT(FFPTR,SYSPTR,CODE,STTYPE,DATE)
Q
;
SCREEN(FILE,FIELD,DATE) ;Apply screening logic to file/field ?
; Input : FILE - File number
; FIELD - Field number (defaults to .01)
; DATE - FileMan date/time to check against (optional)
; (defaults to NOW)
;Output : Flag indicating if screening logic should be applied
; 0 = Don't screen entries during selection
; 1 = Screen entries during selection
; Notes : 0 (don't screen) is returned on bad input
; : If time is not included with the date, the last status
; for the given day is returned
N SCREEN,STAT
S SCREEN=0
S FILE=+$G(FILE)
I 'FILE Q SCREEN
S FIELD=+$G(FIELD)
I 'FIELD S FIELD=.01
S DATE=+$G(DATE)
I 'DATE S DATE=$$NOW^XLFDT()
S STAT=$$GETSTAT(FILE,FIELD,DATE)
I +STAT=6 S SCREEN=1
Q SCREEN
;
ADDSTAT(FFPTR,SYSPTR,CODE,TYPE,DATE) ;Set file/field implementation status
; Input : FFPTR - Pointer to HDIS FILE/FIELD file (#7115.6)
; SYSPTR - Pointer to HDIS SYSTEM file (#7118.21)
; CODE - Status code to set (defaults to "not started")
; TYPE - Type of status code being used (optional)
; 1 = Client (default) 2 = Server
; DATE - FileMan date/time to return status for (optional)
; (defaults to NOW)
;Ouput : None
; Notes : If time is not included with the date, 1 second past
; midnight will be used as the time
; : If an entry for the given file/field and date/time already
; exists, a new entry will still be added
; : Call assumes that FFPTR and SYSPTR are valid
N STATPTR,HDISFDA,HDISIEN,HDISMSG,IENS
;Check input
S FFPTR=+$G(FFPTR)
I 'FFPTR Q
S SYSPTR=+$G(SYSPTR)
I 'SYSPTR Q
S CODE=+$G(CODE)
S DATE=+$G(DATE)
I 'DATE S DATE=$$NOW^XLFDT()
I '$P(DATE,".",2) S $P(DATE,".",2)="000001"
S TYPE=+$G(TYPE)
I ('TYPE)!(TYPE<1)!(TYPE>2) S TYPE=1
;Get pointer to status
I '$$GETIEN^HDISVF06(CODE,TYPE,.STATPTR) Q
;Create entry
S IENS="+1,"
S HDISFDA(7118.25,IENS,.01)=SYSPTR
S HDISFDA(7118.25,IENS,.02)=FFPTR
S HDISFDA(7118.25,IENS,.03)=STATPTR
S HDISFDA(7118.25,IENS,.04)=DATE
D UPDATE^DIE("","HDISFDA","HDISIEN","HDISMSG")
Q
;
;---- End HDIS VUID IMPLEMENTATION STATUS file (#7118.25) APIs ----
;
FACPTR(FACNUM) ;Return pointer to INSTITUTION file (#4) for facility number
; Input : FACNUM - Facility number (optional) (defaults to current)
;Output : Pointer to INSTITUTION file (#4)
; Notes : NULL ("") is returned if an entry can not be found
N FACPTR
S FACNUM=$G(FACNUM)
I 'FACNUM D Q FACPTR
.S FACPTR=+$$SITE^VASITE()
.I FACPTR<1 S FACPTR=""
S FACPTR=$$LKUP^XUAF4(FACNUM)
I 'FACPTR S FACPTR=""
Q FACPTR
;
FACNUM(FACPTR) ;Return facility number
; Input : FACPTR - Pointer to INSTITUTION file (#4) (optional)
; (default to current location)
;Output : Facility number
; Null ("") returned if facility number couldn't be determined
N FACNUM
S FACPTR=$G(FACPTR)
I 'FACPTR D Q FACNUM
.S FACNUM=$P($$SITE^VASITE(),"^",3)
.I FACNUM<1 S FACNUM=""
S FACNUM=$P($$NS^XUAF4(FACPTR),"^",2)
I FACNUM<1 S FACNUM=""
Q FACNUM
HDISVF01 ;BPFO/JRP - FILE UTILITIES/API;12/20/2004 ; 07 Mar 2005 9:53 AM
+1 ;;1.0;HEALTH DATA & INFORMATICS;**1**;Feb 22, 2005
+2 ;
+3 ;---- Begin HDIS VUID IMPLEMENTATION STATUS file (#7118.25) APIs ----
+4 ;
GETSTAT(FILE,FIELD,DATE,FAC,DOMAIN,TYPE) ;Get file/field implementation status
+1 ; Input : FILE - File number
+2 ; FIELD - Field number (defaults to .01)
+3 ; DATE - FileMan date/time to return status for (optional)
+4 ; (defaults to NOW)
+5 ; FAC - Facility number (optional) (defaults to current)
+6 ; DOMAIN - Domain/IP address (optional) (defaults to current)
+7 ; TYPE - Type of system (optional) (defaults to current)
+8 ; 0 = Test 1 = Production
+9 ;Output : StatusCode ^ StatusPointer ^ StatusDate
+10 ; Notes : Values for "not started" status and no date are returned
+11 ; on bad input or if no entry is found
+12 ; : If time is not included with the date, the last status
+13 ; for the given day is returned
+14 ; : If more than one entry for the same date/time is found, the
+15 ; higher entry number is returned
+16 NEW IEN,STATCODE,STATPTR,STATDT,NOTYET,FFPTR,SYSPTR,X
+17 ;Calculate output for bad input
+18 SET STATCODE=0
+19 SET X=$$GETIEN^HDISVF06(STATCODE,+$$GETTYPE^HDISVF02(),.STATPTR)
+20 SET NOTYET=STATCODE_"^"_STATPTR_"^"
+21 ;Check input
+22 SET FILE=+$GET(FILE)
+23 IF 'FILE
QUIT NOTYET
+24 SET FIELD=+$GET(FIELD)
+25 IF 'FIELD
SET FIELD=.01
+26 SET DATE=+$GET(DATE)
+27 IF 'DATE
SET DATE=$$NOW^XLFDT()
+28 IF '$PIECE(DATE,".",2)
SET $PIECE(DATE,".",2)=24
+29 SET FAC=+$GET(FAC)
+30 IF 'FAC
SET FAC=$$FACNUM()
+31 SET DOMAIN=$GET(DOMAIN)
+32 IF DOMAIN=""
SET DOMAIN=$GET(^XMB("NETNAME"))
+33 SET TYPE=$GET(TYPE)
+34 IF TYPE=""
SET TYPE=$$PROD^XUPROD()
+35 IF ('FAC)!(DOMAIN="")!(TYPE="")
QUIT NOTYET
+36 ;Get pointers
+37 IF '$$FINDSYS^HDISVF07(DOMAIN,FAC,TYPE,1,.SYSPTR)
QUIT NOTYET
+38 IF '$$GETIEN^HDISVF05(FILE,FIELD,.FFPTR)
QUIT NOTYET
+39 ;Get status date/time closest to input date/time
+40 SET DATE=DATE+.0000001
+41 SET STATDT=+$ORDER(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,DATE),-1)
+42 IF 'STATDT
QUIT NOTYET
+43 ;Build list of entry numbers with found status date/time
+44 KILL IEN
+45 SET STATPTR=0
+46 FOR
SET STATPTR=+$ORDER(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,STATDT,STATPTR))
IF 'STATPTR
QUIT
Begin DoDot:1
+47 SET IEN=0
+48 FOR
SET IEN=+$ORDER(^HDISF(7118.25,"AFAC",SYSPTR,FFPTR,STATDT,STATPTR,IEN))
IF 'IEN
QUIT
Begin DoDot:2
+49 SET IEN(IEN)=STATPTR
End DoDot:2
End DoDot:1
+50 ;Get last entry number
+51 SET IEN=+$ORDER(IEN(""),-1)
+52 IF 'IEN
QUIT NOTYET
+53 ;Build output
+54 SET STATPTR=IEN(IEN)
+55 SET X=$$GETCODE^HDISVF06(STATPTR,.STATCODE)
+56 QUIT STATCODE_"^"_STATPTR_"^"_STATDT
+57 ;
SETSTAT(FILE,FIELD,CODE,DATE,STTYPE,FAC,DOMAIN,SYTYPE) ;Set file/field implementation status
+1 ; Input : FILE - File number
+2 ; FIELD - Field number (defaults to .01)
+3 ; CODE - Status code to set (defaults to "not started")
+4 ; DATE - FileMan date/time to return status for (optional)
+5 ; (defaults to NOW)
+6 ; STTYPE - Type of status code being used (optional)
+7 ; 1 = Client (default) 2 = Server
+8 ; FAC - Facility number (optional) (defaults to current)
+9 ; DOMAIN - Domain/IP address (optional) (defaults to current)
+10 ; SYTYPE - Type of system (optional) (defaults to current)
+11 ; 0 = Test 1 = Production
+12 ;Output : None
+13 ; Notes : If time is not included with the date, 1 second past
+14 ; midnight will be used as the time
+15 ; : If an entry for the given file/field and date/time already
+16 ; exists, a new entry will still be added
+17 NEW FFPTR,SYSPTR
+18 ;Check input
+19 SET FILE=+$GET(FILE)
+20 IF 'FILE
QUIT
+21 SET FIELD=+$GET(FIELD)
+22 IF 'FIELD
SET FIELD=.01
+23 SET CODE=+$GET(CODE)
+24 SET DATE=+$GET(DATE)
+25 IF 'DATE
SET DATE=$$NOW^XLFDT()
+26 IF '$PIECE(DATE,".",2)
SET $PIECE(DATE,".",2)="000001"
+27 SET STTYPE=+$GET(STTYPE)
+28 IF ('STTYPE)!(STTYPE<1)!(STTYPE>2)
SET STTYPE=1
+29 SET FAC=+$GET(FAC)
+30 IF 'FAC
SET FAC=$$FACNUM()
+31 SET DOMAIN=$GET(DOMAIN)
+32 IF DOMAIN=""
SET DOMAIN=$GET(^XMB("NETNAME"))
+33 SET SYTYPE=$GET(SYTYPE)
+34 IF SYTYPE=""
SET SYTYPE=$$PROD^XUPROD()
+35 IF ('FAC)!(DOMAIN="")!(SYTYPE="")
QUIT
+36 ;Get pointers
+37 IF '$$FINDSYS^HDISVF07(DOMAIN,FAC,SYTYPE,1,.SYSPTR)
QUIT
+38 IF '$$GETIEN^HDISVF05(FILE,FIELD,.FFPTR)
QUIT
+39 ;Create entry
+40 DO ADDSTAT(FFPTR,SYSPTR,CODE,STTYPE,DATE)
+41 QUIT
+42 ;
SCREEN(FILE,FIELD,DATE) ;Apply screening logic to file/field ?
+1 ; Input : FILE - File number
+2 ; FIELD - Field number (defaults to .01)
+3 ; DATE - FileMan date/time to check against (optional)
+4 ; (defaults to NOW)
+5 ;Output : Flag indicating if screening logic should be applied
+6 ; 0 = Don't screen entries during selection
+7 ; 1 = Screen entries during selection
+8 ; Notes : 0 (don't screen) is returned on bad input
+9 ; : If time is not included with the date, the last status
+10 ; for the given day is returned
+11 NEW SCREEN,STAT
+12 SET SCREEN=0
+13 SET FILE=+$GET(FILE)
+14 IF 'FILE
QUIT SCREEN
+15 SET FIELD=+$GET(FIELD)
+16 IF 'FIELD
SET FIELD=.01
+17 SET DATE=+$GET(DATE)
+18 IF 'DATE
SET DATE=$$NOW^XLFDT()
+19 SET STAT=$$GETSTAT(FILE,FIELD,DATE)
+20 IF +STAT=6
SET SCREEN=1
+21 QUIT SCREEN
+22 ;
ADDSTAT(FFPTR,SYSPTR,CODE,TYPE,DATE) ;Set file/field implementation status
+1 ; Input : FFPTR - Pointer to HDIS FILE/FIELD file (#7115.6)
+2 ; SYSPTR - Pointer to HDIS SYSTEM file (#7118.21)
+3 ; CODE - Status code to set (defaults to "not started")
+4 ; TYPE - Type of status code being used (optional)
+5 ; 1 = Client (default) 2 = Server
+6 ; DATE - FileMan date/time to return status for (optional)
+7 ; (defaults to NOW)
+8 ;Ouput : None
+9 ; Notes : If time is not included with the date, 1 second past
+10 ; midnight will be used as the time
+11 ; : If an entry for the given file/field and date/time already
+12 ; exists, a new entry will still be added
+13 ; : Call assumes that FFPTR and SYSPTR are valid
+14 NEW STATPTR,HDISFDA,HDISIEN,HDISMSG,IENS
+15 ;Check input
+16 SET FFPTR=+$GET(FFPTR)
+17 IF 'FFPTR
QUIT
+18 SET SYSPTR=+$GET(SYSPTR)
+19 IF 'SYSPTR
QUIT
+20 SET CODE=+$GET(CODE)
+21 SET DATE=+$GET(DATE)
+22 IF 'DATE
SET DATE=$$NOW^XLFDT()
+23 IF '$PIECE(DATE,".",2)
SET $PIECE(DATE,".",2)="000001"
+24 SET TYPE=+$GET(TYPE)
+25 IF ('TYPE)!(TYPE<1)!(TYPE>2)
SET TYPE=1
+26 ;Get pointer to status
+27 IF '$$GETIEN^HDISVF06(CODE,TYPE,.STATPTR)
QUIT
+28 ;Create entry
+29 SET IENS="+1,"
+30 SET HDISFDA(7118.25,IENS,.01)=SYSPTR
+31 SET HDISFDA(7118.25,IENS,.02)=FFPTR
+32 SET HDISFDA(7118.25,IENS,.03)=STATPTR
+33 SET HDISFDA(7118.25,IENS,.04)=DATE
+34 DO UPDATE^DIE("","HDISFDA","HDISIEN","HDISMSG")
+35 QUIT
+36 ;
+37 ;---- End HDIS VUID IMPLEMENTATION STATUS file (#7118.25) APIs ----
+38 ;
FACPTR(FACNUM) ;Return pointer to INSTITUTION file (#4) for facility number
+1 ; Input : FACNUM - Facility number (optional) (defaults to current)
+2 ;Output : Pointer to INSTITUTION file (#4)
+3 ; Notes : NULL ("") is returned if an entry can not be found
+4 NEW FACPTR
+5 SET FACNUM=$GET(FACNUM)
+6 IF 'FACNUM
Begin DoDot:1
+7 SET FACPTR=+$$SITE^VASITE()
+8 IF FACPTR<1
SET FACPTR=""
End DoDot:1
QUIT FACPTR
+9 SET FACPTR=$$LKUP^XUAF4(FACNUM)
+10 IF 'FACPTR
SET FACPTR=""
+11 QUIT FACPTR
+12 ;
FACNUM(FACPTR) ;Return facility number
+1 ; Input : FACPTR - Pointer to INSTITUTION file (#4) (optional)
+2 ; (default to current location)
+3 ;Output : Facility number
+4 ; Null ("") returned if facility number couldn't be determined
+5 NEW FACNUM
+6 SET FACPTR=$GET(FACPTR)
+7 IF 'FACPTR
Begin DoDot:1
+8 SET FACNUM=$PIECE($$SITE^VASITE(),"^",3)
+9 IF FACNUM<1
SET FACNUM=""
End DoDot:1
QUIT FACNUM
+10 SET FACNUM=$PIECE($$NS^XUAF4(FACPTR),"^",2)
+11 IF FACNUM<1
SET FACNUM=""
+12 QUIT FACNUM