SCDXFU04 ;ALB/JRP - ACRP FILE UTILITIES FOR CLOSE OUT;15-APR-97 ; 1/24/02 3:44pm
;;5.3;Scheduling;**121,140,247,1015**;Aug 13, 1993;Build 21
;
XMIT4DBC(XMITPTR) ;Determine if an entry in the TRANSMITTED OUTPATIENT
; ENCOUNTER file (#409.73) should be transmitted to the NPCD
; for database [not workload] credit and/or workload credit
;
;Input : XMITPTR - Pointer to entry in Transmitted Outpatient
; Encounter file
;Output:
; 0 - Transmit - NPCD will accept for monthly workload credit,
; no message generated
; 1 - Transmit - NPCD will accept for monthly workload credit
; with a rolling message
; 2 - Transmit - will accept for yearly workload report
; 3 - Transmit - for historical accuracy of database only
; 4 - Don't transmit (NPCD will not accept for database credit)
;Notes :5 (don't transmit) will be returned on error/bad input
;
;Check input
S XMITPTR=+$G(XMITPTR)
Q:('$D(^SD(409.73,XMITPTR,0))) 5
;Declare variables
N NODE,ENCPTR,DELPTR,ENCDATE
;Get pointer to [deleted] encounter
S NODE=$G(^SD(409.73,XMITPTR,0))
S ENCPTR=+$P(NODE,"^",2)
S DELPTR=+$P(NODE,"^",3)
;Get date/time of [deleted] encounter
S:(ENCPTR) NODE=$G(^SCE(ENCPTR,0))
S:('ENCPTR) NODE=$G(^SD(409.74,DELPTR,1))
S ENCDATE=+NODE
Q:('ENCDATE) 5
;Get the level of acceptance
Q $$OKTOXMIT(ENCDATE)
;
OKTOXMIT(ENCDATE,COMPDATE) ;Determine if an encounter occurring on a
; specified date should be transmitted to the National Patient Care
; Database for database and workload credit. It also determines
; the acceptance level(message type), later used when generating
; late activity messages
;
;Input (FileMan format):
;
; ENCDATE - Date/time Outpatient Encounter occurred on
; COMPDATE - Date to compare close out dates against;
; defaults to the current date
;
;Output : MessageType
;
; MessageType - Indicates what type of message will be generated
; for Encounter with the submitted ENCDATE.
; In the same time the message type determines if
; Encounter can be transmitted. The message type
; indicates if the specified date/time will be
; accepted for database/workload credit.
;
; A message type is determined in the following order of comparison:
; Type Transmitted
; -------------------------------------------------------------
; 4 - Database closeout date no DBCLOSE
; 3 - Annual Workload closeout date yes WLCLA
; 2 - Monthly Workload closeout date yes WLCLOSE
; 1 - Rolling date yes ROLL
;
; 0 - No message yes
; -1 - Error no
;
;Check input / remove time
S ENCDATE=+$G(ENCDATE)\1
Q:(ENCDATE'?7N) "-1"
S COMPDATE=+$G(COMPDATE)\1
S:(COMPDATE'?7N) COMPDATE=$$DT^XLFDT()
;Declare variables
N CLOSEOUT,DBCLOSE,WLCLOSE,WLCLA,ROLL
N DBCRED,WLCRED,COMP
S (DBCRED,WLCRED)=-1
;Get close-out dates for month the encounter occurred in
S CLOSEOUT=$$CLOSEOUT(ENCDATE)
S DBCLOSE=$P(CLOSEOUT,U)
S WLCLOSE=$P(CLOSEOUT,U,2)
S WLCLA=$P(CLOSEOUT,U,3)
S ROLL=$P(CLOSEOUT,U,4)
;Determine LEVEL to determine if an encounter can be transmitted
;and identify a message to be generated
N LEVEL,X,%H,%T,%Y,YY
S LEVEL=0
S X=COMPDATE D H^%DTC S COMP=%H
F YY=4:-1:1 D Q:LEVEL
.S X=$S(YY=4:DBCLOSE,YY=3:WLCLA,YY=2:WLCLOSE,YY=1:ROLL) D
..D H^%DTC I COMP>%H S LEVEL=YY
;Done
Q LEVEL
;
CLOSEOUT(NPCDMNTH) ;Get National Patient Care Database (NPCD) close-out
; dates for a given month
;
;Input : NPCDMNTH - Encouter Date (FileMan format) to calculate
; close-out dates
;Output: DBCL ^ WLCLM ^ WLCLA ^ ROLL
; or -1 ^ -1 ^ -1 ^ -1^ - Error/bad input
; DBCL,WLCLM,WLCLA,ROLL are returned in FileMan format.
;
;DBCL - Database closeout date
; Date on which the specified date/time (NPCDMNTH) will no
; longer be accepted by the NPCD
;WLCLM - Monthly Workload closeout date
; Date on which the specified date/time will no longer be
; accepted by the NPCD for montly workload credit but will
; be valid for fiscal year credit
;WLCLA - Annual Workload closeout date
; Date on which the specified date/time will no longer be
; accepted for yearly credit but will be sent to NPCD for
; historical accuracy of the database.
;ROLL - NPCDMNTH+ROLLD
; Date representing the date ROLLD days older than the
; specified date/time.
;
N DBCL,WLCLM,WLCLA,ROLL,SDY,SDM,SDMM,SDYM,DBCLMD,WLCLMD,WLCLAMD,ROLLD
N X1,X2,X,%H,%T,%Y,TODAY,SDYY
S DBCLMD="0930",WLCLMD=19,WLCLAMD=1019,ROLLD=19
;
;Check input / remove time
S NPCDMNTH=+$G(NPCDMNTH)\1
Q:(+NPCDMNTH'?7N) "-1^-1^-1^-1"
;
;Declare variables
S SDY=$E(NPCDMNTH,1,3)
S SDM=$E(NPCDMNTH,4,5)
;
;Build DBCL
S SDYY=SDY+2 S:SDM>9 SDYY=SDYY+1
S DBCL=SDYY_DBCLMD
;
;Build WLCLM
S SDMM=SDM+1,SDYM=SDY
I SDMM=13 S SDMM="01",SDYM=SDY+1
S:$L(SDMM)=1 SDMM="0"_SDMM
S WLCLM=SDYM_SDMM_WLCLMD
;
;Build WLCLA
I SDM>9 S SDY=SDY+1
S WLCLA=SDY_WLCLAMD
;
;Build ROLL
S X1=NPCDMNTH,X2=ROLLD D C^%DTC S ROLL=X
;
Q DBCL_U_WLCLM_U_WLCLA_U_ROLL
;
AECLOSE(NPCDMNTH,DBCLOSE,WLCLOSE) ;Add/edit NPCD close-out dates for
; entries in the NPCD ENCOUNTER MONTH multiple (field #710) of the
; SCHEDULING PARAMETERS file (#404.91)
;
; This field (#710) is not used starting with SD*5.3*247.
;
;Input : NPCDMNTH - Month to add/edit National Patient Care Database
; close-out dates (FileMan format)
; DBCLOSE - Date on which the specified date/time will no
; longer be accepted by the NPCD (FileMan format)
; WLCLOSE - Date on which the specified date/time will no
; longer be accepted by the NPCD for workload
; credit (FileMan format)
;Output : IEN ^ Added = Success
; IEN = Pointer to entry in NPCD ENCOUNTER MONTH multiple
; Added = Flag indicating if new entry was added
; 1 = Yes 0 = No
; -1 = Error/bad input
;Notes : NPCDMNTH will be converted to an NPCD Encounter Month
; : It is assumed that NPCDMNTH is a valid date
;
;Check input / remove time
S NPCDMNTH=$P((+$G(NPCDMNTH)),".",1)
Q:(NPCDMNTH'?7N) -1
S DBCLOSE=$P((+$G(DBCLOSE)),".",1)
Q:(DBCLOSE'?7N) -1
S WLCLOSE=$P((+$G(WLCLOSE)),".",1)
Q:(WLCLOSE'?7N) -1
;Declare variables
N SCDXFDA,SCDXIEN,SCDXMSG,MNTHPTR,MNTHADD
;Convert FileMan month to NPCD Encounter Month
S NPCDMNTH=$$FM2NPCD(NPCDMNTH)
Q:(NPCDMNTH=-1) -1
;Set up call to FileMan Updater (call will find/create entry)
S SCDXFDA(404.9171,"?+1,1,",.01)=NPCDMNTH
S SCDXFDA(404.9171,"?+1,1,",.02)=DBCLOSE
S SCDXFDA(404.9171,"?+1,1,",.03)=WLCLOSE
;Call FileMan Updater
D UPDATE^DIE("ES","SCDXFDA","SCDXIEN","SCDXMSG")
;Error
Q:($D(SCDXMSG("DIERR"))) -1
;Get entry number
S MNTHPTR=+$G(SCDXIEN(1))
;Determine if new entry was added
S MNTHADD=0
S:($G(SCDXIEN(1,0))="+") MNTHADD=1
;Done
Q MNTHPTR_"^"_MNTHADD
;
FM2NPCD(DATE) ;Convert FileMan date/time to NPCD ENCOUNTER MONTH format
;
;Input : DATE - Date/time to convert (FileMan format)
;Output : MM-YYYY - Imprecise month format
; MM = Month (numeric with leading zero)
; YYYYY = Year
; -1 - Error (bad input)
;Notes : It is assumed that DATE is a valid date
;
;Check input
S DATE=+$P($G(DATE),".",1)
Q:(DATE'?7N) -1
;Return NPCD Encounter Month
Q $E(DATE,4,5)_"-"_(1700+$E(DATE,1,3))
;
NPCD2FM(NPCDMNTH) ;Convert NPCD ENCOUNTER MONTH format to FileMan date
;
;Input : MM-YYYY - Imprecise month format
; MM = Month (numeric with leading zero)
; YYYYY = Year
;Output : DATE - Date/time to convert (FileMan format)
; -1 - Error (bad input)
;Notes : It is assumed that NPCDMNTH is a valid imprecise date
;
;Check input
S NPCDMNTH=$G(NPCDMNTH)
Q:(NPCDMNTH'?2N1"-"4N) -1
;Return FileMan date
;Q ($P(NPCDMNTH,"-",2)-1700)_$P(NPCDMNTH,"-",1)_"00"
; Y2K Renovation. %DT will return yyymm00 for imprecise date.
N X,Y S X=NPCDMNTH D ^%DT
Q Y
SCDXFU04 ;ALB/JRP - ACRP FILE UTILITIES FOR CLOSE OUT;15-APR-97 ; 1/24/02 3:44pm
+1 ;;5.3;Scheduling;**121,140,247,1015**;Aug 13, 1993;Build 21
+2 ;
XMIT4DBC(XMITPTR) ;Determine if an entry in the TRANSMITTED OUTPATIENT
+1 ; ENCOUNTER file (#409.73) should be transmitted to the NPCD
+2 ; for database [not workload] credit and/or workload credit
+3 ;
+4 ;Input : XMITPTR - Pointer to entry in Transmitted Outpatient
+5 ; Encounter file
+6 ;Output:
+7 ; 0 - Transmit - NPCD will accept for monthly workload credit,
+8 ; no message generated
+9 ; 1 - Transmit - NPCD will accept for monthly workload credit
+10 ; with a rolling message
+11 ; 2 - Transmit - will accept for yearly workload report
+12 ; 3 - Transmit - for historical accuracy of database only
+13 ; 4 - Don't transmit (NPCD will not accept for database credit)
+14 ;Notes :5 (don't transmit) will be returned on error/bad input
+15 ;
+16 ;Check input
+17 SET XMITPTR=+$GET(XMITPTR)
+18 IF ('$DATA(^SD(409.73,XMITPTR,0)))
QUIT 5
+19 ;Declare variables
+20 NEW NODE,ENCPTR,DELPTR,ENCDATE
+21 ;Get pointer to [deleted] encounter
+22 SET NODE=$GET(^SD(409.73,XMITPTR,0))
+23 SET ENCPTR=+$PIECE(NODE,"^",2)
+24 SET DELPTR=+$PIECE(NODE,"^",3)
+25 ;Get date/time of [deleted] encounter
+26 IF (ENCPTR)
SET NODE=$GET(^SCE(ENCPTR,0))
+27 IF ('ENCPTR)
SET NODE=$GET(^SD(409.74,DELPTR,1))
+28 SET ENCDATE=+NODE
+29 IF ('ENCDATE)
QUIT 5
+30 ;Get the level of acceptance
+31 QUIT $$OKTOXMIT(ENCDATE)
+32 ;
OKTOXMIT(ENCDATE,COMPDATE) ;Determine if an encounter occurring on a
+1 ; specified date should be transmitted to the National Patient Care
+2 ; Database for database and workload credit. It also determines
+3 ; the acceptance level(message type), later used when generating
+4 ; late activity messages
+5 ;
+6 ;Input (FileMan format):
+7 ;
+8 ; ENCDATE - Date/time Outpatient Encounter occurred on
+9 ; COMPDATE - Date to compare close out dates against;
+10 ; defaults to the current date
+11 ;
+12 ;Output : MessageType
+13 ;
+14 ; MessageType - Indicates what type of message will be generated
+15 ; for Encounter with the submitted ENCDATE.
+16 ; In the same time the message type determines if
+17 ; Encounter can be transmitted. The message type
+18 ; indicates if the specified date/time will be
+19 ; accepted for database/workload credit.
+20 ;
+21 ; A message type is determined in the following order of comparison:
+22 ; Type Transmitted
+23 ; -------------------------------------------------------------
+24 ; 4 - Database closeout date no DBCLOSE
+25 ; 3 - Annual Workload closeout date yes WLCLA
+26 ; 2 - Monthly Workload closeout date yes WLCLOSE
+27 ; 1 - Rolling date yes ROLL
+28 ;
+29 ; 0 - No message yes
+30 ; -1 - Error no
+31 ;
+32 ;Check input / remove time
+33 SET ENCDATE=+$GET(ENCDATE)\1
+34 IF (ENCDATE'?7N)
QUIT "-1"
+35 SET COMPDATE=+$GET(COMPDATE)\1
+36 IF (COMPDATE'?7N)
SET COMPDATE=$$DT^XLFDT()
+37 ;Declare variables
+38 NEW CLOSEOUT,DBCLOSE,WLCLOSE,WLCLA,ROLL
+39 NEW DBCRED,WLCRED,COMP
+40 SET (DBCRED,WLCRED)=-1
+41 ;Get close-out dates for month the encounter occurred in
+42 SET CLOSEOUT=$$CLOSEOUT(ENCDATE)
+43 SET DBCLOSE=$PIECE(CLOSEOUT,U)
+44 SET WLCLOSE=$PIECE(CLOSEOUT,U,2)
+45 SET WLCLA=$PIECE(CLOSEOUT,U,3)
+46 SET ROLL=$PIECE(CLOSEOUT,U,4)
+47 ;Determine LEVEL to determine if an encounter can be transmitted
+48 ;and identify a message to be generated
+49 NEW LEVEL,X,%H,%T,%Y,YY
+50 SET LEVEL=0
+51 SET X=COMPDATE
DO H^%DTC
SET COMP=%H
+52 FOR YY=4:-1:1
Begin DoDot:1
+53 SET X=$SELECT(YY=4:DBCLOSE,YY=3:WLCLA,YY=2:WLCLOSE,YY=1:ROLL)
Begin DoDot:2
+54 DO H^%DTC
IF COMP>%H
SET LEVEL=YY
End DoDot:2
End DoDot:1
IF LEVEL
QUIT
+55 ;Done
+56 QUIT LEVEL
+57 ;
CLOSEOUT(NPCDMNTH) ;Get National Patient Care Database (NPCD) close-out
+1 ; dates for a given month
+2 ;
+3 ;Input : NPCDMNTH - Encouter Date (FileMan format) to calculate
+4 ; close-out dates
+5 ;Output: DBCL ^ WLCLM ^ WLCLA ^ ROLL
+6 ; or -1 ^ -1 ^ -1 ^ -1^ - Error/bad input
+7 ; DBCL,WLCLM,WLCLA,ROLL are returned in FileMan format.
+8 ;
+9 ;DBCL - Database closeout date
+10 ; Date on which the specified date/time (NPCDMNTH) will no
+11 ; longer be accepted by the NPCD
+12 ;WLCLM - Monthly Workload closeout date
+13 ; Date on which the specified date/time will no longer be
+14 ; accepted by the NPCD for montly workload credit but will
+15 ; be valid for fiscal year credit
+16 ;WLCLA - Annual Workload closeout date
+17 ; Date on which the specified date/time will no longer be
+18 ; accepted for yearly credit but will be sent to NPCD for
+19 ; historical accuracy of the database.
+20 ;ROLL - NPCDMNTH+ROLLD
+21 ; Date representing the date ROLLD days older than the
+22 ; specified date/time.
+23 ;
+24 NEW DBCL,WLCLM,WLCLA,ROLL,SDY,SDM,SDMM,SDYM,DBCLMD,WLCLMD,WLCLAMD,ROLLD
+25 NEW X1,X2,X,%H,%T,%Y,TODAY,SDYY
+26 SET DBCLMD="0930"
SET WLCLMD=19
SET WLCLAMD=1019
SET ROLLD=19
+27 ;
+28 ;Check input / remove time
+29 SET NPCDMNTH=+$GET(NPCDMNTH)\1
+30 IF (+NPCDMNTH'?7N)
QUIT "-1^-1^-1^-1"
+31 ;
+32 ;Declare variables
+33 SET SDY=$EXTRACT(NPCDMNTH,1,3)
+34 SET SDM=$EXTRACT(NPCDMNTH,4,5)
+35 ;
+36 ;Build DBCL
+37 SET SDYY=SDY+2
IF SDM>9
SET SDYY=SDYY+1
+38 SET DBCL=SDYY_DBCLMD
+39 ;
+40 ;Build WLCLM
+41 SET SDMM=SDM+1
SET SDYM=SDY
+42 IF SDMM=13
SET SDMM="01"
SET SDYM=SDY+1
+43 IF $LENGTH(SDMM)=1
SET SDMM="0"_SDMM
+44 SET WLCLM=SDYM_SDMM_WLCLMD
+45 ;
+46 ;Build WLCLA
+47 IF SDM>9
SET SDY=SDY+1
+48 SET WLCLA=SDY_WLCLAMD
+49 ;
+50 ;Build ROLL
+51 SET X1=NPCDMNTH
SET X2=ROLLD
DO C^%DTC
SET ROLL=X
+52 ;
+53 QUIT DBCL_U_WLCLM_U_WLCLA_U_ROLL
+54 ;
AECLOSE(NPCDMNTH,DBCLOSE,WLCLOSE) ;Add/edit NPCD close-out dates for
+1 ; entries in the NPCD ENCOUNTER MONTH multiple (field #710) of the
+2 ; SCHEDULING PARAMETERS file (#404.91)
+3 ;
+4 ; This field (#710) is not used starting with SD*5.3*247.
+5 ;
+6 ;Input : NPCDMNTH - Month to add/edit National Patient Care Database
+7 ; close-out dates (FileMan format)
+8 ; DBCLOSE - Date on which the specified date/time will no
+9 ; longer be accepted by the NPCD (FileMan format)
+10 ; WLCLOSE - Date on which the specified date/time will no
+11 ; longer be accepted by the NPCD for workload
+12 ; credit (FileMan format)
+13 ;Output : IEN ^ Added = Success
+14 ; IEN = Pointer to entry in NPCD ENCOUNTER MONTH multiple
+15 ; Added = Flag indicating if new entry was added
+16 ; 1 = Yes 0 = No
+17 ; -1 = Error/bad input
+18 ;Notes : NPCDMNTH will be converted to an NPCD Encounter Month
+19 ; : It is assumed that NPCDMNTH is a valid date
+20 ;
+21 ;Check input / remove time
+22 SET NPCDMNTH=$PIECE((+$GET(NPCDMNTH)),".",1)
+23 IF (NPCDMNTH'?7N)
QUIT -1
+24 SET DBCLOSE=$PIECE((+$GET(DBCLOSE)),".",1)
+25 IF (DBCLOSE'?7N)
QUIT -1
+26 SET WLCLOSE=$PIECE((+$GET(WLCLOSE)),".",1)
+27 IF (WLCLOSE'?7N)
QUIT -1
+28 ;Declare variables
+29 NEW SCDXFDA,SCDXIEN,SCDXMSG,MNTHPTR,MNTHADD
+30 ;Convert FileMan month to NPCD Encounter Month
+31 SET NPCDMNTH=$$FM2NPCD(NPCDMNTH)
+32 IF (NPCDMNTH=-1)
QUIT -1
+33 ;Set up call to FileMan Updater (call will find/create entry)
+34 SET SCDXFDA(404.9171,"?+1,1,",.01)=NPCDMNTH
+35 SET SCDXFDA(404.9171,"?+1,1,",.02)=DBCLOSE
+36 SET SCDXFDA(404.9171,"?+1,1,",.03)=WLCLOSE
+37 ;Call FileMan Updater
+38 DO UPDATE^DIE("ES","SCDXFDA","SCDXIEN","SCDXMSG")
+39 ;Error
+40 IF ($DATA(SCDXMSG("DIERR")))
QUIT -1
+41 ;Get entry number
+42 SET MNTHPTR=+$GET(SCDXIEN(1))
+43 ;Determine if new entry was added
+44 SET MNTHADD=0
+45 IF ($GET(SCDXIEN(1,0))="+")
SET MNTHADD=1
+46 ;Done
+47 QUIT MNTHPTR_"^"_MNTHADD
+48 ;
FM2NPCD(DATE) ;Convert FileMan date/time to NPCD ENCOUNTER MONTH format
+1 ;
+2 ;Input : DATE - Date/time to convert (FileMan format)
+3 ;Output : MM-YYYY - Imprecise month format
+4 ; MM = Month (numeric with leading zero)
+5 ; YYYYY = Year
+6 ; -1 - Error (bad input)
+7 ;Notes : It is assumed that DATE is a valid date
+8 ;
+9 ;Check input
+10 SET DATE=+$PIECE($GET(DATE),".",1)
+11 IF (DATE'?7N)
QUIT -1
+12 ;Return NPCD Encounter Month
+13 QUIT $EXTRACT(DATE,4,5)_"-"_(1700+$EXTRACT(DATE,1,3))
+14 ;
NPCD2FM(NPCDMNTH) ;Convert NPCD ENCOUNTER MONTH format to FileMan date
+1 ;
+2 ;Input : MM-YYYY - Imprecise month format
+3 ; MM = Month (numeric with leading zero)
+4 ; YYYYY = Year
+5 ;Output : DATE - Date/time to convert (FileMan format)
+6 ; -1 - Error (bad input)
+7 ;Notes : It is assumed that NPCDMNTH is a valid imprecise date
+8 ;
+9 ;Check input
+10 SET NPCDMNTH=$GET(NPCDMNTH)
+11 IF (NPCDMNTH'?2N1"-"4N)
QUIT -1
+12 ;Return FileMan date
+13 ;Q ($P(NPCDMNTH,"-",2)-1700)_$P(NPCDMNTH,"-",1)_"00"
+14 ; Y2K Renovation. %DT will return yyymm00 for imprecise date.
+15 NEW X,Y
SET X=NPCDMNTH
DO ^%DT
+16 QUIT Y