| 1 | QACI3 ; OAKOIFO/TKW - DATA MIGRATION - VISTALINK RPC CODE ;7/27/05  16:18 | 
|---|
| 2 | ;;2.0;Patient Representative;**19**;07/25/1995;Build 55 | 
|---|
| 3 | EN(PATSBY,PATSNO,PATSLIST,PATSFLAG,PATSFRST) ; | 
|---|
| 4 | ; Read list of migrated reference table entries in PATSLIST, put into | 
|---|
| 5 | ;   ^XTMP. Then return the next PATSNO entries into global PATSBY, | 
|---|
| 6 | ;   from the table referrenced by PATSFLAG. | 
|---|
| 7 | ; PATSBY = the name of the output global | 
|---|
| 8 | ; PATSNO = the number of records to return | 
|---|
| 9 | ; PATSLIST = If defined, contains a list of ^ delimited strings | 
|---|
| 10 | ;     0 node set to a flag indicating which file these came from. | 
|---|
| 11 | ;     The other entries contain two pieces: | 
|---|
| 12 | ;     1)ien or primary key of the entry on the M VistA side | 
|---|
| 13 | ;     2)primary key of the entry in the Oracle table (usually id). | 
|---|
| 14 | ; PATSFLAG="H" (hospital location), "U" (user), "P" (patient), | 
|---|
| 15 | ;  "C" (congressional contact), "E" (employee involved), | 
|---|
| 16 | ;  "F" (facility service or section) | 
|---|
| 17 | ; PATSFRST = 1 on the first call to this routine, 0 on subsequent calls. | 
|---|
| 18 | ; | 
|---|
| 19 | ; Process incoming list | 
|---|
| 20 | N FLAG,TYPE,UNAME,DONENAME | 
|---|
| 21 | S PATSNO=+$G(PATSNO),PATSFRST=+$G(PATSFRST) | 
|---|
| 22 | ; For the incoming list, find the file type on the first array entry. | 
|---|
| 23 | S FLAG=$P($G(PATSLIST(0)),"^"),TYPE="" | 
|---|
| 24 | I FLAG]"" S TYPE=$S(FLAG="H":"HL",FLAG="U":"USER",FLAG="P":"PT",FLAG="C":"CC",FLAG="E":"EMPINV",FLAG="F":"FSOS",1:"") | 
|---|
| 25 | ; Move list of migrated entries to ^XTMP("QACMIGR",file_type,"D"). | 
|---|
| 26 | ;  at the same time, delete them from the list of entries still to be | 
|---|
| 27 | ;  migrated, ^XTMP("QACMIGR",file_type,"U"). | 
|---|
| 28 | I TYPE]"" D | 
|---|
| 29 | . S UNAME=$NA(^XTMP("QACMIGR",TYPE,"U")) | 
|---|
| 30 | . S DONENAME=$NA(^XTMP("QACMIGR",TYPE,"D")) | 
|---|
| 31 | . D LISTIN Q | 
|---|
| 32 | ; Now get the next set of entries to be migrated, for the table | 
|---|
| 33 | ;  referenced by the PATSFLAG input parameter. | 
|---|
| 34 | S FLAG=$G(PATSFLAG) | 
|---|
| 35 | S TYPE=$S(FLAG="H":"HL",FLAG="U":"USER",FLAG="P":"PT",FLAG="C":"CC",FLAG="E":"EMPINV",FLAG="F":"FSOS",1:"") | 
|---|
| 36 | Q:TYPE="" | 
|---|
| 37 | S UNAME=$NA(^XTMP("QACMIGR",TYPE,"U")) | 
|---|
| 38 | S PATSBY=$NA(^TMP(TYPE,$J)) | 
|---|
| 39 | ; Build the next list of entries to be migrated. | 
|---|
| 40 | D LISTOUT | 
|---|
| 41 | Q | 
|---|
| 42 | ; | 
|---|
| 43 | LISTIN ; Move Ids of migrated data entries into ^XTMP | 
|---|
| 44 | N I,X,CNT S CNT=0 | 
|---|
| 45 | F I=0:0 S I=$O(PATSLIST(I)) Q:'I  S X=PATSLIST(I) D | 
|---|
| 46 | . S Y=$P(X,"^"),X=$P(X,"^",2) | 
|---|
| 47 | . ; If entry not added to Oracle table, quit | 
|---|
| 48 | . Q:X="" | 
|---|
| 49 | . ; Else, kill 'unmigrated' entry, set 'migrated' entry | 
|---|
| 50 | . K @UNAME@(Y) | 
|---|
| 51 | . S @DONENAME@(Y)=X | 
|---|
| 52 | . S CNT=CNT+1 Q | 
|---|
| 53 | ; If no data left in table of entries to be migrated, kill it. | 
|---|
| 54 | I '$O(@UNAME@(0)) K @UNAME | 
|---|
| 55 | I CNT>0 D | 
|---|
| 56 | . ; Increment count of migrated entries | 
|---|
| 57 | . S @DONENAME=$G(@DONENAME)+CNT | 
|---|
| 58 | . Q:'$O(@UNAME@(0)) | 
|---|
| 59 | . ; Decrement count of entries to be migrated. | 
|---|
| 60 | . S @UNAME=$G(@UNAME)-CNT | 
|---|
| 61 | . Q | 
|---|
| 62 | Q | 
|---|
| 63 | ; | 
|---|
| 64 | LISTOUT ; Build next set of data to be migrated into ^TMP global | 
|---|
| 65 | K @PATSBY | 
|---|
| 66 | N CNT,I,X,XOUT | 
|---|
| 67 | ; On the first time calling this routine, check. | 
|---|
| 68 | S XOUT=0 I PATSFRST=1 D  Q:XOUT | 
|---|
| 69 | . ; If no data in staging area, return 0 in 0th node | 
|---|
| 70 | . S CNT=0 F I="ROC","HL","USER","PT","CC","EMPINV","FSOS" D | 
|---|
| 71 | .. S CNT=CNT+$G(^XTMP("QACMIGR",I,"U")) Q | 
|---|
| 72 | . I CNT=0 S @PATSBY@(0)=0,XOUT=1 | 
|---|
| 73 | . Q | 
|---|
| 74 | ; If no data to migrate in the current table, return nothing | 
|---|
| 75 | ;  in the output array. | 
|---|
| 76 | Q:'$O(@UNAME@(0)) | 
|---|
| 77 | S CNT=0 | 
|---|
| 78 | ; For Facility Service or Section, set VISN name into first entry of output array. | 
|---|
| 79 | ; For Users or Employees Involved, put station number for server into first entry of output array. | 
|---|
| 80 | I "F^U^E"[FLAG,$O(@UNAME@(0)) D | 
|---|
| 81 | . S CNT=1,PATSNO=PATSNO+1 | 
|---|
| 82 | . S @PATSBY@(1)=$G(^XTMP("QACMIGR",TYPE,"U",0)) | 
|---|
| 83 | . Q | 
|---|
| 84 | ; Move data to be migrated into output global. | 
|---|
| 85 | F I=0:0 S I=$O(@UNAME@(I)) Q:'I  Q:PATSNO&(CNT=PATSNO)  S X=^(I) D | 
|---|
| 86 | . S CNT=CNT+1 | 
|---|
| 87 | . S @PATSBY@(CNT)=X | 
|---|
| 88 | . Q:FLAG'="P" | 
|---|
| 89 | . ; Load continuation patient data | 
|---|
| 90 | . S CNT=CNT+1 | 
|---|
| 91 | . S @PATSBY@(CNT)=@UNAME@(I,"cont") | 
|---|
| 92 | . Q | 
|---|
| 93 | Q | 
|---|
| 94 | ; | 
|---|
| 95 | ; | 
|---|