| 1 | RMPR110P ;VMP/RB - LOCATE/FIX/REPORT POINTER PROBLEMS 665.72 TO 660 ;05/02/06 | 
|---|
| 2 | ;;3.0;Prosthetics;**110**;06/20/05;Build 10 | 
|---|
| 3 | ;; | 
|---|
| 4 | ;1. Post install to locate/fix/report pointer error issues between | 
|---|
| 5 | ;   file 665.72 and 660 caused by inept fileman stuff during | 
|---|
| 6 | ;   O2 Post Billing. | 
|---|
| 7 | S (SITE,RECTOT,ERRTOT)=0 K ^TMP($J,"RMPR110P"),^TMP("RMPRFIX",$J) | 
|---|
| 8 | A1 S SITE=$O(^RMPO(665.72,SITE)),MON=0 G B10:SITE=""!(SITE]"@") | 
|---|
| 9 | A1A S MON=$O(^RMPO(665.72,SITE,1,MON)),VEND=0 G A1:MON="" | 
|---|
| 10 | A2 S VEND=$O(^RMPO(665.72,SITE,1,MON,1,VEND)),DFN=0 G A1A:VEND="" | 
|---|
| 11 | A3 K IT S IT=0 S DFN=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN)),ITEM=0 G:DFN=""!(DFN]"@") A2 | 
|---|
| 12 | A4 S ITEM=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN,1,ITEM)) G:ITEM=""!(ITEM]"@") A3 | 
|---|
| 13 | S RR=^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN,1,ITEM,0),R660=$P(RR,U,16) | 
|---|
| 14 | G A4:R660="" S R6=$G(^RMPR(660,R660,0)) I R6="" S ^TMP($J,"RMPR110P",6,SITE,MON,VEND,DFN,ITEM)=RR | 
|---|
| 15 | I DFN'=$P(R6,U,2) D | 
|---|
| 16 | . S ERRTOT=ERRTOT+1 | 
|---|
| 17 | . S ^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,ITEM,R660,0)=ITEM_U_IT_U_$P(R6,U,11) | 
|---|
| 18 | . S ^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,ITEM,R660,1)=^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN,1,ITEM,0) | 
|---|
| 19 | I IT=0,DFN=$P(R6,U,2) S IT=R660 | 
|---|
| 20 | G A4 | 
|---|
| 21 | B10 ;GRAB ALL ERROR 665.72 POINTER RELATIONS AND DETERMINE CORRECT POINTER | 
|---|
| 22 | S SITE=0,U="^",CHK=$P(^RMPR(660,0),U,3) | 
|---|
| 23 | B11 S SITE=$O(^TMP($J,"RMPR110P",1,SITE)),MON=0,VEND=0 G PRINT:SITE="" | 
|---|
| 24 | B11B S MON=$O(^TMP($J,"RMPR110P",1,SITE,MON)),VEND=0 G B11:MON="" | 
|---|
| 25 | B12 S VEND=$O(^TMP($J,"RMPR110P",1,SITE,MON,VEND)),DFN=0 G B11B:VEND="" | 
|---|
| 26 | B13 S DFN=$O(^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN)),ITEM=0 K ER  S RSH="" G B12:DFN="" S ^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,3)="" | 
|---|
| 27 | B14 S ITEM=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN,1,ITEM)) G C15:ITEM=""!(ITEM]"@") | 
|---|
| 28 | S R=^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN,1,ITEM,0),R660=$P(R,U,16) | 
|---|
| 29 | G:R660="" B14 | 
|---|
| 30 | S ^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,2,ITEM,R660)=$G(^RMPR(660,R660,0)),ER(R660)=ITEM | 
|---|
| 31 | G B14 | 
|---|
| 32 | C15 S BADITEM=0,XITEM=0 | 
|---|
| 33 | C16 S XITEM=$O(^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,XITEM)),BAD660=0 G:XITEM="" B13 | 
|---|
| 34 | C17 S BAD660=$O(^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,XITEM,BAD660)) | 
|---|
| 35 | S B0=^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,XITEM,BAD660,0),B1=^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,1,XITEM,BAD660,1) | 
|---|
| 36 | S RSH=$P(B0,U,2),LK1=RSH-5000,LK2=RSH+5000 S:LK1<0 LK1=0 | 
|---|
| 37 | S FIND660=+$P(B0,U,3) I FIND660 D  G:FIND660 C19 | 
|---|
| 38 | . S REC660=$G(^RMPR(660,FIND660,0)) | 
|---|
| 39 | . I DFN'=$P(REC660,U,2) S FIND660=0 | 
|---|
| 40 | C18 S FIND660=0 F I=LK1:1:LK2 S REC660=$G(^RMPR(660,I,0)) D:REC660'=""  Q:FIND660 | 
|---|
| 41 | . Q:$P(REC660,U,2)'=DFN | 
|---|
| 42 | . Q:$P(REC660,U,9)'=VEND | 
|---|
| 43 | . Q:$P(REC660,U,6)'=$P(B1,U) | 
|---|
| 44 | . Q:$P(REC660,U,7)'=$P(B1,U,7) | 
|---|
| 45 | . Q:$FN($P(REC660,U,16),"p",2)'=$FN($P(B1,U,6),"p",2) | 
|---|
| 46 | . Q:$P(REC660,U,8)'=$P(B1,U,15) | 
|---|
| 47 | . S FIND660=I | 
|---|
| 48 | I FIND660=0,RSH=0 G C30 | 
|---|
| 49 | C19 I FIND660 D | 
|---|
| 50 | . S ^TMP($J,"RMPR110P",2,SITE,MON,VEND,DFN,1,XITEM,BAD660)=B0_"^"_FIND660_"^"_REC660 | 
|---|
| 51 | . I DFN'=$P(REC660,U,2) S ^TMP($J,"RMPR110P",4,SITE,MON,VEND,DFN,1,XITEM,BAD660)=B0_"^"_FIND660_"^"_REC660 Q  ;FIND 660 DOES NOT MATCH DFN VALUE FOUND | 
|---|
| 52 | . I FIND660'=$P(B0,U,3) S ^TMP($J,"RMPR110P",3,SITE,MON,VEND,DFN,1,XITEM,BAD660)=B0_"^"_FIND660  ;FIND 660 DOES NOT MATCH RECORDED VALUE FOUND | 
|---|
| 53 | . S ^TMP($J,"RMPR110P",1,SITE,MON,VEND,DFN,3,XITEM,FIND660,0)=^RMPR(660,FIND660,0) | 
|---|
| 54 | . ;SET CORRECT 660 POINTER INTO 665.72 HERE | 
|---|
| 55 | . K DIE,DA,DR S DA(4)=SITE,DA(3)=MON,DA(2)=VEND,DA(1)=DFN | 
|---|
| 56 | . S DIE="^RMPO(665.72,"_DA(4)_",1,"_DA(3)_",1,"_DA(2)_",""V"","_DA(1) | 
|---|
| 57 | . S DIE=DIE_",1,",DA=XITEM,DR="15////^S X=FIND660" D ^DIE | 
|---|
| 58 | I 'FIND660 S ^TMP($J,"RMPR110P",5,SITE,MON,VEND,DFN,1,XITEM,BAD660)=B0   ;CANNOT LOGICALLY LOCATE CORRECT POINTER........ | 
|---|
| 59 | G C16 | 
|---|
| 60 | C30 S FIND660=+$P(B0,U,3),REC660="",F660=0 S:FIND660 REC660=$G(^RMPR(660,FIND660,0)) G:FIND660?.N&(DFN=$P(REC660,U,2)) C19 S XX=DFN,YY=0,X660="",FIND660=0 | 
|---|
| 61 | C31 S XX=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",DFN),-1),YY=0 Q:XX="" | 
|---|
| 62 | C32 I $D(^TMP($J,"RMPR110P",1,SITE,MON,VEND,XX)) S XX=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",XX),-1) Q:XX=""  G C32 | 
|---|
| 63 | F  S YY=$O(^RMPO(665.72,SITE,1,MON,1,VEND,"V",XX,1,YY)) Q:YY=""!(YY]"@")  S X660=$P(^RMPO(665.72,SITE,1,MON,1,VEND,"V",XX,1,YY,0),U,16) | 
|---|
| 64 | S REC660="" | 
|---|
| 65 | I X660 F I=1:1:5 I $D(^RMPR(660,X660+I)) S FIND660=X660+I,REC660=^RMPR(660,FIND660,0) Q:DFN=$P(REC660,U,2) | 
|---|
| 66 | I $P(REC660,U,2)'=DFN D  G:'FIND660 C18 | 
|---|
| 67 | . I +$P(B0,U,3)>5000 S F660=$P(B0,U,3)\1 | 
|---|
| 68 | . I X660,'F660 S F660=X660 | 
|---|
| 69 | . S LK1=F660-5000,LK2=F660+5000,FIND660=0,RSH=1 S:LK1<0 LK1=0 | 
|---|
| 70 | G C19 | 
|---|
| 71 | PRINT ; | 
|---|
| 72 | D NOW^%DTC S Y=% X ^DD("DD") S RMRDATE=Y | 
|---|
| 73 | PRINT2 ; Update the ^TMP("RMPRFIX" MAIL REPORT | 
|---|
| 74 | ; | 
|---|
| 75 | S SP="",$P(SP," ",85)=" " | 
|---|
| 76 | S ^TMP("RMPRFIX",$J,1)="File 665.72/660 Pointer Errors"_$E(SP,1,16)_"Run Date: "_RMRDATE_$E(SP,1,10) | 
|---|
| 77 | S ^TMP("RMPRFIX",$J,2)=$E(SP,1,3)_". . . 660 pointer error internal info . . ." | 
|---|
| 78 | S ^TMP("RMPRFIX",$J,3)="site    month    vendor      DFN      item   660 pntr"_$E(SP,1,8)_"660 ptr correction" | 
|---|
| 79 | S ^TMP("RMPRFIX",$J,4)="" | 
|---|
| 80 | S CNT110=4 | 
|---|
| 81 | N RMEND,PG S RTYP=2 | 
|---|
| 82 | S (SITE,PG)=0,U="^",IOSL=66 S:$E(IOST,1,2)="C-" IOSL=22 | 
|---|
| 83 | P1 S SITE=$O(^TMP($J,"RMPR110P",RTYP,SITE)),MON=0 G PRINT3:SITE="" | 
|---|
| 84 | P1A S MON=$O(^TMP($J,"RMPR110P",RTYP,SITE,MON)),VEND=0 G P1:MON="" | 
|---|
| 85 | P2 S VEND=$O(^TMP($J,"RMPR110P",RTYP,SITE,MON,VEND)),DFN=0 G P1A:VEND="" | 
|---|
| 86 | P3 S DFN=$O(^TMP($J,"RMPR110P",RTYP,SITE,MON,VEND,DFN)),ITEM=0 G:DFN="" P2 | 
|---|
| 87 | P5 S BADITEM=0,XITEM=0 | 
|---|
| 88 | P6 S XITEM=$O(^TMP($J,"RMPR110P",RTYP,SITE,MON,VEND,DFN,1,XITEM)),BAD660=0 G:XITEM="" P3 | 
|---|
| 89 | S BAD660=$O(^TMP($J,"RMPR110P",RTYP,SITE,MON,VEND,DFN,1,XITEM,BAD660)) | 
|---|
| 90 | S B0=^TMP($J,"RMPR110P",RTYP,SITE,MON,VEND,DFN,1,XITEM,BAD660) | 
|---|
| 91 | S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)=$J(SITE,3)_$J(MON,11)_$J(VEND,9)_$J(DFN,11)_$J(XITEM,7)_$J(BAD660,10)_$J($P(B0,U,4),18) | 
|---|
| 92 | G P6 | 
|---|
| 93 | PRINT3 I RTYP=2 D | 
|---|
| 94 | . S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="" | 
|---|
| 95 | . S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="==>>>  TOTAL POINTERS CORRECTED: "_ERRTOT | 
|---|
| 96 | I RTYP=2 S RTYP=4,(SITE,PG)=0 D  G P1 | 
|---|
| 97 | . F I=1:1:4 S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="" | 
|---|
| 98 | . S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="==>>>  NEW 660 RECORD DOES NOT MATCH DFN OF 665.72, NOT CORRECTED" | 
|---|
| 99 | I RTYP=4 S RTYP=5,(SITE,PG)=0 D  G P1 | 
|---|
| 100 | . F I=1:1:4 S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="" | 
|---|
| 101 | . S CNT110=CNT110+1,^TMP("RMPRFIX",$J,CNT110)="==>>>  LOGICAL POINTER COULD NOT BE FOUND FOR 665.72 ENTRY, NOT CORRECTED" | 
|---|
| 102 | D MAIL | 
|---|
| 103 | EXIT K SITE,RECTOT,ERRTOT,MON,VEND,IT,DFN,ITEM,RR,R660,R6,DTOUT,ANS,CHK,BADITEM,XITEM,B0,B1,RSH,LK1,LK2,FIND660 | 
|---|
| 104 | K REC660,XX,YY,X660,RMRDATE,PG,RTYP,RMEND,DIE,DA,DR,DIR,%,BAD660,F660,R,SP,Y | 
|---|
| 105 | K ^TMP($J),^TMP("RMPRTXT",$J),^TMP("RMPRFIX",$J) | 
|---|
| 106 | Q | 
|---|
| 107 | MAIL ;Send results of cleanup in a mail message to initiator | 
|---|
| 108 | N I,XMSUB,XMTEXT,XMDUZ,XMY,DIFROM,CNT110 | 
|---|
| 109 | S XMSUB="Patch RMPR*3.0*110 Clean up completed" | 
|---|
| 110 | S XMDUZ="Patch RMPR*3.0*110 Clean up job" | 
|---|
| 111 | S XMY(.5)="" S:$G(DUZ) XMY(DUZ)="" | 
|---|
| 112 | S XMTEXT="^TMP(""RMPRTXT"",$J," | 
|---|
| 113 | K ^TMP("RMPRTXT",$J) | 
|---|
| 114 | ; set up header and count | 
|---|
| 115 | S I=1 | 
|---|
| 116 | S ^TMP("RMPRTXT",$J,I)="The correction of invalid pointers between files 665.72 & 660 has completed.",I=I+1 | 
|---|
| 117 | S ^TMP("RMPRTXT",$J,I)="Below is a listing of pointers found and the correct pointer located",I=I+1 | 
|---|
| 118 | S ^TMP("RMPRTXT",$J,I)="",I=I+1 | 
|---|
| 119 | S ^TMP("RMPRTXT",$J,I)="",I=I+1 | 
|---|
| 120 | I ERRTOT=0 S ^TMP("RMPRTXT",$J,I)="No pointer errors found for files 660/665.72.",I=I+1 | 
|---|
| 121 | S ^TMP("RMPRTXT",$J,I)="",I=I+1 | 
|---|
| 122 | ; set up message text | 
|---|
| 123 | S CNT110=0 F  S CNT110=$O(^TMP("RMPRFIX",$J,CNT110)) Q:CNT110=""  D | 
|---|
| 124 | .S ^TMP("RMPRTXT",$J,I)=^TMP("RMPRFIX",$J,CNT110),I=I+1 | 
|---|
| 125 | D ^XMD ;send results | 
|---|
| 126 | Q | 
|---|