| 1 | IMRODATA ; HCIOFO-FAI/SPS - SPECIAL DATA EXTRACT; 03/29/02 13:35 ; | 
|---|
| 2 | ;;2.1;IMMUNOLOGY CASE REGISTRY;**15**;Feb 09, 1998 | 
|---|
| 3 | ENTRY ; Entry to run daily extract to gather past missing data. | 
|---|
| 4 | I $$PATCH^XPDUTL("IMR*2.1*15")=1 W !,?23,"***PATCH 15 EXTRACT HAS ALREADY BEEN RUN***" D KIL Q | 
|---|
| 5 | W !!,"This is a one-time run job to populate the National Database ",!,"with data starting from 1/1/84." | 
|---|
| 6 | S ZTDTH=XPDQUES("POS1") | 
|---|
| 7 | D ASK | 
|---|
| 8 | Q | 
|---|
| 9 | EN1 ; Entry point from post-init. The following variables must be defined; | 
|---|
| 10 | ; IMRED,IMRC,IMRSET,IMRDT | 
|---|
| 11 | Q:'$D(^IMR(158.9,1,0))  ;quit if no site parameters | 
|---|
| 12 | N IMRTRANS S U="^",IMRC=0,IMRSET=0 ;IMRC=message line counter, IMRSET=message counter | 
|---|
| 13 | S (IMRED,IMRDT,IMRDTT)=$$NOW^XLFDT()  ;IMRED & IMRDT=set data extract end date/time | 
|---|
| 14 | S IMRTRANS=1,IMRSD="2840101" ; Tell the system that this is a transmit to national | 
|---|
| 15 | D DOMAIN^IMRUTL ;get the domain name for ICR | 
|---|
| 16 | S IMRDOMN="S.IMRHDATA@"_IMRDOMN ;append domain to server name | 
|---|
| 17 | K ^TMP($J) | 
|---|
| 18 | I '$D(IMRSTN) D IMROPN^IMRXOR Q:'$D(IMRSTN) | 
|---|
| 19 | S X=10987654321 D XOR^IMRXOR S IMRCODE=X ;encrypt patient SSN | 
|---|
| 20 | ;increment message line # & message sequence number below | 
|---|
| 21 | ; set segment=START^station number^date of data collection^message sequence number^encryption code^IMR version number | 
|---|
| 22 | S IMRC=IMRC+1,IMRSET=IMRSET+1 | 
|---|
| 23 | S ^TMP($J,"IMRX",IMRC)="START"_"^"_IMRSTN_"^"_IMRDT_"^"_IMRSET_"^"_IMRCODE_"^"_$$VERSION^XPDUTL("IMR")_"^15" D SEGS,LCHK | 
|---|
| 24 | ; NEXT CASE node: piece #1=NEXT CASE, piece #2=LAST NEW CASE | 
|---|
| 25 | S:'$D(^IMR(158.9,1,"NXT")) ^("NXT")=0 S IMRNXT2=+$P(^("NXT"),"^",2),IMRNXT1=+^("NXT") | 
|---|
| 26 | ; Process new entries first, then process existing entries | 
|---|
| 27 | S IMRFN=0 | 
|---|
| 28 | F  S IMRFN=$O(^IMR(158,IMRFN)) Q:IMRFN'>0  S IMRSEND=0 D NXT | 
|---|
| 29 | D SEND^IMRODAT1 | 
|---|
| 30 | D LCHK | 
|---|
| 31 | KIL K IMRDENT,IMRRAD,IMRRX,IMRLAB,IMRMI,IMRSCH,IMRCODE,IMRT1,IMRT2,DFN,IMRDFN,IMRFN,IMRED,IMRDT,IMR101,IMRNXT1,IMRNXT2,IMROP,IMRSET,IMRSTN,X,X1,X2,IMRC,IMRSSN,%DT,Y,%H,%,IMRTRANS | 
|---|
| 32 | K ^TMP($J),%T,DIC,IMRN,IMRSCH1,J,XCNP,XMZ,VAERR,D,DISYS,POP,IMRPAD,IMRADM,IMRDIS,IMRDOMN,IMRSEND,IMR5,IMRDTT,IMRL,IMRT,IMRTEST,IMRTRAN,IMRTSTI,IMRSD,IMRAD,IMRM90 | 
|---|
| 33 | D POST^IMRPT15 | 
|---|
| 34 | Q | 
|---|
| 35 | HEADER ; set segment=START^station number^date of data collection^message sequence number^encryption code^IMR version number | 
|---|
| 36 | S IMRC=IMRC+1,IMRSET=IMRSET+1,^TMP($J,"IMRX",IMRC)="START"_"^"_IMRSTN_"^"_IMRDT_"^"_IMRSET_"^"_IMRCODE_"^"_$$VERSION^XPDUTL("IMR")_"^15" D SEGS,LCHK | 
|---|
| 37 | Q | 
|---|
| 38 | NXT D CLEAR | 
|---|
| 39 | ; Node 101 contains last dates noted for various services provided | 
|---|
| 40 | ; Node 5 is the date of death node | 
|---|
| 41 | S IMR101=$G(^IMR(158,IMRFN,101)),IMRI=+IMR101,IMR5=$G(^IMR(158,IMRFN,5)),IMRTRAN=$P(IMR5,"^",21) | 
|---|
| 42 | S IMRT1=$P($H,",",2) ;IMRT1 is used to calculate the number of seconds needed to extract data for patient | 
|---|
| 43 | S X=+^IMR(158,IMRFN,0) | 
|---|
| 44 | D XOR^IMRXOR Q:'$D(^DPT(X,0))  ;decode patient id, quit if not in File 2 | 
|---|
| 45 | S (DFN,IMRDFN)=X,IMRT2="" ;IMRT2 identify's record as new or update | 
|---|
| 46 | I $P(IMR101,"^",2)="" S IMRT2="NEW" D DEMOG ;piece #2=LAST SCHEDULING DATE NOTED | 
|---|
| 47 | I IMRT2="" S IMRT2="UPD" D DEMOG | 
|---|
| 48 | I IMR101'="" S IMRT1=$P($H,",",2)-IMRT1 S:IMRT1<0 IMRT1=IMRT1+(24*60*60) S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)="TIME"_"^"_IMRT2_"^"_IMRT1 D LCHK | 
|---|
| 49 | LCHK I (IMRC#5000)=0 D SEND^IMRODAT1 Q | 
|---|
| 50 | Q | 
|---|
| 51 | DEMOG Q:'$D(^DPT(DFN,0)) | 
|---|
| 52 | D DEM^VADPT,ELIG^VADPT,SVC^VADPT,ADD^VADPT | 
|---|
| 53 | Q:$G(VADM(2))=""  S X=$P(VADM(2),"^") D XOR^IMRXOR S IMRSSN=X ;encrypt patient SSN | 
|---|
| 54 | S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)="PA"_"^"_IMRSSN D LCHK | 
|---|
| 55 | Q:$G(VADM(3))=""  S X=$E($P(VADM(3),"^"),1,5)_"00" D XOR^IMRXOR S IMRDOB=X ;encrypt patient's date of birth | 
|---|
| 56 | Q:$G(VADM(5))=""  S IMRSEX=$P(VADM(5),"^"),IMRZIP=$G(VAPA(6)),IMRPOS=$P($G(VAEL(2)),"^",2) ;sex, zip code, and IMRPOS=period of service (external value) | 
|---|
| 57 | S IMRELIG=$P($G(VAEL(1)),"^",2),IMRSEPD=$P($G(VASV(6,5)),"^") ;current primary eligibility & service separation date | 
|---|
| 58 | S IMRDOD=$P($G(VADM(6)),"^") | 
|---|
| 59 | I +IMRDOD>0 D | 
|---|
| 60 | . S $P(^IMR(158,IMRFN,5),"^",19,20)=IMRDOD_"^"_1,$P(^IMR(158,IMRFN,1),U,34)=2 ;save MAS DOD as IMR Date of Death, flag DOD as from MAS | 
|---|
| 61 | . I IMRDOD S $P(^IMR(158,IMRFN,5),"^",21)=1 ;is this data for deceased patient? | 
|---|
| 62 | I IMRDOD'>0 D | 
|---|
| 63 | . S:$P(^IMR(158,IMRFN,1),U,34)=2 $P(^(1),U,34)=1 | 
|---|
| 64 | . S $P(^IMR(158,IMRFN,5),U,19,20)=""_U_"" | 
|---|
| 65 | ; segment=DEmographic^date of birth (encrypted)^sex^zip code^period of service^eligibility code^service separation date^^date of death | 
|---|
| 66 | S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)="DE"_"^"_IMRDOB_"^"_IMRSEX_"^"_IMRZIP_"^"_IMRPOS_"^"_IMRELIG_"^"_IMRSEPD_"^"_"^"_IMRDOD D LCHK | 
|---|
| 67 | K IMRDOB,IMRSEX,IMRZIP,IMRPOS,IMRELIG,IMRSEPD,IMRDOD,VA,VADM,VAEL,VAPA,VASV S IMRFLG=0 | 
|---|
| 68 | D GETDAT^IMRODAT1 | 
|---|
| 69 | Q | 
|---|
| 70 | CLEAR ; Kill Variables | 
|---|
| 71 | K IMRT1,IMRT2,DFN,IMRLD,IMRLD1,IMRLD2 | 
|---|
| 72 | Q | 
|---|
| 73 | ASK ; Entry Point to Process Data Extract For A Given Date Range | 
|---|
| 74 | S IMRSD="2840101",(IMRDT,IMRED)=DT,IMRC=0,IMRSET=0 | 
|---|
| 75 | DQ ; Queue Data Extract | 
|---|
| 76 | D NOW^%DTC | 
|---|
| 77 | I $G(ZTDTH)="" S ZTDTH=%H | 
|---|
| 78 | S ZTRTN="EN1^IMRODATA" | 
|---|
| 79 | S ZTSAVE("*")="",ZTIO="",ZTDESC="Patch 15 One-Time IMR Data Extract" | 
|---|
| 80 | D ^%ZTLOAD | 
|---|
| 81 | K ZTDESC,ZTDTH,ZTRTN,ZTSAVE,ZTIO,ZTSK | 
|---|
| 82 | Q | 
|---|
| 83 | SEGS ; | 
|---|
| 84 | Q:$G(DFN)="" | 
|---|
| 85 | Q:'$D(^DPT(DFN,0)) | 
|---|
| 86 | Q:'$D(^IMR(158,IMRFN,0)) | 
|---|
| 87 | D DEM^VADPT,ELIG^VADPT,SVC^VADPT,ADD^VADPT | 
|---|
| 88 | S X=$P(VADM(2),"^") D XOR^IMRXOR S IMRSSN=X ;encrypt patient SSN | 
|---|
| 89 | S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)="PA"_"^"_IMRSSN | 
|---|
| 90 | S X=$E($P(VADM(3),"^"),1,5)_"00" D XOR^IMRXOR S IMRDOB=X ;encrypt patient's date of birth | 
|---|
| 91 | S IMRSEX=$P(VADM(5),"^"),IMRZIP=VAPA(6),IMRPOS=$P(VAEL(2),"^",2) ;sex, zip code, and IMRPOS=period of service (external value) | 
|---|
| 92 | S IMRELIG=$P(VAEL(1),"^",2),IMRSEPD=$P(VASV(6,5),"^") ;current primary eligibility & service separation date | 
|---|
| 93 | S IMRDOD=$P(VADM(6),"^") | 
|---|
| 94 | I +IMRDOD>0 D | 
|---|
| 95 | . S $P(^IMR(158,IMRFN,5),"^",19,20)=IMRDOD_"^"_1,$P(^IMR(158,IMRFN,1),U,34)=2 ;save MAS DOD as IMR Date of Death, flag DOD as from MAS | 
|---|
| 96 | . I IMRDOD S $P(^IMR(158,IMRFN,5),"^",21)=1 ;is this data for deceased patient? | 
|---|
| 97 | I IMRDOD'>0 D | 
|---|
| 98 | . Q:'$D(^IMR(158,IMRFN,0)) | 
|---|
| 99 | . S:$P(^IMR(158,IMRFN,1),U,34)=2 $P(^(1),U,34)=1 | 
|---|
| 100 | . S $P(^IMR(158,IMRFN,5),U,19,20)=""_U_"" | 
|---|
| 101 | ; segment=DEmographic^date of birth (encrypted)^sex^zip code^period of service^eligibility code^service separation date^^date of death | 
|---|
| 102 | S IMRC=IMRC+1,^TMP($J,"IMRX",IMRC)="DE"_"^"_IMRDOB_"^"_IMRSEX_"^"_IMRZIP_"^"_IMRPOS_"^"_IMRELIG_"^"_IMRSEPD_"^"_"^"_IMRDOD | 
|---|
| 103 | S IMRFLG=0 | 
|---|
| 104 | Q | 
|---|