| 1 | RORUPP02 ;HCIOFO/SG - PATIENT EVENTS (EVENTS)  ; 1/20/06 1:55pm
 | 
|---|
| 2 |  ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;***** ADDS THE EVENT REFERENCE
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  ; PATIEN        Patient IEN
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; AREA          Data area of the event (see the DATA AREA field
 | 
|---|
| 11 |  ;               of the file #798.3 for details)
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; [DATE]        Date/Time associated with the event (the current
 | 
|---|
| 14 |  ;               date/time is used by default).
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ; Return Values:
 | 
|---|
| 17 |  ;       <0  Error code
 | 
|---|
| 18 |  ;        0  Ok
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | ADD(PATIEN,AREA,DATE) ;
 | 
|---|
| 21 |  N IEN,IENS,RORFDA,RORIEN,RORMSG
 | 
|---|
| 22 |  S:$G(DATE)'>0 DATE=$$NOW^XLFDT
 | 
|---|
| 23 |  ;--- Do not record more than one reference per associated date.
 | 
|---|
| 24 |  ;    Maybe in the future all references will be recorded but we
 | 
|---|
| 25 |  ;    need only daily precision at the moment. If the reference
 | 
|---|
| 26 |  ;    exists already, update it with the earlier associated date
 | 
|---|
| 27 |  ;--- and the latter timestamp if necessary.
 | 
|---|
| 28 |  S IEN=$O(^RORDATA(798.3,+PATIEN,2,"AD",AREA,DATE\1,""))
 | 
|---|
| 29 |  I IEN  K DIERR  D  Q $S('$G(DIERR):0,1:-9)
 | 
|---|
| 30 |  . N BUF,NOW
 | 
|---|
| 31 |  . S IENS=IEN_","_(+PATIEN)_",",NOW=$$NOW^XLFDT
 | 
|---|
| 32 |  . S BUF=$G(^RORDATA(798.3,+PATIEN,2,IEN,0))
 | 
|---|
| 33 |  . S:NOW>$P(BUF,"^") RORFDA(798.32,IENS,.01)=NOW
 | 
|---|
| 34 |  . S:DATE<$P(BUF,"^",3) RORFDA(798.32,IENS,2)=DATE
 | 
|---|
| 35 |  . D:$D(RORFDA)>1 FILE^DIE(,"RORFDA","RORMSG")
 | 
|---|
| 36 |  ;--- Create the new event reference
 | 
|---|
| 37 |  S (RORFDA(798.3,"?+1,",.01),RORIEN(1))=+PATIEN
 | 
|---|
| 38 |  S IENS="+2,?+1,"
 | 
|---|
| 39 |  S RORFDA(798.32,IENS,.01)=$$NOW^XLFDT
 | 
|---|
| 40 |  S RORFDA(798.32,IENS,1)=AREA
 | 
|---|
| 41 |  S RORFDA(798.32,IENS,2)=DATE
 | 
|---|
| 42 |  D UPDATE^DIE(,"RORFDA","RORIEN","RORMSG")
 | 
|---|
| 43 |  Q $S('$G(DIERR):0,1:-9)
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;***** CHECKS THE EVENTS
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; PATIEN        Patient IEN
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ; AREA          Data area of the event (see the DATA AREA field
 | 
|---|
| 50 |  ;               of the file #798.3 for details)
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  ; .SDT          Reference to a local variable containing the start
 | 
|---|
| 53 |  ;               date. The date can be modified by the function and
 | 
|---|
| 54 |  ;               returned via this parameter.
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; .EDT          Reference to a local variable containing the end
 | 
|---|
| 57 |  ;               date. The date can be modified by the function and
 | 
|---|
| 58 |  ;               returned via this parameter.
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  ; Return Values:
 | 
|---|
| 61 |  ;       <0  Error code
 | 
|---|
| 62 |  ;        0  No events (skip)
 | 
|---|
| 63 |  ;        1  Events have been found (proceed)
 | 
|---|
| 64 |  ;        2  The same as 1 + dates (SDT & EDT) have been modified
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | GET(PATIEN,AREA,SDT,EDT) ;
 | 
|---|
| 67 |  N ED,FDTC,FEVT,IEN,NEWEDT,NEWSDT,ROOT,TMP
 | 
|---|
| 68 |  S ROOT=$NA(^RORDATA(798.3,+PATIEN,2))
 | 
|---|
| 69 |  S NEWSDT=999999999,NEWEDT=0,(FDTC,FEVT)=0
 | 
|---|
| 70 |  ;--- If the data search time frame is too wide and some of the
 | 
|---|
| 71 |  ;    event references have been purged already then the time
 | 
|---|
| 72 |  ;    frame cannot be shrinked according to the references and the
 | 
|---|
| 73 |  ;--- patient cannot be skipped if there are no references at all.
 | 
|---|
| 74 |  S:SDT<$G(RORUPD("EETS")) NEWSDT=SDT,NEWEDT=EDT,FEVT=1
 | 
|---|
| 75 |  ;--- Browse through the event references
 | 
|---|
| 76 |  S ED=$O(@ROOT@("AT",AREA,SDT),-1)
 | 
|---|
| 77 |  F  S ED=$O(@ROOT@("AT",AREA,ED))  Q:(ED="")!(ED'<EDT)  D
 | 
|---|
| 78 |  . S IEN=""
 | 
|---|
| 79 |  . F  S IEN=$O(@ROOT@("AT",AREA,ED,IEN))  Q:IEN=""  D
 | 
|---|
| 80 |  . . S TMP=$P($G(@ROOT@(IEN,0)),"^",3),FEVT=1
 | 
|---|
| 81 |  . . Q:TMP'>0
 | 
|---|
| 82 |  . . S:TMP<NEWSDT NEWSDT=TMP,FDTC=1
 | 
|---|
| 83 |  . . S:TMP>NEWEDT NEWEDT=TMP,FDTC=1
 | 
|---|
| 84 |  Q:'FEVT 0
 | 
|---|
| 85 |  I FDTC  S SDT=NEWSDT,EDT=NEWEDT  Q 2
 | 
|---|
| 86 |  Q 1
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ;***** PURGES THE OLD EVENT REFERENCES
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ; DATE          Keep the references starting from this date
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  ; Return Values:
 | 
|---|
| 93 |  ;       <0  Error code
 | 
|---|
| 94 |  ;        0  Ok
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | PURGE(DATE) ;
 | 
|---|
| 97 |  N CNT,DA,DIK,IEN,IEN1,IENS,RC,REINDEX,ROOT,RORFDA,RORMSG
 | 
|---|
| 98 |  S ROOT=$$ROOT^DILFD(798.3,,1)
 | 
|---|
| 99 |  S DATE=DATE\1,(CNT,RC)=0
 | 
|---|
| 100 |  F  S DATE=$O(@ROOT@("AT",DATE),-1)  Q:DATE=""  D  Q:RC<0
 | 
|---|
| 101 |  . S IEN=""
 | 
|---|
| 102 |  . F  S IEN=$O(@ROOT@("AT",DATE,IEN))  Q:IEN=""  D  Q:RC<0
 | 
|---|
| 103 |  . . S IEN1="",REINDEX=0
 | 
|---|
| 104 |  . . F  S IEN1=$O(@ROOT@("AT",DATE,IEN,IEN1))  Q:IEN1=""  D  Q:RC<0
 | 
|---|
| 105 |  . . . ;---Check if the corresponding record exists
 | 
|---|
| 106 |  . . . I '$D(@ROOT@(IEN,2,IEN1,0))  D  Q
 | 
|---|
| 107 |  . . . . ;--- Delete the "stray" entry from the cross-reference
 | 
|---|
| 108 |  . . . . K @ROOT@("AT",DATE,IEN,IEN1)
 | 
|---|
| 109 |  . . . ;--- Delete the record
 | 
|---|
| 110 |  . . . S IENS=IEN1_","_IEN_","
 | 
|---|
| 111 |  . . . S RORFDA(798.32,IENS,.01)="@"
 | 
|---|
| 112 |  . . . D FILE^DIE(,"RORFDA","RORMSG")
 | 
|---|
| 113 |  . . . I $G(DIERR)  D  Q
 | 
|---|
| 114 |  . . . . S RC=$$DBS^RORERR("RORMSG",-9,,,798.32,IENS)
 | 
|---|
| 115 |  . . . S CNT=CNT+1
 | 
|---|
| 116 |  . . ;--- Re-index the main record if necessary
 | 
|---|
| 117 |  . . I REINDEX  K DA  S DIK=$$OREF^DILF(ROOT),DA=IEN  D IX^DIK
 | 
|---|
| 118 |  D:CNT>0 LOG^RORLOG(2,CNT_" events were purged from the file #798.3")
 | 
|---|
| 119 |  Q $S(RC<0:RC,1:0)
 | 
|---|