| 1 | IBDF18C ;ALB/CJM/AAS - ENCOUNTER FORM - form ID utilities ;04-OCT-94 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**5,9**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | FID(DFN,APPT,SOURCE,FORMTYPE,CLIN) ; -- Form ID Tracking | 
|---|
| 5 | ; -- create record in the ENCOUNTER FORM TRACKING file | 
|---|
| 6 | ;    and returned a unique FORM ID | 
|---|
| 7 | ; -- Input    DFN    = patient internal entry number | 
|---|
| 8 | ;             APPT   = appointment date time (fm format) | 
|---|
| 9 | ;             SOURCE = the source of the form, ie | 
|---|
| 10 | ;                          IB = 1 | 
|---|
| 11 | ;                      Pandas = 2 | 
|---|
| 12 | ;                      Telefr = 3 | 
|---|
| 13 | ;             FORMTYPE   = the package form definition ID - may have been exterally assigned | 
|---|
| 14 | ;             CLIN   = pointer to 44 (optional) | 
|---|
| 15 | ; | 
|---|
| 16 | ; -- Output Returns  = internal form id^external form id | 
|---|
| 17 | ; | 
|---|
| 18 | N I,J,X,Y,ID,EXID,CLN,INTERNAL,NODE,FORMID,DIC,DIE,DA,DR,DINUM,DLAYGO | 
|---|
| 19 | S ID=-1,EXID="" | 
|---|
| 20 | ; | 
|---|
| 21 | I '$G(DFN)!('$G(APPT))!('$G(SOURCE)) G FIDQ | 
|---|
| 22 | ; | 
|---|
| 23 | ; -- FORMTYPE may="", but should always be >0 for scannable forms | 
|---|
| 24 | S FORMTYPE=+$G(FORMTYPE) | 
|---|
| 25 | S FORMID("APPT")=APPT,FORMID("SOURCE")=1 | 
|---|
| 26 | ; | 
|---|
| 27 | ; -- determine if the FORMTYPE was exterally assigned | 
|---|
| 28 | S INTERNAL=$D(^IBD(357.95,"C",SOURCE,FORMTYPE)) | 
|---|
| 29 | ; | 
|---|
| 30 | ; | 
|---|
| 31 | S ID=$$FINDID(DFN,APPT,FORMTYPE) I ID S EXID=ID_"^"_$P($G(^IBD(357.96,ID,0)),"^",9) G FIDQ | 
|---|
| 32 | K DIC,DO,D0,DD,DA,DINUM | 
|---|
| 33 | S DIC="^IBD(357.96,",X=ID,DIC(0)="L",DLAYGO=357.96,DINUM=ID | 
|---|
| 34 | ; | 
|---|
| 35 | L +^IBD(357.97,1,.02):3 | 
|---|
| 36 | S ID=+$P($G(^IBD(357.97,1,0)),"^",2) | 
|---|
| 37 | F ID=ID+1:1 L:$D(^IBD(357.96,(ID-1))) -^IBD(357.96,(ID-1)) I ID>0,'$D(^IBD(357.96,ID)) L +^IBD(357.96,ID):1 I $T,'$D(^IBD(357.96,ID)) S (X,DINUM)=ID D FILE^DICN I +Y>0 L -^IBD(357.96,ID) Q | 
|---|
| 38 | S $P(^IBD(357.97,1,0),"^",2)=ID | 
|---|
| 39 | L -^IBD(357.97,1,.02) | 
|---|
| 40 | ; | 
|---|
| 41 | S ID=$S(+Y<1:"",1:+Y) I ID="" D LOGERR^IBDF18E2(3579600,.FORMID) G FIDQ | 
|---|
| 42 | D:ID | 
|---|
| 43 | .S EXID=$$EXID(ID) | 
|---|
| 44 | .S DIE="^IBD(357.96,",DA=ID | 
|---|
| 45 | .S DR="[IBD CREATE FORM TRACKING]" | 
|---|
| 46 | .L +^IBD(357.96,ID):5 D ^DIE L -^IBD(357.96,ID) | 
|---|
| 47 | .K DIC,DIE,DA,DR,DINUM,DLAYGO,%,%H,%I | 
|---|
| 48 | .; | 
|---|
| 49 | .;D NOW^%DTC N IBPRDT S IBPRDT=% ;Not needed with template, delete | 
|---|
| 50 | .;S DR=".02////^S X=DFN;.03////^S X=APPT;.04////^S X=$S(INTERNAL:FORMTYPE,1:"""");.05////^S X=IBPRDT;.07////^S X=SOURCE;.08////^S X=$S('INTERNAL:FORMTYPE,1:"""");.09////^S X=EXID;.1////^S X=$G(CLIN);.11////1" | 
|---|
| 51 | .;I $G(^DPT(DFN,"S",APPT,0))="" S DR=DR_";.14////1" | 
|---|
| 52 | FIDQ Q ID_"^"_EXID | 
|---|
| 53 | ; | 
|---|
| 54 | EXID(ID) ; -- converts external id format to internal id format | 
|---|
| 55 | ; -- we need to decide on external id format | 
|---|
| 56 | Q $G(ID) | 
|---|
| 57 | ; | 
|---|
| 58 | INID(ID) ; -- find internal id number from external format | 
|---|
| 59 | ; -- Input ID  = form id in external format | 
|---|
| 60 | ;    Output    = form id in internal format or NULL if nonexistant | 
|---|
| 61 | ; | 
|---|
| 62 | N EXID | 
|---|
| 63 | S EXID=$O(^IBD(357.96,"AEXT",ID,0)) | 
|---|
| 64 | INIDQ Q $G(EXID) | 
|---|
| 65 | ; | 
|---|
| 66 | FSCND(ID,STAT,ERR) ; -- update form tracking file that | 
|---|
| 67 | ; -- Input  ID = entry to flag as scanned (internal format) | 
|---|
| 68 | ;         STAT = NEW status, 1=printed, 2=scanned,3=sent to pce okay, | 
|---|
| 69 | ;                4=pce returned err | 
|---|
| 70 | ;                11=pending pages, 12=input data error | 
|---|
| 71 | ;          ERR = pce error message (required only if stat=4) | 
|---|
| 72 | ; | 
|---|
| 73 | ; -- Output    = 1 if successful, 0 if not | 
|---|
| 74 | ; | 
|---|
| 75 | N IBI,SUCCESS,I,J,X,Y,DA,DR,DIC,DIE | 
|---|
| 76 | S SUCCESS=0 | 
|---|
| 77 | I '$G(ID) G FSCNDQ | 
|---|
| 78 | I $G(STAT)=4,$G(ERR)="" G FSCNDQ | 
|---|
| 79 | ; | 
|---|
| 80 | ; -- three lines below use template, new for t6, uncommend and delete | 
|---|
| 81 | ;    remaining lines | 
|---|
| 82 | S DIE="^IBD(357.96,",DA=ID,DR="[IBD EDIT FORM TRACKING STATUS]" | 
|---|
| 83 | D ^DIE | 
|---|
| 84 | S SUCCESS=1 | 
|---|
| 85 | ; | 
|---|
| 86 | ;S IBI=$G(^IBD(357.96,+ID,0)) I IBI="" G FSCND | 
|---|
| 87 | ;I $P(IBI,"^",6)="" S DIE="^IBD(357.96,",DA=ID,DR=".06///NOW;.11////^S X=$S($G(STAT):STAT,1:2);.12////^S X=$G(ERR)" D ^DIE S SUCCESS=1 G FSCNDQ | 
|---|
| 88 | ;S DIE="^IBD(357.96,",DA=+ID,DR=".11////^S X=$G(STAT);.12////^S X=$G(ERR)" D ^DIE S SUCCESS=1 | 
|---|
| 89 | ; | 
|---|
| 90 | FSCNDQ Q SUCCESS | 
|---|
| 91 | ; | 
|---|
| 92 | FIDST(ID) ; -- form id status | 
|---|
| 93 | ; -- Input   ID = form id (internal entry number) | 
|---|
| 94 | ; | 
|---|
| 95 | ; -- Output  STATUS = -1 if id does not exist | 
|---|
| 96 | ;                   =  1 if id exists but not scanned (printed) | 
|---|
| 97 | ;                   =  2 if already scanned in | 
|---|
| 98 | ;                   =  3 if sent to pce okay | 
|---|
| 99 | ;                   =  4 if sent to pce with error.... | 
|---|
| 100 | ; | 
|---|
| 101 | N STATUS,I,J,X,Y | 
|---|
| 102 | S STATUS=-1 | 
|---|
| 103 | I '$G(ID) G FIDSTQ | 
|---|
| 104 | S X=$G(^IBD(357.96,ID,0)) I X="" G FIDSTQ | 
|---|
| 105 | S STATUS=$S($P(X,"^",6)="":1,1:2) | 
|---|
| 106 | S:$P(X,"^",11)>2 STATUS=$P(X,"^",11) | 
|---|
| 107 | FIDSTQ Q STATUS | 
|---|
| 108 | ; | 
|---|
| 109 | FINDID(DFN,APPT,FORM,DUP) ; -- Find a form id for a patient and appointment | 
|---|
| 110 | ; -- input  DFN =  patient | 
|---|
| 111 | ;          APPT =  appointment date time | 
|---|
| 112 | ;          FORM =  (Optional) type of form, pointer to 357.95 or field 10 | 
|---|
| 113 | ;           DUP =  (Optional) if true, No duplicates of same form (357) | 
|---|
| 114 | ;                  returns last printing of same form with different | 
|---|
| 115 | ;                  form definitions, will also exclude nonscannable form | 
|---|
| 116 | ; | 
|---|
| 117 | ; -- output     = form id1^form id2^form id3^form idn... | 
|---|
| 118 | ;               = where form ids are successive form ids (in internal | 
|---|
| 119 | ;                 format) for same appointment | 
|---|
| 120 | ; | 
|---|
| 121 | N ID,I,J,X,ORIGIN,OLDDATE,NEWDATE | 
|---|
| 122 | S ID="" | 
|---|
| 123 | I '$G(DFN)!('$G(APPT)) G FINDIDQ | 
|---|
| 124 | K ^TMP($J,"IBD-FINDID") | 
|---|
| 125 | S CLN=+$G(^DPT(DFN,"S",APPT,0)) ;get clinic if appointment | 
|---|
| 126 | ; | 
|---|
| 127 | I '$G(DUP) S X=0 F  S X=$O(^IBD(357.96,"APTAP",DFN,APPT,X)) Q:'X  D | 
|---|
| 128 | .I CLN,CLN'=$P($G(^IBD(357.96,X,0)),"^",10) Q  ;form for canceled appt. | 
|---|
| 129 | .I '$G(FORM) S ID=ID_X_"^" Q | 
|---|
| 130 | .I $G(FORM) S I=$G(^IBD(357.96,X,0)) I $P(I,"^",4)=FORM!($P(I,"^",8)=FORM) S ID=X Q | 
|---|
| 131 | ; | 
|---|
| 132 | I $G(DUP) S X=0 F  S X=$O(^IBD(357.96,"APTAP",DFN,APPT,X)) Q:'X  D | 
|---|
| 133 | .I +$P($G(^IBE(357,+$P($G(^IBD(357.95,+$P($G(^IBD(357.96,X,0)),"^",4),0)),"^",21),0)),"^",12)<1 Q | 
|---|
| 134 | .I CLN,CLN'=$P($G(^IBD(357.96,X,0)),"^",10) Q  ;form for canceled appt. | 
|---|
| 135 | .S ORIGIN=$P($G(^IBD(357.95,+$P($G(^IBD(357.96,X,0)),"^",4),0)),"^",21) Q:'ORIGIN | 
|---|
| 136 | .I '$G(FORM) D | 
|---|
| 137 | ..I '$D(^TMP($J,"IBD-FINDID",ORIGIN)) S ^TMP($J,"IBD-FINDID",ORIGIN)=X Q | 
|---|
| 138 | ..S OLDDATE=$P($G(^IBD(357.96,+$G(^TMP("IBD-FINDID",ORIGIN)),0)),"^",5) | 
|---|
| 139 | ..S NEWDATE=$P($G(^IBD(357.96,X,0)),"^",5) | 
|---|
| 140 | ..I NEWDATE'<OLDDATE S ^TMP($J,"IBD-FINDID",ORIGIN)=X | 
|---|
| 141 | .I $G(FORM) S I=$G(^IBD(357.96,X,0)) I $P(I,"^",4)=FORM!($P(I,"^",8)=FORM) S ID=X Q | 
|---|
| 142 | I $G(DUP),'$G(FORM) S ORIGIN=0 F  S ORIGIN=$O(^TMP($J,"IBD-FINDID",ORIGIN)) Q:'ORIGIN  S ID=ID_^TMP($J,"IBD-FINDID",ORIGIN)_"^" | 
|---|
| 143 | ; | 
|---|
| 144 | FINDIDQ K ^TMP($J,"IBD-FINDID") | 
|---|
| 145 | Q ID | 
|---|
| 146 | ; | 
|---|
| 147 | FINDPT(FORMID) ; | 
|---|
| 148 | ; -- find patient from form id | 
|---|
| 149 | ; -- Output  :Patient Name ^ PID ^ clinic Name ^ appt date/time (external) | 
|---|
| 150 | ;             ^form ID ^ form status ^ DFN ^ clinic ien ^ appt date/time (fm format) | 
|---|
| 151 | ; | 
|---|
| 152 | N I,J,X,Y,DFN,IBNODE,IBXX,VA,VADM,VAERR,STATNM,FORM,FORMNM | 
|---|
| 153 | S IBXX="Unable to identify Form^^^" | 
|---|
| 154 | I +$G(FORMID)<1 G FINDPTQ | 
|---|
| 155 | S IBNODE=$G(^IBD(357.96,+FORMID,0)) | 
|---|
| 156 | I IBNODE="" G FINDPTQ | 
|---|
| 157 | S DFN=+$P(IBNODE,"^",2) | 
|---|
| 158 | D DEM^VADPT | 
|---|
| 159 | S Y=$P(IBNODE,"^",11),C=$P(^DD(357.96,.11,0),"^",2) D Y^DIQ S STATNM=Y | 
|---|
| 160 | S FORM=$P($G(^IBD(357.95,+$P(IBNODE,"^",4),0)),"^",21) | 
|---|
| 161 | S FORMNM=$P($G(^IBE(357,+FORM,0)),"^") | 
|---|
| 162 | ; | 
|---|
| 163 | S IBXX=$G(VADM(1))_"^"_$G(VA("PID"))_"^"_$P($G(^SC(+$P(IBNODE,"^",10),0),"Clinic Not Specified"),"^")_"^"_$$FMTE^XLFDT($P(IBNODE,"^",3))_"^"_$P(IBNODE,"^",4)_"^"_$P(IBNODE,"^",11)_"^"_DFN | 
|---|
| 164 | S IBXX=IBXX_"^"_$P(IBNODE,"^",10)_"^"_$P(IBNODE,"^",3)_"^"_STATNM_"^"_FORMNM_"^"_FORM | 
|---|
| 165 | ; | 
|---|
| 166 | I +$P(FORMID,"^",2)>0,$P(IBNODE,"^",4)'=+$P(FORMID,"^",2) S IBXX="Form Type and Form ID Don't match^^^" | 
|---|
| 167 | ; | 
|---|
| 168 | FINDPTQ Q IBXX | 
|---|