| 1 | BPSOSU1 ;BHAM ISC/FCS/DRS/FLS/DLF - copied for ECME ;06/01/2004
 | 
|---|
| 2 |  ;;1.0;E CLAIMS MGMT ENGINE;**1**;JUN 2004
 | 
|---|
| 3 |  ;----------------------------------------------------------------------
 | 
|---|
| 4 |  ;----------------------------------------------------------------------
 | 
|---|
| 5 |  ;Standard Date Functions
 | 
|---|
| 6 |  ;----------------------------------------------------------------------
 | 
|---|
| 7 |  ;Standard Date PROMPT:
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;Parameters:
 | 
|---|
| 10 |  ;    PROMPT  = Text to be displayed before read
 | 
|---|
| 11 |  ;    DFLT    = Default date (internal format)
 | 
|---|
| 12 |  ;    OPT     = 1 - Answer optional       0 - Answer required
 | 
|---|
| 13 |  ;    SDATE   = Minimum date (internal format or NOW and DT)
 | 
|---|
| 14 |  ;    EDATE   = Maximum date (internal format or NOW and DT)
 | 
|---|
| 15 |  ;    %DT     = E - Echo answer           R - Require time
 | 
|---|
| 16 |  ;              S - Seconds returned      T - Time allowed but not req
 | 
|---|
| 17 |  ;              X - Exact date req
 | 
|---|
| 18 |  ;    TIMEOUT = Number of seconds
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ;Returns:
 | 
|---|
| 21 |  ;    <null>  = No response             <^> - Up-arrow entered
 | 
|---|
| 22 |  ;    <-1>    = Timeout occurred       <^^> - Two up-arrows entered
 | 
|---|
| 23 |  ;    <date>  = Internal FM Date
 | 
|---|
| 24 |  ;----------------------------------------------------------------------
 | 
|---|
| 25 |  ; IHS/SD/lwj 8/5/02  NCPDP 5.1 changes
 | 
|---|
| 26 |  ;  Subroutine FM3EXT cloned from FM2EXT - routine used to transfer 
 | 
|---|
| 27 |  ;  the dates.  Now that NCPDP 5.1 stores the field ID with all the
 | 
|---|
| 28 |  ;  fields, we needed currently just want to skip transforming the
 | 
|---|
| 29 |  ;  date for 5.1 type claims
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  ;----------------------------------------------------------------------
 | 
|---|
| 33 | DATE(PROMPT,DFLT,OPT,SDATE,EDATE,%DT,TIMEOUT) ;EP -
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  N XDATA,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  Q:$G(PROMPT)="" ""
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  S $P(DIR(0),"^",1)="DA"_$S(OPT=1:"O",1:"")
 | 
|---|
| 40 |  S $P(XDATA,":",1)=SDATE
 | 
|---|
| 41 |  S $P(XDATA,":",2)=EDATE
 | 
|---|
| 42 |  S $P(XDATA,":",3)=%DT
 | 
|---|
| 43 |  S $P(DIR(0),"^",2)=XDATA
 | 
|---|
| 44 |  S DIR("A")=PROMPT
 | 
|---|
| 45 |  S:$G(DFLT)'="" DIR("B")=$$FM2EXT(DFLT)
 | 
|---|
| 46 |  S:+$G(TIMEOUT)>0 DIR("T")=TIMEOUT
 | 
|---|
| 47 |  D ^DIR
 | 
|---|
| 48 |  Q $S($G(DTOUT)=1:-1,$G(DIROUT)=1:"^^",$G(DUOUT)=1:"^",1:Y)
 | 
|---|
| 49 |  ;----------------------------------------------------------------------
 | 
|---|
| 50 |  ;Convert FileMan Date to External Date Format
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  ;Parameters:    Y       - FileMan formatted date (YYYMMDD.HHMMSS)
 | 
|---|
| 53 |  ;Returns:      Y       - External date
 | 
|---|
| 54 |  ;----------------------------------------------------------------------
 | 
|---|
| 55 | FM2EXT(Y) ;EP
 | 
|---|
| 56 |  Q:$G(^DD("DD"))="" ""
 | 
|---|
| 57 |  X ^DD("DD")
 | 
|---|
| 58 |  Q $S($E(Y,1,3)?3A:Y,1:"")
 | 
|---|
| 59 |  ;----------------------------------------------------------------------
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | FM3EXT(Y) ;EP   IHS/SD/lwj 8/5/02 clone of FM2EXT- accommodates 5.1 type clms
 | 
|---|
| 62 |  Q:$E(Y,1,1)["C" Y
 | 
|---|
| 63 |  S Y=Y-17000000
 | 
|---|
| 64 |  Q:$G(^DD("DD"))="" ""
 | 
|---|
| 65 |  X ^DD("DD")
 | 
|---|
| 66 |  Q $S($E(Y,1,3)?3A:Y,1:"")
 | 
|---|
| 67 |  ;----------------------------------------------------------------------
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | FM2MDY(Y) ;EP
 | 
|---|
| 70 |  Q:Y="" ""
 | 
|---|
| 71 |  Q $E(Y,4,5)_"/"_$E(Y,6,7)_"/"_$E(Y,2,3)
 | 
|---|
| 72 |  ;----------------------------------------------------------------------
 | 
|---|
| 73 |  ;Convert External Date to FileMan Date Format
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  ;Parameters:   X       - External date
 | 
|---|
| 76 |  ;Returns:      Y       - FileMan formatted date (YYYMMDD.HHMMSS)
 | 
|---|
| 77 |  ;----------------------------------------------------------------------
 | 
|---|
| 78 | EXT2FM(X) ;
 | 
|---|
| 79 |  N %DT,Y
 | 
|---|
| 80 |  Q:$G(X)="" ""
 | 
|---|
| 81 |  D ^%DT
 | 
|---|
| 82 |  Q Y
 | 
|---|
| 83 |  ;----------------------------------------------------------------------
 | 
|---|
| 84 |  ;Returns current Date/Time in FileMan date format
 | 
|---|
| 85 | NOWFM() ;EP
 | 
|---|
| 86 |  N %,%H,%I,X
 | 
|---|
| 87 |  D NOW^%DTC
 | 
|---|
| 88 |  Q %
 | 
|---|
| 89 | NOWEXT() ;EP - External form of $$NOWFM
 | 
|---|
| 90 |  N Y S Y=$$NOWFM X ^DD("DD") Q Y
 | 
|---|
| 91 |  ;----------------------------------------------------------------------
 | 
|---|
| 92 |  ;Takes a FileMan date and adds or subtracts days
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;Parameters:   X1   - FileMan formatted date
 | 
|---|
| 95 |  ;              X2   - Number of days (ECME = add, neg = subtract)
 | 
|---|
| 96 |  ;Returns:      X    - Resulting FileMan formatted date
 | 
|---|
| 97 |  ;----------------------------------------------------------------------
 | 
|---|
| 98 | CDTFM(X1,X2) ;EP - BPSER*,BPSES02
 | 
|---|
| 99 |  N X,%H
 | 
|---|
| 100 |  Q:$G(X1)="" ""
 | 
|---|
| 101 |  Q:$G(X2)="" ""
 | 
|---|
| 102 |  D C^%DTC
 | 
|---|
| 103 |  Q X
 | 
|---|
| 104 |  ;----------------------------------------------------------------------
 | 
|---|
| 105 |  ;Takes a FileMan date and returns 3-digit julian date
 | 
|---|
| 106 | JULDATE(DT) ;
 | 
|---|
| 107 |  N X,X1,X2,%H,%T,%Y
 | 
|---|
| 108 |  Q:'(DT?7N) ""
 | 
|---|
| 109 |  S X2=$E(DT,1,3)_"0101",X1=DT
 | 
|---|
| 110 |  D ^%DTC
 | 
|---|
| 111 |  S X=X+1
 | 
|---|
| 112 |  Q $TR($J(X,3)," ","0")
 | 
|---|
| 113 |  ;----------------------------------------------------------------------
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 |  ;$$DTR(AA,AB,ADEF,BDEF,T) Input Beginning & Ending prompts, return
 | 
|---|
| 116 |  ;                       "Begin date^End date" or 0 if unsuccessful.
 | 
|---|
| 117 |  ;$$DTR() is okay - all args are optional
 | 
|---|
| 118 |  ;$$DTP(AA,DEF) Input a prompt, return a single date "Internal^External"
 | 
|---|
| 119 |  ;$$DTM(AA,DEF) Input a prompt, return month/year "Internal^External"
 | 
|---|
| 120 |  ;--------------------------------------------------------------------
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | DTR(AA,AB,ADEF,BDEF,T) ;EP - GET THE DATE RANGE (beginning and ending dates)
 | 
|---|
| 123 |  ; IN:
 | 
|---|
| 124 |  ;    AA   = PROMPT for BEGINNING DATE
 | 
|---|
| 125 |  ;    AB   = PROMPT for ENDING DATE
 | 
|---|
| 126 |  ;    ADEF = DEFAULT date for BEGINNING DATE
 | 
|---|
| 127 |  ;    BDEF = DEFAULT date for ENDING DATE
 | 
|---|
| 128 |  ;    T    = whether TIME is allowed as entry, and if REQUIRED
 | 
|---|
| 129 |  ;           (If T="T" then TIME is allowed; is REQ'd if T="R").
 | 
|---|
| 130 |  ; OUT:
 | 
|---|
| 131 |  ;    Beginning Date^Ending Date in 7digit FileMan format
 | 
|---|
| 132 |  ;      If user enters "^" then out=0
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  NEW %DT,X,Y,U,PROMPT,DEFAULT,BEGDT,ENDDT
 | 
|---|
| 135 |  S U="^"
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | DTR1 ; -- Get beginning date
 | 
|---|
| 138 |  S %DT="AE"_$G(T)
 | 
|---|
| 139 |  I $D(AA) S PROMPT=AA
 | 
|---|
| 140 |  E  S PROMPT="Enter the Beginning Date"_$S($G(T)]"":" @ Time",1:"")_": "
 | 
|---|
| 141 |  S:$D(ADEF) DEFAULT=ADEF
 | 
|---|
| 142 |  S BEGDT=$$DATE^BPSOSU1(PROMPT,$G(DEFAULT),1,1000101,3991231,%DT,$G(DTIME))
 | 
|---|
| 143 |  I BEGDT<1 QUIT 0
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  WRITE !
 | 
|---|
| 146 |  S %DT="AE"_$G(T)
 | 
|---|
| 147 |  I $D(AB) S PROMPT=AB
 | 
|---|
| 148 |  E  S PROMPT="Enter the Ending Date"_$S($G(T)]"":" @ Time",1:"")_": "
 | 
|---|
| 149 |  S:$D(BDEF) DEFAULT=BDEF
 | 
|---|
| 150 |  S ENDDT=$$DATE^BPSOSU1(PROMPT,$G(DEFAULT),1,BEGDT,3991231,%DT,$G(DTIME))
 | 
|---|
| 151 |  I ENDDT["^" Q 0  ;user wants out if "^"
 | 
|---|
| 152 |  ; -- Ensure END date is not earlier than BEG date
 | 
|---|
| 153 |  I ENDDT<BEGDT WRITE $C(7),!!,"Ending date must not be less than beginning date!",!! HANG 2 GOTO DTR1
 | 
|---|
| 154 |  QUIT BEGDT_U_ENDDT
 | 
|---|
| 155 |  ;--------------------------------------------------------------------
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 | DTP(AA,DEF) ;EP - *** GET A SINGLE PAST DATE, TIME NOT ALLOWED ***
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  ; IN:  AA  = PROMPT you want displayed to user
 | 
|---|
| 161 |  ;      DEF = DEFAULT date
 | 
|---|
| 162 |  ; OUT: FileMan Date^readable Date
 | 
|---|
| 163 |  ;      If user enters "^" then OUT=0
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  NEW %DT,Y,DATE
 | 
|---|
| 166 |  S:'$D(U) U="^"
 | 
|---|
| 167 |  I '$D(DT)#2 DO DT^DICRW ;get today's date
 | 
|---|
| 168 |  S U="^"
 | 
|---|
| 169 |  S %DT="AEPX" ;ask, echo, past dates assumed, exact date reqd
 | 
|---|
| 170 |  S %DT("A")=$S($D(AA):AA,1:"What DATE: ")
 | 
|---|
| 171 |  S:$D(DEF) %DT("B")=DEF
 | 
|---|
| 172 |  DO ^%DT KILL %DT
 | 
|---|
| 173 |  ; -- Q if no data
 | 
|---|
| 174 |  I Y<1 QUIT 0  ;quit if date was invalid
 | 
|---|
| 175 |  I $D(DTOUT) QUIT 0  ;quit if timeout occurred
 | 
|---|
| 176 |  ; -- Define dates
 | 
|---|
| 177 |  ; DATE("Y") is FM format date; DATE is MON DD,YEAR format.
 | 
|---|
| 178 |  S DATE("Y")=Y XECUTE ^DD("DD") S DATE=Y
 | 
|---|
| 179 |  QUIT DATE("Y")_U_DATE
 | 
|---|
| 180 |  ;--------------------------------------------------------------------
 | 
|---|