| [613] | 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
 | 
|---|