| 1 | SCDXUTL ;ALB/JLU;Utility routine for ambcare project;4/26/96
 | 
|---|
| 2 |  ;;5.3;Scheduling;**44,78,132**;5/1/96
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | DATE(DATE) ;this entry point will accept a date and return whether the new or old Scheduling Visits file limitations are to be used.
 | 
|---|
| 5 |  ;INPUTS  -  a date in FM format to be compared to the ambcare start
 | 
|---|
| 6 |  ;           date parameter,
 | 
|---|
| 7 |  ;OUTPUTS -  1 for using the new structure
 | 
|---|
| 8 |  ;           0 for using the old structure
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  N PAR,ANS
 | 
|---|
| 11 |  S PAR=$P($G(^SD(404.91,1,"AMB")),U,2) ;get parameter date
 | 
|---|
| 12 |  I 'PAR S ANS=0 G QT
 | 
|---|
| 13 |  I DATE<PAR S ANS=0 G QT ;if date passed in older than parameter us old
 | 
|---|
| 14 |  S ANS=1
 | 
|---|
| 15 | QT Q ANS
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 | FMDATE() ;this entry point returns the FM date from the parameter of
 | 
|---|
| 18 |  ;whether to use the new or old structure.
 | 
|---|
| 19 |  Q $P($G(^SD(404.91,1,"AMB")),U,2)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | CLOSED(DATE) ;this entry point accepts a date, compares it to the close out
 | 
|---|
| 22 |  ;date and returns whether the close out period is up.
 | 
|---|
| 23 |  ;INPUTS  - a date in FM format to be compared to the close out date 
 | 
|---|
| 24 |  ;          parameter.
 | 
|---|
| 25 |  ;OUTPUTS - 1 for close out period is over
 | 
|---|
| 26 |  ;          0 for still being able to close out
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  N PAR,ANS
 | 
|---|
| 29 |  S PAR=$P($G(^SD(404.91,1,"AMB")),U,3) ;gets close out parameter
 | 
|---|
| 30 |  I 'PAR S ANS=0 G CQT
 | 
|---|
| 31 |  I DATE<PAR S ANS=0 G CQT ;if date is after close out date parameter 1.
 | 
|---|
| 32 |  S ANS=1
 | 
|---|
| 33 | CQT Q ANS
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | CLOSEFM() ;this entry point returns the close out date parameter in FM format.
 | 
|---|
| 36 |  Q $P($G(^SD(404.91,1,"AMB")),U,3)
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | INPATENC(PTR,PTR2) ;ALB/JRP - Determine if an Outpatient Encounter
 | 
|---|
| 39 |  ; is for an inpatient appointment
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ;Input  : PTR - Pointer to one of the following files:
 | 
|---|
| 42 |  ;               *  TRANSMITTED OUTPATIENT ENCOUNTER file (#409.73)
 | 
|---|
| 43 |  ;               *  OUTPATIENT ENCOUNTER file (#409.68)
 | 
|---|
| 44 |  ;               *  DELETED OUTPATIENT ENCOUNTER file (#409.74)
 | 
|---|
| 45 |  ;         PTR2 - Denotes which file PTR points to
 | 
|---|
| 46 |  ;                0 = TRANSMITTED OUTPATIENT ENCOUNTER file (Default)
 | 
|---|
| 47 |  ;                1 = OUTPATIENT ENCOUNTER file
 | 
|---|
| 48 |  ;                2 = DELETED OUTPATIENT ENCOUNTER file
 | 
|---|
| 49 |  ;Output : 0 - Encounter is not an inpatient appointment
 | 
|---|
| 50 |  ;         1 - Encounter is an inpatient appointment
 | 
|---|
| 51 |  ;Notes  : 0 is returned if a valid pointer is not passed or the
 | 
|---|
| 52 |  ;         entry in the TRANSMITTED OUTPATIENT ENCOUNTER file does
 | 
|---|
| 53 |  ;         not point to a valid entry in the OUTPATIENT ENCOUNTER
 | 
|---|
| 54 |  ;         file or DELETED OUTPATIENT ENCOUNTER file
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ;Check input
 | 
|---|
| 57 |  S PTR=+$G(PTR)
 | 
|---|
| 58 |  Q:('PTR) 0
 | 
|---|
| 59 |  S PTR2=+$G(PTR2)
 | 
|---|
| 60 |  S:((PTR2<0)!(PTR2>2)) PTR2=0
 | 
|---|
| 61 |  I ('PTR) Q:('$D(^SD(409.73,PTR,0))) 0
 | 
|---|
| 62 |  I (PTR2=1) Q:('$D(^SCE(PTR,0))) 0
 | 
|---|
| 63 |  I (PTR2=2) Q:('$D(^SD(409.74,PTR,0))) 0
 | 
|---|
| 64 |  ;Declare variables
 | 
|---|
| 65 |  N ZERONODE,STATPTR,STATUS
 | 
|---|
| 66 |  ;Passed pointer to TRANSMITTED OUTPATIENT ENCOUNTER file
 | 
|---|
| 67 |  ; Convert to pointer to [DELETED] OUTPATIENT ENCOUNTER file
 | 
|---|
| 68 |  ; Quit if it can't be converted
 | 
|---|
| 69 |  I ('PTR2) D  Q:('PTR) 0
 | 
|---|
| 70 |  .S ZERONODE=$G(^SD(409.73,PTR,0))
 | 
|---|
| 71 |  .S PTR=+$P(ZERONODE,"^",2)
 | 
|---|
| 72 |  .;Entry is for an outpatient encounter
 | 
|---|
| 73 |  .I (PTR) S PTR2=1 Q
 | 
|---|
| 74 |  .;Entry is for a deleted outpatient encounter
 | 
|---|
| 75 |  .S PTR=+$P(ZERONODE,"^",3)
 | 
|---|
| 76 |  .S PTR2=2
 | 
|---|
| 77 |  ;Get zero node of [deleted] encounter
 | 
|---|
| 78 |  S ZERONODE=$G(^SCE(PTR,0))
 | 
|---|
| 79 |  S:(PTR2=2) ZERONODE=$G(^SD(409.74,PTR,1))
 | 
|---|
| 80 |  ;Get pointer to appointment status
 | 
|---|
| 81 |  S STATPTR=+$P(ZERONODE,"^",12)
 | 
|---|
| 82 |  Q:('STATPTR) 0
 | 
|---|
| 83 |  ;Get zero node of appointment status
 | 
|---|
| 84 |  S ZERONODE=$G(^SD(409.63,STATPTR,0))
 | 
|---|
| 85 |  ;Get abbreviation for appointment status
 | 
|---|
| 86 |  S STATUS=$P(ZERONODE,"^",2)
 | 
|---|
| 87 |  ;Inpatient appointments have an abbreviation of 'I'
 | 
|---|
| 88 |  Q:(STATUS="I") 1
 | 
|---|
| 89 |  ;Not an inpatient appointment
 | 
|---|
| 90 |  Q 0
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 | DATECHK() ;this function call returns whether to require diag/prov based
 | 
|---|
| 93 |  ;on the date function call and whether the post init has run.
 | 
|---|
| 94 |  ;there are no inout variables.
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  ;a 1 if after 10/1 or the post init has been run to require diag etc.
 | 
|---|
| 97 |  ;a 0 if not to require yet
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  N DATE,ANS
 | 
|---|
| 100 |  S ANS=$$DATE(DT) I ANS G DATECHKQ
 | 
|---|
| 101 |  I $P(^SD(404.91,1,"AMB"),U,7) S ANS=1 G DATECHKQ
 | 
|---|
| 102 |  S ANS=0
 | 
|---|
| 103 | DATECHKQ Q ANS
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | OCCA(CLN) ;This function call returns whether or not the clinic is
 | 
|---|
| 106 |  ;considered an occasion of service, based upon file 409.45.
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ;CLN is the clinic in question
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ;a 1 if this clinic is an occasion of service clinic
 | 
|---|
| 111 |  ;a 0 if not
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  N SCP,SC,ANS
 | 
|---|
| 114 |  I '$D(^SC(CLN,0)) S ANS=0 G OCCAQ
 | 
|---|
| 115 |  S SCP=$P(^SC(CLN,0),U,7)
 | 
|---|
| 116 |  I 'SCP S ANS=0 G OCCAQ
 | 
|---|
| 117 |  I '$D(^DIC(40.7,SCP,0)) S ANS=0 G OCCAQ
 | 
|---|
| 118 |  S SC=$P(^DIC(40.7,SCP,0),U,2)
 | 
|---|
| 119 |  I 'SC S ANS=0 G OCCAQ
 | 
|---|
| 120 |  I '$O(^SD(409.45,"B",SC,"")) S ANS=0 G OCCAQ
 | 
|---|
| 121 |  I "117^118^119^120^121^123^124^125^126^128^152^165^170^999"[SC S ANS=0 G OCCAQ
 | 
|---|
| 122 |  S ANS=1
 | 
|---|
| 123 | OCCAQ Q ANS
 | 
|---|