| 1 | PSULRHL3 ;HCIOFO/BH - Daily file procesing ; 4/28/04 3:10pm
|
---|
| 2 | ;;4.0;PHARMACY BENEFITS MANAGEMENT;**3**;MARCH, 2005
|
---|
| 3 | ;
|
---|
| 4 | ; ** THIS ROUTINE SHOULD NEVER BE INSTALLED AT A SITE ***
|
---|
| 5 | ; ** THIS ROUTINE IS ONLY TO BE RUN ON THE CMOP-NAT SERVER ***
|
---|
| 6 | ;
|
---|
| 7 | Q
|
---|
| 8 | ;
|
---|
| 9 | PROCESS ; This process loops through the file containing parsed HL7 data.
|
---|
| 10 | ; This process runs each day and collects up to the previous days data.
|
---|
| 11 | ; The data is ordered by facility. All the data for the facility for
|
---|
| 12 | ; for up to the previous day gets filed into one flat file for PBM to
|
---|
| 13 | ; process. A pre-init sub routine CULL loops through all x-refs that
|
---|
| 14 | ; indicate processed data for facility and date and culls the data and
|
---|
| 15 | ; removes the FD x-ref.
|
---|
| 16 | ;
|
---|
| 17 | ;
|
---|
| 18 | D CULL
|
---|
| 19 | ;
|
---|
| 20 | ;
|
---|
| 21 | N DFN,EDATE,FACILITY,FILE,IEN,OPEN,OUTDIR,PSUDTE,QUIT,RDATE,RC,SDATE,TEMP,X,X1,X2
|
---|
| 22 | ;
|
---|
| 23 | ; End date for search
|
---|
| 24 | D NOW^%DTC S TEMP=%,EDATE=$P(TEMP,".",1)
|
---|
| 25 | ; Run date i.e. going to process data up to yesterday
|
---|
| 26 | S X1=$P(TEMP,".",1),X2="-1" D C^%DTC S RDATE=$P(X,".",1)
|
---|
| 27 | ;
|
---|
| 28 | ;
|
---|
| 29 | S FACILITY="",(QUIT,OPEN)=0
|
---|
| 30 | ;
|
---|
| 31 | F S FACILITY=$O(^DIZ(99999,"FDP",FACILITY)) Q:'FACILITY!(QUIT) D
|
---|
| 32 | . ;
|
---|
| 33 | . I $D(^DIZ(99999,"FD",FACILITY,RDATE)) D Q
|
---|
| 34 | . . D ERROR(3,FACILITY,RDATE) Q
|
---|
| 35 | . ; New facility so close any open files.
|
---|
| 36 | . I OPEN D CLOSE S OPEN=0
|
---|
| 37 | . S DATE="0"
|
---|
| 38 | . F S DATE=$O(^DIZ(99999,"FDP",FACILITY,DATE)) Q:'DATE!(DATE'<EDATE)!(QUIT) D
|
---|
| 39 | . . ;
|
---|
| 40 | . . S DFN=""
|
---|
| 41 | . . F S DFN=$O(^DIZ(99999,"FDP",FACILITY,DATE,DFN)) Q:'DFN!(QUIT) D
|
---|
| 42 | . . . S IEN=""
|
---|
| 43 | . . . F S IEN=$O(^DIZ(99999,"FDP",FACILITY,DATE,DFN,IEN)) Q:'IEN!(QUIT) D
|
---|
| 44 | . . . . I 'OPEN D Q:'RC
|
---|
| 45 | . . . . . S RC=$$OPEN()
|
---|
| 46 | . . . . . I 'RC S QUIT=1 Q
|
---|
| 47 | . . . . . S OPEN=1
|
---|
| 48 | . . . . D FILE
|
---|
| 49 | I OPEN D CLOSE
|
---|
| 50 | Q
|
---|
| 51 | ;
|
---|
| 52 | ;
|
---|
| 53 | OPEN() ; Open the output directory
|
---|
| 54 | N DST,POP,SRC
|
---|
| 55 | S FILE=FACILITY_DT_".DAT"
|
---|
| 56 | ;S OUTDIR="W:\PBM\National-PBM"
|
---|
| 57 | S OUTDIR="USER$:[PBM.LAB]"
|
---|
| 58 | ;
|
---|
| 59 | K DST,SRC
|
---|
| 60 | S SRC(FILE)=""
|
---|
| 61 | I $$LIST^%ZISH(OUTDIR,"SRC","DST") D ERROR(2,FACILITY,FILE) Q 0
|
---|
| 62 | ;
|
---|
| 63 | D OPEN^%ZISH("HL7FILE",OUTDIR,FILE,"W")
|
---|
| 64 | I $G(POP) D ERROR(1,FACILITY,OUTDIR_FILE) Q 0
|
---|
| 65 | ;
|
---|
| 66 | Q 1
|
---|
| 67 | ;
|
---|
| 68 | CLOSE ; Set Cross ref indicating that facilities data for the day got
|
---|
| 69 | ; processed, and close the output file.
|
---|
| 70 | N FDA
|
---|
| 71 | K FDA
|
---|
| 72 | S FDA(99999,"+1,",.01)=$E(FILE,1,3)
|
---|
| 73 | S FDA(99999,"+1,",.03)=RDATE
|
---|
| 74 | D UPDATE^DIE("","FDA",)
|
---|
| 75 | D CLOSE^%ZISH("HL7FILE")
|
---|
| 76 | Q
|
---|
| 77 | ;
|
---|
| 78 | FILE ; File the lab data to the output file in the following single string format.
|
---|
| 79 | ;
|
---|
| 80 | ; PAT|Facility|ICN|SSN|DFN|Date/Time Specimen Collected|Site/Specimen|Local Lab Number^Local Lab Name|
|
---|
| 81 | ; NLT Code^NLT Name|LOINC Code^LOINC Name|Result|Units|Low Range|High Range|
|
---|
| 82 | ;
|
---|
| 83 | ;
|
---|
| 84 | N CNT,CR,DFN,FAC,HRANGE,ICN,LABA,LABB,LABC,LNCODE,LNNAME,LOCALLAB,LRANGE,NLTCODE,NLTNAME,RANGE,REC,RESIEN,RESREC,RESREC1,RESULT,SPEC,SPECDATE,SPECREC,SPECIEN,SSN,STR,STR1,TEST,UNITS
|
---|
| 85 | ;
|
---|
| 86 | U IO
|
---|
| 87 | S REC=^DIZ(99999,IEN,0)
|
---|
| 88 | S SSN=$P(REC,U,5),ICN=$P(REC,U,4),FAC=$P(REC,U,1),DFN=$P(REC,U,2)
|
---|
| 89 | ;
|
---|
| 90 | S SPECIEN=0
|
---|
| 91 | F S SPECIEN=$O(^DIZ(99999,IEN,1,SPECIEN)) Q:'SPECIEN D
|
---|
| 92 | . ; Do not file if Specimen has no results
|
---|
| 93 | . S TEST=0
|
---|
| 94 | . S TEST=$O(^DIZ(99999,IEN,1,SPECIEN,1,TEST)) Q:'TEST
|
---|
| 95 | . S SPECREC=^DIZ(99999,IEN,1,SPECIEN,0)
|
---|
| 96 | . S SPEC=$P(SPECREC,U,1),SPECDATE=$P(SPECREC,U,2)
|
---|
| 97 | . S STR="PAT|"_FAC_"|"_ICN_"|"_SSN_"|"_DFN_"|"_SPECDATE_"|"_SPEC
|
---|
| 98 | . ;W STR
|
---|
| 99 | . S RESIEN=0
|
---|
| 100 | . ;S CNT=0
|
---|
| 101 | . F S RESIEN=$O(^DIZ(99999,IEN,1,SPECIEN,1,RESIEN)) Q:'RESIEN D
|
---|
| 102 | . . S RESREC=^DIZ(99999,IEN,1,SPECIEN,1,RESIEN,0)
|
---|
| 103 | . . S RESREC1=^DIZ(99999,IEN,1,SPECIEN,1,RESIEN,2)
|
---|
| 104 | . . ;S CNT=CNT+1
|
---|
| 105 | . . S LOCALLAB=$P(RESREC,U,6),NLTCODE=$P(RESREC,U,2)
|
---|
| 106 | . . S NLTNAME=$P(RESREC,U,3),LNNAME=$P(RESREC,U,5)
|
---|
| 107 | . . S LNCODE=$P(RESREC,U,4),RESULT=$P(RESREC,U,1)
|
---|
| 108 | . . S UNITS=$P(RESREC1,U,1),RANGE=$P(RESREC1,U,2)
|
---|
| 109 | . . ; Most of the time High and Low range are separated by a "-"
|
---|
| 110 | . . I RANGE["-" D
|
---|
| 111 | . . . S LRANGE=$P(RANGE,"-",1),HRANGE=$P(RANGE,"-",2)
|
---|
| 112 | . . I RANGE'["-" D
|
---|
| 113 | . . . S LRANGE=RANGE,HRANGE=""
|
---|
| 114 | . . S LABA="|^"_LOCALLAB_"|"_NLTCODE_"^"_NLTNAME_"|"_LNCODE_"^"_LNNAME_"|"
|
---|
| 115 | . . ;
|
---|
| 116 | . . S LABB=RESULT_"|"_UNITS_"|"
|
---|
| 117 | . . ;
|
---|
| 118 | . . S LABC=LRANGE_"|"_HRANGE_"|"
|
---|
| 119 | . . W STR_LABA_LABB_LABC,!
|
---|
| 120 | Q
|
---|
| 121 | ;
|
---|
| 122 | ERROR(CODE,FAC,MESSAGE) ; Error processing
|
---|
| 123 | N ARR,STR
|
---|
| 124 | I CODE=1 S STR=DT_": Cannot open output file "_MESSAGE
|
---|
| 125 | I CODE=2 S STR=DT_": File name already exists in the output directory "_MESSAGE
|
---|
| 126 | I CODE=3 D
|
---|
| 127 | . S MESSAGE=$E(MESSAGE,4,5)_"/"_$E(MESSAGE,6,7)_"/"_$E(MESSAGE,2,3)
|
---|
| 128 | . S STR=DT_": Trying to process records for Facility #"_FAC_" for the date of "_MESSAGE_" that have already been processed."
|
---|
| 129 | S FDA(99999,"+1,",.01)=FAC
|
---|
| 130 | S FDA(99999,"+1,",2)=STR
|
---|
| 131 | D UPDATE^DIE("","FDA",)
|
---|
| 132 | Q
|
---|
| 133 | ;
|
---|
| 134 | ;
|
---|
| 135 | CULL ; Cull all entries for a facility that have been processed on or before the date in FD x-ref
|
---|
| 136 | N A,B,DFN,DELLIEN,FAC,IDATE,IEN,PDATE
|
---|
| 137 | S FAC="0"
|
---|
| 138 | F S FAC=$O(^DIZ(99999,"FD",FAC)) Q:'FAC D
|
---|
| 139 | . S PDATE=0
|
---|
| 140 | . F S PDATE=$O(^DIZ(99999,"FD",FAC,PDATE)) Q:'PDATE D
|
---|
| 141 | . . S IDATE=0
|
---|
| 142 | . . ; Remove entry with FD x-ref
|
---|
| 143 | . . S DELLIEN=0
|
---|
| 144 | . . S DELLIEN=$O(^DIZ(99999,"FD",FAC,PDATE,DELLIEN))
|
---|
| 145 | . . K B
|
---|
| 146 | . . S B(99999,DELLIEN_",",.01)="@" D FILE^DIE(,"B")
|
---|
| 147 | . . ;
|
---|
| 148 | . . F S IDATE=$O(^DIZ(99999,"FDP",FAC,IDATE)) Q:'IDATE!($P(IDATE,".",1)>PDATE) D
|
---|
| 149 | . . . S DFN=0
|
---|
| 150 | . . . F S DFN=$O(^DIZ(99999,"FDP",FAC,IDATE,DFN)) Q:'DFN D
|
---|
| 151 | . . . . S IEN=0
|
---|
| 152 | . . . . F S IEN=$O(^DIZ(99999,"FDP",FAC,IDATE,DFN,IEN)) Q:'IEN D
|
---|
| 153 | . . . . . K A
|
---|
| 154 | . . . . . S A(99999,IEN_",",.01)="@" D FILE^DIE(,"A")
|
---|
| 155 | Q
|
---|
| 156 | ;
|
---|
| 157 | ;
|
---|
| 158 | ERORDSP ; Display errors
|
---|
| 159 | ;
|
---|
| 160 | N DATE,DONE,EDATE,FAC,IEN,PG
|
---|
| 161 | S PG=0,DATE=$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3)
|
---|
| 162 | D HEAD
|
---|
| 163 | I '$D(^DIZ(99999,"FDE")) W "No Error's to report." H 4 Q
|
---|
| 164 | ;
|
---|
| 165 | ;
|
---|
| 166 | S FAC="0"
|
---|
| 167 | F S FAC=$O(^DIZ(99999,"FDE",FAC)) Q:'FAC D
|
---|
| 168 | . ;
|
---|
| 169 | . S EDATE=0
|
---|
| 170 | . F S EDATE=$O(^DIZ(99999,"FDE",FAC,EDATE)) Q:'EDATE D
|
---|
| 171 | . . S IEN=0
|
---|
| 172 | . . F S IEN=$O(^DIZ(99999,"FDE",FAC,EDATE,IEN)) Q:'IEN D
|
---|
| 173 | . . . S MSG=^DIZ(99999,IEN,2)
|
---|
| 174 | . . . I ($Y+4>IOSL) D PRTC Q:$D(DONE) D HEAD
|
---|
| 175 | . . . W !," "_MSG,!
|
---|
| 176 | Q
|
---|
| 177 | ;
|
---|
| 178 | HEAD ;
|
---|
| 179 | W:$Y>0 @IOF S PG=PG+1
|
---|
| 180 | W " "_DATE,?71,"Page ",PG,!!
|
---|
| 181 | W " Error log for PBM III national database processing.",!
|
---|
| 182 | W " ---------------------------------------------------",!
|
---|
| 183 | Q
|
---|
| 184 | ;
|
---|
| 185 | PRTC ;press return to continue prompt
|
---|
| 186 | Q:$E(IOST,1,2)'="C-"!($D(IO("S")))
|
---|
| 187 | K DIR W ! S DIR(0)="E" D ^DIR K DIR I 'Y S DONE=1
|
---|
| 188 | Q
|
---|
| 189 | ;
|
---|
| 190 | ;
|
---|