| 1 | IBDFBKR ;ALB/AAS - EF utilite, receive and format data for PCE ; OCT 1,1994 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | PCE(IB,PXCA) ; | 
|---|
| 5 | ; -- Entry point from Broker receiver to parse data and | 
|---|
| 6 | ;    either send to PCE or store until all pages received | 
|---|
| 7 | ; | 
|---|
| 8 | N %,%H,%I,I,J,X,Y,IBDATA,BUBBLES,HANDPRNT,DYNAMIC,RESULT,NEEDMORE,IBDA | 
|---|
| 9 | S RESULT=1 | 
|---|
| 10 | ; | 
|---|
| 11 | ; -- Move data from input format to data format | 
|---|
| 12 | S RESULT=$$BRKARY(.IB,.IBDATA) | 
|---|
| 13 | ; | 
|---|
| 14 | ; -- check for valid data | 
|---|
| 15 | S RESULT=$$VALIDD(.IBDATA) I RESULT>3 G PCEQ | 
|---|
| 16 | ; | 
|---|
| 17 | ; -- mark the page as having been received | 
|---|
| 18 | S IBDA=$O(^IBD(357.96,IBDATA("FORMID"),9,"B",+IBDATA("PAGE"),0))_","_IBDATA("FORMID")_"," | 
|---|
| 19 | S FDA(357.969,IBDA,.02)=$$NOW^XLFDT | 
|---|
| 20 | ; -- marked stored image as received | 
|---|
| 21 | S X=$O(^IBD(357.96,"AD",IBDATA("PAGE"),IBDATA("FORMID"),0)) I X D | 
|---|
| 22 | .S FDA(357.963,X_","_IBDATA("FORMID")_",",.07)=1 | 
|---|
| 23 | D FILE^DIE("","FDA","IBDERR") | 
|---|
| 24 | K DIC,DIE,DR,DA | 
|---|
| 25 | ; | 
|---|
| 26 | ; -- check if all pages have been rec'd (if not freeing ft entry) | 
|---|
| 27 | S NEEDMORE=$$NEEDMOR(.IBDATA) | 
|---|
| 28 | ; | 
|---|
| 29 | I NEEDMORE D | 
|---|
| 30 | .S RESULT=6 | 
|---|
| 31 | .S I=0 F  S I=$O(IBDF(I)) Q:'I  D FILAD(IBDF(I)) Q:RESULT=11 | 
|---|
| 32 | .N SUCCESS S SUCCESS=$$FSCND^IBDF18C(IBDATA("FORMID"),11) | 
|---|
| 33 | ; | 
|---|
| 34 | I 'NEEDMORE D | 
|---|
| 35 | .N SUCCESS S SUCCESS=$$FSCND^IBDF18C(IBDATA("FORMID"),2) | 
|---|
| 36 | .S RESULT=7 | 
|---|
| 37 | .S I=0 F  S I=$O(IBDF(I)) Q:'I  D ARYAD(IBDF(I)) | 
|---|
| 38 | .; | 
|---|
| 39 | .; -- add to the arrays data from other pages stored in form tracking | 
|---|
| 40 | .S I=0 | 
|---|
| 41 | .F  S I=$O(^IBD(357.96,IBDATA("FORMID"),10,I)) Q:'I  D ARYAD($G(^IBD(357.96,IBDATA("FORMID"),10,I,0))) | 
|---|
| 42 | .; | 
|---|
| 43 | .; -- don't need the raw data kept in form tracking anymore | 
|---|
| 44 | .; -- maybe we do for formtracking??? | 
|---|
| 45 | .;K ^IBD(357.96,IBDATA("FORMID"),10) | 
|---|
| 46 | .; | 
|---|
| 47 | .I $$SEND^IBDF18E(IBDATA("FORMID"),"","",.BUBBLES,.HANDPRNT,"",.PXCA,.DYNAMIC) | 
|---|
| 48 | .S RESULT=8 | 
|---|
| 49 | .;S RESULT=$S($G(PXCASTAT)=1:8,$G(PXCASTAT)=0:9,1:10) | 
|---|
| 50 | .Q | 
|---|
| 51 | ; | 
|---|
| 52 | PCEQ I +RESULT>10 D RECVERR^IBDFBK2(.IBDATA,+RESULT) | 
|---|
| 53 | Q +RESULT_"^"_$P($T(RESULT+RESULT),";;",2) | 
|---|
| 54 | ; | 
|---|
| 55 | FILAD(REC) ; | 
|---|
| 56 | ; -- adds the data to the FORM TRACKING file | 
|---|
| 57 | ; -- awaiting all of the pages to be sent | 
|---|
| 58 | ;    REC is the line of raw data, as received | 
|---|
| 59 | ; -- may change to FM call??? | 
|---|
| 60 | ;N CNT | 
|---|
| 61 | Q:REC="" | 
|---|
| 62 | ; -- remove hard sets and replace with FM call | 
|---|
| 63 | ;S CNT=+$P($G(^IBD(357.96,IBDATA("FORMID"),10,0)),"^",3) | 
|---|
| 64 | ;F  S CNT=CNT+1 Q:'$D(^IBD(357.96,IBDATA("FORMID"),10,CNT)) | 
|---|
| 65 | ;S ^IBD(357.96,IBDATA("FORMID"),10,CNT,0)=REC | 
|---|
| 66 | ;S ^IBD(357.96,IBDATA("FORMID"),10,0)=$P($G(^IBD(357.96,IBDATA("FORMID"),10,0)),1,2)_"^"_CNT_"^"_CNT | 
|---|
| 67 | ;S ^IBD(357.96,IBDATA("FORMID"),10,"B",$E(REC,1,30),CNT)="" | 
|---|
| 68 | ; | 
|---|
| 69 | L +^IBD(357.96,IBDATA("FORMID")):3 I '$T S RESULT=11 Q | 
|---|
| 70 | S DIC="^IBD(357.96,"_IBDATA("FORMID")_",10,",DIC(0)="L",DIC("P")=$P(^DD(357.96,10,0),"^",2),DA(1)=IBDATA("FORMID"),X=REC,DLAYGO=357.96 | 
|---|
| 71 | K DD,DO D FILE^DICN K DIC,DA,DLAYGO,DD,DO | 
|---|
| 72 | L -^IBD(357.96,IBDATA("FORMID")) | 
|---|
| 73 | Q | 
|---|
| 74 | ; | 
|---|
| 75 | ARYAD(DATA) ; | 
|---|
| 76 | ; -- Input DATA | 
|---|
| 77 | ; -- DATA format B=bubble or | 
|---|
| 78 | ;                H=handprint>:<ien of form element in the form | 
|---|
| 79 | ;                  definition table>:<value entered | 
|---|
| 80 | ;                D=dynamic bubble>:<field identifier>:<number of choice> | 
|---|
| 81 | ; -- Output Bubbles,Dynamic, or Handprint Array. | 
|---|
| 82 | ; | 
|---|
| 83 | I $E(DATA,1)="""",$E(DATA,$L(DATA))="""" S DATA=$P(DATA,"""",2) | 
|---|
| 84 | I $P(DATA,":")="B" S BUBBLES($P(DATA,":",2))=$P(DATA,":",3) | 
|---|
| 85 | I $P(DATA,":")="D" S DYNAMIC($P(DATA,":",2),$P(DATA,":",3))=DATA | 
|---|
| 86 | I $P(DATA,":")="H" S HANDPRNT($P(DATA,":",2))=$P(DATA,":",3,10) | 
|---|
| 87 | Q | 
|---|
| 88 | ; | 
|---|
| 89 | BRKARY(IB,IBDATA) ; | 
|---|
| 90 | ; -- break array of data into known parts | 
|---|
| 91 | ; -- Input  IB(array) contains raw data from receiver | 
|---|
| 92 | ;           IBDATA(array) called by reference | 
|---|
| 93 | ; -- Output IBDATA(array) of new formated data | 
|---|
| 94 | ;           result message indicator | 
|---|
| 95 | ; | 
|---|
| 96 | N I,X,CNT | 
|---|
| 97 | S (I,CNT)=0 | 
|---|
| 98 | F  S I=$O(IBDF(I)) Q:'I!(CNT>3)  D | 
|---|
| 99 | .I $P(IB(I),"=")="FORMTYPE" S IBDATA("FORMTYPE")=+$P(IBDF(I),"=",2),CNT=CNT+1 K IBDF(I) Q | 
|---|
| 100 | .I $P(IB(I),"=")="FORMID" S IBDATA("FORMID")=+$P(IBDF(I),"=",2),CNT=CNT+1 K IBDF(I) Q | 
|---|
| 101 | .I $P(IB(I),"=")="PAGE" S IBDATA("PAGE")=+$P(IBDF(I),"=",2),CNT=CNT+1 K IBDF(I) Q | 
|---|
| 102 | .I $P(IB(I),"=")="DATA" S CNT=CNT+1 K IBDF(I) Q  ; shouldn't contain data | 
|---|
| 103 | BRKQ Q 2 | 
|---|
| 104 | ; | 
|---|
| 105 | VALIDD(IBDATA) ; | 
|---|
| 106 | ; -- Determine if data contains Formtype, FormID, and Page | 
|---|
| 107 | ; -- Does form ID and form type match entry in Form Tracking | 
|---|
| 108 | ; -- is the form supposed to have this page? | 
|---|
| 109 | ; -- Input  IBDATA(array) | 
|---|
| 110 | ; -- Output result message indicator (3=valid, 4=invalid, 5=already recvd) | 
|---|
| 111 | ; | 
|---|
| 112 | N X S X=12 D | 
|---|
| 113 | .I '$G(IBDATA("FORMTYPE")) S X=13 Q | 
|---|
| 114 | .I '$G(IBDATA("FORMID")) S X=14 Q | 
|---|
| 115 | .I '$G(IBDATA("PAGE")) S X=15 Q | 
|---|
| 116 | .; | 
|---|
| 117 | .I $G(^IBD(357.96,+IBDATA("FORMID"),0))="" S X=16 Q | 
|---|
| 118 | .I $P($G(^IBD(357.96,+IBDATA("FORMID"),0)),"^",4)'=IBDATA("FORMTYPE") S X=17 Q | 
|---|
| 119 | .; | 
|---|
| 120 | .I '$O(^IBD(357.96,IBDATA("FORMID"),9,"B",IBDATA("PAGE"),0)) S X=18 Q | 
|---|
| 121 | .; | 
|---|
| 122 | .; -- if pce returned an error then all pages flagged as not received | 
|---|
| 123 | .I $P(^IBD(357.96,IBDATA("FORMID"),9,+$O(^IBD(357.96,IBDATA("FORMID"),9,"B",IBDATA("PAGE"),0)),0),"^",2) S X=5 Q | 
|---|
| 124 | .S X=3 | 
|---|
| 125 | VQ Q X | 
|---|
| 126 | ; | 
|---|
| 127 | NEEDMOR(IBDATA) ; | 
|---|
| 128 | ; -- check to see if all the pages have been received | 
|---|
| 129 | N I,X | 
|---|
| 130 | S (I,X)=0 | 
|---|
| 131 | F  S I=$O(^IBD(357.96,IBDATA("FORMID"),9,I)) Q:'I  D | 
|---|
| 132 | .I $G(^IBD(357.96,IBDATA("FORMID"),9,I,0)),'$P(^(0),"^",2) S X=1 Q | 
|---|
| 133 | .Q | 
|---|
| 134 | NMQ Q X | 
|---|
| 135 | ; | 
|---|
| 136 | RESULT ;; | 
|---|
| 137 | ;;Beginning to Format Data for PCE | 
|---|
| 138 | ;;Data Accepted, Beginning Validity Check | 
|---|
| 139 | ;;Valid Form Identity Received | 
|---|
| 140 | ;;Form ID Validity Rejected | 
|---|
| 141 | ;;Data from Page already Received | 
|---|
| 142 | ;;Waiting for more pages to be recognized | 
|---|
| 143 | ;;Formatting data for PCE | 
|---|
| 144 | ;;Data Sent to PCE | 
|---|
| 145 | ;;Data Rejected by PCE | 
|---|
| 146 | ;;Unknown result in sending data to PCE | 
|---|
| 147 | ;;Form Tracking Entry locked by another user, Editing not allowed | 
|---|
| 148 | ;;Form ID Validity Rejected | 
|---|
| 149 | ;;Form Definition of zero or null is invalid | 
|---|
| 150 | ;;Form ID of zero or null is invalid | 
|---|
| 151 | ;;Form Page number of zero or null is invalid | 
|---|
| 152 | ;;Form Tracking entry does not exist | 
|---|
| 153 | ;;Form Definition from scanning doesn't match data in Form Tracking | 
|---|
| 154 | ;;Data from non-scannable page was passed | 
|---|
| 155 | ;;Form Rejected, Patient not in clinic | 
|---|