| 1 | QACI2C ; OAKOIFO/TKW - DATA MIGRATION - BUILD LEGACY DATA TO BE MIGRATED (CONT.) ;5/1/06  12:09 | 
|---|
| 2 | ;;2.0;Patient Representative;**19**;07/25/1995;Build 55 | 
|---|
| 3 | TXTERR(FLD,LEN,REMOVEUP,NOTNULL) ; Check field for length, check for control characters | 
|---|
| 4 | ; FLD=Field to be checked, LEN=optional max length | 
|---|
| 5 | ; REMOVEUP=optional flag set to 1 to remove up-arrows from the text. | 
|---|
| 6 | ; NOTNULL=optional flag set to 1 if field cannot be null. | 
|---|
| 7 | ; Return 1 if any errors are encountered. | 
|---|
| 8 | N L,I,X,Y,ERR S REMOVEUP=$G(REMOVEUP) | 
|---|
| 9 | S L=$L(FLD),ERR=0 | 
|---|
| 10 | I $G(LEN),L>LEN Q 1 | 
|---|
| 11 | F I=1:1:L S X=$E(FLD,I,I) Q:ERR!(X="")  D | 
|---|
| 12 | . I REMOVEUP,X="^" S FLD=$E(FLD,1,I-1)_$E(FLD,I+1,L),I=I-1 Q | 
|---|
| 13 | . S Y=$A(X) | 
|---|
| 14 | . I Y>31,Y<127 Q | 
|---|
| 15 | . S ERR=1 Q | 
|---|
| 16 | I $G(NOTNULL),FLD="" Q 1 | 
|---|
| 17 | Q ERR | 
|---|
| 18 | ; | 
|---|
| 19 | CONVROC(OLDROC) ; Convert roc number to new format | 
|---|
| 20 | I OLDROC'?3N.AN1"."6N Q "" | 
|---|
| 21 | N NEWROC,X | 
|---|
| 22 | ; Make sure the first part of the ROC number is a valid station number | 
|---|
| 23 | S X=$P(OLDROC,".") Q:X="" "" | 
|---|
| 24 | I '$$LKUP^XUAF4(X) Q "" | 
|---|
| 25 | ; Convert the fiscal year part of the ROC number to 4 digits | 
|---|
| 26 | S X=$E($P(OLDROC,".",2),1,2) | 
|---|
| 27 | S X=$S(+X>9:"19"_X,1:"20"_X) | 
|---|
| 28 | ; Build the new ROC number, adding one more digit to the sequential counter part of the ROC number. | 
|---|
| 29 | S NEWROC=$P(OLDROC,".")_"."_X_"0"_$E($P(OLDROC,".",2),3,6) | 
|---|
| 30 | Q NEWROC | 
|---|
| 31 | ; | 
|---|
| 32 | ENDELALL(PATSBY) ; Wipe out list of previously migrated reference table data | 
|---|
| 33 | F TYPE="ROC","HL","USER","PT","CC","EMPINV","FSOS" K ^XTMP("QACMIGR",TYPE,"D") | 
|---|
| 34 | S PATSBY=1 | 
|---|
| 35 | Q | 
|---|
| 36 | ; | 
|---|
| 37 | BLDTXT(ROCNO,ROCIEN,QACI0,ROCCNT,RESERR,EDITITXT,EDITRTXT) ; Build issue and resolution text into output global | 
|---|
| 38 | ; Issue Text | 
|---|
| 39 | N I,X,ITXTCNT,ITXTLN,ITXTLONG,OLDROC,RESERR1,RESERR2 | 
|---|
| 40 | I QACI0 N ROCCNT | 
|---|
| 41 | S ROCCNT=1,(ITXTCNT,ITXTLN,ITXTLONG)=0 | 
|---|
| 42 | S OLDROC=$P(^QA(745.1,ROCIEN,0),"^") | 
|---|
| 43 | F I=0:0 S I=$O(^QA(745.1,ROCIEN,4,I)) Q:'I!(ITXTLONG)  S X=$G(^(I,0)) D | 
|---|
| 44 | . I $E(X,$L(X))'=" " S X=X_" " | 
|---|
| 45 | . I $$TXTERR(.X,256,1) D ERROC^QACI2A(OLDROC,"Issue Text node "_I_" too long or contains invalid characters") Q | 
|---|
| 46 | . I (ITXTCNT+$L(X))>3950 D  Q | 
|---|
| 47 | .. S ITXTCNT=ITXTCNT+43,ITXTLONG=1 | 
|---|
| 48 | .. Q:QACI0 | 
|---|
| 49 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^ITXT^ ",^(ROCCNT+2)=ROCNO_"^ITXT^ " | 
|---|
| 50 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+3)=ROCNO_"^ITXT^  ****  Continued in Resolution Text  ****" | 
|---|
| 51 | .. S ROCCNT=ROCCNT+3 | 
|---|
| 52 | .. Q | 
|---|
| 53 | . S ITXTCNT=ITXTCNT+$L(X) | 
|---|
| 54 | . S ITXTLN=I | 
|---|
| 55 | . ; If called from ^QACI0, we just need to check the text, not save it. | 
|---|
| 56 | . Q:QACI0 | 
|---|
| 57 | . S ROCCNT=ROCCNT+1 | 
|---|
| 58 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT)=ROCNO_"^ITXT^"_X | 
|---|
| 59 | . Q | 
|---|
| 60 | ;If there was no issue text, set one line of text for migration. | 
|---|
| 61 | I ROCCNT=1,'QACI0 D | 
|---|
| 62 | . S ROCCNT=2,EDITITXT=1 | 
|---|
| 63 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",2)=ROCNO_"^ITXT^No data present in this field during migration from Patient Rep. Text required for closed ROCs in PATS." | 
|---|
| 64 | . Q | 
|---|
| 65 | ; | 
|---|
| 66 | ; Resolution Text | 
|---|
| 67 | S RESERR1="Resolution Text",RESERR2=" char.(8000 maximum)" | 
|---|
| 68 | S RESERR="0^"_RESERR1 | 
|---|
| 69 | N RTXTCNT S RTXTCNT=0 | 
|---|
| 70 | F I=0:0 S I=$O(^QA(745.1,ROCIEN,6,I)) Q:'I  S X=$G(^(I,0)) D | 
|---|
| 71 | . I $E(X,$L(X))'=" " S X=X_" " | 
|---|
| 72 | . S RTXTCNT=RTXTCNT+$L(X) | 
|---|
| 73 | . I $$TXTERR(.X,256,1) D ERROC^QACI2A(OLDROC,"Resolution Text Node "_I_" too long or contains invalid characters") Q | 
|---|
| 74 | . ; If resolution text is too long, quit, but keep track of total length. | 
|---|
| 75 | . Q:RTXTCNT>8000 | 
|---|
| 76 | . ; If called from ^QACI0, just check for errors, don't save text. | 
|---|
| 77 | . Q:QACI0 | 
|---|
| 78 | . S ROCCNT=ROCCNT+1 | 
|---|
| 79 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT)=ROCNO_"^RTXT^"_X | 
|---|
| 80 | . Q | 
|---|
| 81 | S RESERR=RTXTCNT_"^"_RESERR1 | 
|---|
| 82 | I RTXTCNT>8000 D ERROC^QACI2A(OLDROC,RESERR1_"="_RTXTCNT_RESERR2) | 
|---|
| 83 | ; | 
|---|
| 84 | ; If issue text was too long, store it in the resolution text for migration | 
|---|
| 85 | I ITXTLONG D | 
|---|
| 86 | . S RESERR1="Resolution + overflow issue text" | 
|---|
| 87 | . S RTXTCNT=RTXTCNT+76 | 
|---|
| 88 | . I 'QACI0,RTXTCNT'>8000 D | 
|---|
| 89 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ ",^(ROCCNT+2)=ROCNO_"^RTXT^ " | 
|---|
| 90 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+3)=ROCNO_"^RTXT^  ****  (continued) Issue Text transferred during Data Migration  ****" | 
|---|
| 91 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+4)=ROCNO_"^RTXT^ " | 
|---|
| 92 | .. S ROCCNT=ROCCNT+4,EDITRTXT=1 | 
|---|
| 93 | .. Q | 
|---|
| 94 | . ; Read through remaining issue text and append it to resolution text. | 
|---|
| 95 | . F I=ITXTLN:0 S I=$O(^QA(745.1,ROCIEN,4,I)) Q:'I  S X=$G(^(I,0)) D | 
|---|
| 96 | .. I $E(X,$L(X))'=" " S X=X_" " | 
|---|
| 97 | .. S RTXTCNT=RTXTCNT+$L(X) | 
|---|
| 98 | .. I $$TXTERR(.X,256,1) D ERROC^QACI2A(OLDROC,"Issue Text Node "_I_" too long or contains invalid characters") Q | 
|---|
| 99 | .. I QACI0!(RTXTCNT>8000) Q | 
|---|
| 100 | .. S ROCCNT=ROCCNT+1 | 
|---|
| 101 | .. S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT)=ROCNO_"^RTXT^"_X | 
|---|
| 102 | .. Q | 
|---|
| 103 | . S RTXTCNT=RTXTCNT+42 | 
|---|
| 104 | . S RESERR=RTXTCNT_"^"_RESERR1 | 
|---|
| 105 | . I RTXTCNT>8000 D ERROC^QACI2A(OLDROC,RESERR1_"="_RTXTCNT_RESERR2) Q | 
|---|
| 106 | . Q:QACI0 | 
|---|
| 107 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ ",^(ROCCNT+2)=ROCNO_"^RTXT^ " | 
|---|
| 108 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+3)=ROCNO_"^RTXT^  ****  End of overflow Issue Text  ****" | 
|---|
| 109 | . S ROCCNT=ROCCNT+3 | 
|---|
| 110 | . Q | 
|---|
| 111 | ; Store REFER CONTACT TO list in resolution text. | 
|---|
| 112 | Q:'$O(^QA(745.1,ROCIEN,11,0)) | 
|---|
| 113 | S RESERR1=RESERR1_" + Refer To" | 
|---|
| 114 | S RTXTCNT=RTXTCNT+24 | 
|---|
| 115 | I 'QACI0 D | 
|---|
| 116 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ ",^(ROCCNT+2)=ROCNO_"^RTXT^ " | 
|---|
| 117 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+3)=ROCNO_"^RTXT^** REFER CONTACT TO **" | 
|---|
| 118 | . S ROCCNT=ROCCNT+3 | 
|---|
| 119 | . Q | 
|---|
| 120 | F I=0:0 S I=$O(^QA(745.1,ROCIEN,11,I)) Q:'I  S X=+$G(^(I,0)) D | 
|---|
| 121 | . S X=$P($G(^VA(200,X,0)),"^") | 
|---|
| 122 | . S RTXTCNT=RTXTCNT+$L(X)+2 | 
|---|
| 123 | . Q:QACI0!(RTXTCNT>8000) | 
|---|
| 124 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+1)=ROCNO_"^RTXT^ " | 
|---|
| 125 | . S ^XTMP("QACMIGR","ROC","U",ROCNO_" ",ROCCNT+2)=ROCNO_"^RTXT^ "_X | 
|---|
| 126 | . S ROCCNT=ROCCNT+2 | 
|---|
| 127 | . Q | 
|---|
| 128 | S RESERR=RTXTCNT_"^"_RESERR1 | 
|---|
| 129 | I RTXTCNT>8000 D ERROC^QACI2A(OLDROC,RESERR1_"="_RTXTCNT_RESERR2) | 
|---|
| 130 | Q | 
|---|
| 131 | ; | 
|---|
| 132 | ERREF(TYPE,IEN,MSG) ; Record an error on Reference Table Data | 
|---|
| 133 | N ERRCNT S ERRCNT=$O(^XTMP("QACMIGR",TYPE,"E",IEN,"A"),-1)+1 | 
|---|
| 134 | S ^XTMP("QACMIGR",TYPE,"E",IEN,ERRCNT)=MSG Q | 
|---|
| 135 | ; | 
|---|
| 136 | ; | 
|---|
| 137 | ; | 
|---|