| 1 | IBDFBKS2 ;ALB/CJM/AAS - Create form spec for scanning ; 6-JUN-95 | 
|---|
| 2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;**3,25**;APR 24, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | HANDPRNT(IEN,NAME,PAGE,ROW,COL,WIDTH,LINES,READTYPE,PAPKEY,PI) ; | 
|---|
| 5 | ; | 
|---|
| 6 | Q:($P($G(^IBE(357.6,+PI,0)),"^",6)'=1) | 
|---|
| 7 | ; | 
|---|
| 8 | N X1,X2,Y1,Y2,W,PICTURE,TYPEDATA,NODE0,LENGTH,LINENUM,PKDICT,CONF,L,SUBPICS,FORMAT,XYSMALL | 
|---|
| 9 | S TYPEDATA="ALPHA",PICTURE="" | 
|---|
| 10 | ; | 
|---|
| 11 | ; -- get info associated with DHCP Data Element | 
|---|
| 12 | I PAPKEY D | 
|---|
| 13 | .S NODE0=$G(^IBE(359.1,PAPKEY,0)),NODE10=$G(^(10)) | 
|---|
| 14 | .S TYPEDATA=$P(NODE10,"^",1) | 
|---|
| 15 | .S TYPEDATA=$S(TYPEDATA="a":"ALPHA",TYPEDATA="i":"INT",TYPEDATA="f":"FLOAT",TYPEDATA="t":"TIME",TYPEDATA="d":"DATE",1:"ALPHA") | 
|---|
| 16 | .S PICTURE=$P(NODE10,"^",2) | 
|---|
| 17 | .S FORMAT=$P(NODE0,"^",5) ;don't set year in format, needed as is for recognition | 
|---|
| 18 | .S LENGTH=$P(NODE0,"^",2) | 
|---|
| 19 | .S CONF=$P(NODE0,"^",7) | 
|---|
| 20 | .S PKDICT=$P(NODE10,"^",3) | 
|---|
| 21 | .S SUBPICS=$P(NODE10,"^",4) | 
|---|
| 22 | ; | 
|---|
| 23 | ;find top left-hand corner | 
|---|
| 24 | S X1=((COL*COLWIDTH)+XOFFSET)*CONVERT,X1=$FN(X1,"",0) | 
|---|
| 25 | S Y1=((ROW*ROWHT)+YOFFSET+YHANDOS)*CONVERT,Y1=$FN(Y1,"",0) | 
|---|
| 26 | S XYSMALL=$P(^IBD(357.09,1,0),"^",12) | 
|---|
| 27 | I XYSMALL'=+XYSMALL S XYSMALL=5 ;default | 
|---|
| 28 | ; | 
|---|
| 29 | I READTYPE=3 D | 
|---|
| 30 | .;define some marksense fields - if any marked it means there is print! | 
|---|
| 31 | .S FIELD=FIELD+1 | 
|---|
| 32 | .D BLDARY^IBDFBKS("FIELD ' "_FIELD) | 
|---|
| 33 | .D BLDARY^IBDFBKS("  NAME = """_NAME_"?"";") | 
|---|
| 34 | .D BLDARY^IBDFBKS("  ELEMTYPE = RECT;") | 
|---|
| 35 | .D BLDARY^IBDFBKS("  METRIC = 40 40 0 0 0 0 1 0 1;") | 
|---|
| 36 | .D BLDARY^IBDFBKS("  TYPEDATA = INT;") | 
|---|
| 37 | .D BLDARY^IBDFBKS("  LENGTH = ",LENGTH,";") | 
|---|
| 38 | .D BLDARY^IBDFBKS("  POINTS =") | 
|---|
| 39 | .F L=1:1:LINES F W=1:1:WIDTH D | 
|---|
| 40 | ..S X2=X1+((((W-1)*172.7645)+30)*CONVERT),X2=$FN(X2,"",0) | 
|---|
| 41 | ..S Y2=Y1+(((L*180)-39)*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 42 | ..S IBDFSA(IBLC)=IBDFSA(IBLC)_" "_Y2+1_" "_X2+1 | 
|---|
| 43 | .S IBDFSA(IBLC)=IBDFSA(IBLC)_";" | 
|---|
| 44 | .D BLDARY^IBDFBKS("  PAGE = ",PAGE,";") | 
|---|
| 45 | .D BLDARY^IBDFBKS("  CONFIDENCE = "" 0"";") | 
|---|
| 46 | .D BLDARY^IBDFBKS("  END = {if (FIELDSTATUS != FIELD_BLANK){") | 
|---|
| 47 | .D BLDARY^IBDFBKS("    hasprint=1;") | 
|---|
| 48 | .D BLDARY^IBDFBKS("    FIELDSTATUS=FIELD_BAD;") | 
|---|
| 49 | .D BLDARY^IBDFBKS("  }") | 
|---|
| 50 | .D BLDARY^IBDFBKS("  else {") | 
|---|
| 51 | .D BLDARY^IBDFBKS("    hasprint=0;") | 
|---|
| 52 | .D BLDARY^IBDFBKS("    NEXTFIELD=NEXTFIELD+1;") | 
|---|
| 53 | .D BLDARY^IBDFBKS("  }};") | 
|---|
| 54 | .D BLDARY^IBDFBKS("  EXFORMAT = ""NOEXPORT"";") | 
|---|
| 55 | .D BLDARY^IBDFBKS("  HIDDEN = ""1"";") | 
|---|
| 56 | ; | 
|---|
| 57 | ;field is narrative that needs to be broken into single lines | 
|---|
| 58 | I (LINES>1)&(READTYPE=2) D  Q | 
|---|
| 59 | .F LINENUM=1:1:LINES S:LINENUM>1 Y1=$FN(Y1+(2*ROWHT*CONVERT),"",0) D | 
|---|
| 60 | ..S X2=X1+(172.7654*WIDTH*CONVERT),X2=$FN(X2,"",0) | 
|---|
| 61 | ..S Y2=Y1+(180*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 62 | ..D PRINTEND^IBDFBKS3 | 
|---|
| 63 | ..D PKFIELD(X1+2,Y1+2,X2-2,Y2-2,2,PICTURE,0,CONF,PKDICT,WIDTH,TYPEDATA,NAME_" LINE "_LINENUM,2) | 
|---|
| 64 | ..;for handprint fields,must prefix data exported with field info - for bubbles the XMAP has the field info | 
|---|
| 65 | ..S @FIELDS@(PAGE,FIELD)="H:"_IEN_":",@FIELDS@(PAGE,FIELD,"DATATYPE")=TYPEDATA S:LINENUM=1 @FIELDS@(PAGE,FIELD,"START")=1 S:LINENUM=LINES @FIELDS@(PAGE,FIELD,"END")=1 S @FIELDS@(PAGE,FIELD,"MULT")=1 | 
|---|
| 66 | ; | 
|---|
| 67 | ;field needs to be broken into subfields due to the print format | 
|---|
| 68 | I (READTYPE=2)&(FORMAT'="") D  Q | 
|---|
| 69 | .N SUBFIELD,I1,I2,PREFIX,SX1,SX2,SPICTURE,LEN,FOUNDEND | 
|---|
| 70 | .S PREFIX=$P(FORMAT,"_"),I1=$L(PREFIX)+1 | 
|---|
| 71 | .S Y2=Y1+(180*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 72 | .F  Q:(I1>WIDTH)  D | 
|---|
| 73 | ..S I2=I1 | 
|---|
| 74 | ..S FOUNDEND=0 F  D  Q:FOUNDEND | 
|---|
| 75 | ...I $E(FORMAT,I2+1)="_" S I2=I2+1 | 
|---|
| 76 | ...E  S FOUNDEND=1 Q | 
|---|
| 77 | ..;so at this point I1=beginning of the subfield, I2=the end | 
|---|
| 78 | ..S SX1=$FN(X1+(172.7654*(I1-1)*CONVERT),"",0) | 
|---|
| 79 | ..S SX2=$FN(X1+(172.7654*(I2)*CONVERT),"",0) | 
|---|
| 80 | ..S SPICTURE=$E(SUBPICS,I1,I2) | 
|---|
| 81 | ..S LEN=(I2-I1)+1 | 
|---|
| 82 | ..D PRINTEND^IBDFBKS3 | 
|---|
| 83 | ..D PKFIELD(SX1+2,Y1+2,SX2-2,Y2-2,2,SPICTURE,1,0,"",LEN,"ALPHA",NAME_" Char:"_I1_" to "_I2) | 
|---|
| 84 | ..S SUBFIELD(FIELD)="" | 
|---|
| 85 | ..S (I1,I2)=I2+1 | 
|---|
| 86 | ..S FOUNDEND=0 F  D  Q:FOUNDEND | 
|---|
| 87 | ...I $E(FORMAT,I2+1)="_" S FOUNDEND=1 Q | 
|---|
| 88 | ...I I2>WIDTH S FOUNDEND=1 Q | 
|---|
| 89 | ...S I2=I2+1 Q | 
|---|
| 90 | ..I $E(FORMAT,I1,I2)'="" S SUBFIELD(FIELD)=$E(FORMAT,I1,I2) | 
|---|
| 91 | ..S I1=I2+1 | 
|---|
| 92 | .; | 
|---|
| 93 | .;now create a field to concatenate the subfields together | 
|---|
| 94 | .S X2=X1+(172.7654*WIDTH*CONVERT),X2=$FN(X2,"",0) | 
|---|
| 95 | .S Y2=Y1+(180*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 96 | .D PKFIELD(X1,Y1,X2,Y2,1,PICTURE,0,CONF,PKDICT,WIDTH,TYPEDATA,NAME,1) | 
|---|
| 97 | .D | 
|---|
| 98 | ..D BLDARY^IBDFBKS("BEGIN = {ALPHA sfstr;") | 
|---|
| 99 | ..D BLDARY^IBDFBKS("ALPHA str;") | 
|---|
| 100 | ..D BLDARY^IBDFBKS("INT sfconf;") | 
|---|
| 101 | ..D BLDARY^IBDFBKS("INT conf;") | 
|---|
| 102 | ..D BLDARY^IBDFBKS("INT found;") | 
|---|
| 103 | ..D BLDARY^IBDFBKS("INT ret;") | 
|---|
| 104 | ..D BLDARY^IBDFBKS("INT position;") ; patch 25 code | 
|---|
| 105 | ..D BLDARY^IBDFBKS("INT delfield;") ; patch 25 code | 
|---|
| 106 | ..D BLDARY^IBDFBKS("found=0;") | 
|---|
| 107 | ..D BLDARY^IBDFBKS("conf=10;") | 
|---|
| 108 | ..I PREFIX'="" D BLDARY^IBDFBKS("    str=\"""_PREFIX_"\"";") | 
|---|
| 109 | ..N SUB S SUB=0 F  S SUB=$O(SUBFIELD(SUB)) Q:'SUB  D | 
|---|
| 110 | ...D BLDARY^IBDFBKS("  sfstr=STRIP(GETAVALUE("_SUB_"));") | 
|---|
| 111 | ...D BLDARY^IBDFBKS("str=STRCAT(str,sfstr);") | 
|---|
| 112 | ...D BLDARY^IBDFBKS("if (sfstr!=\""\"") found=1;") | 
|---|
| 113 | ...I SUBFIELD(SUB)'="" D BLDARY^IBDFBKS("str=STRCAT(sfstr,\"""_SUBFIELD(SUB)_"\"");") | 
|---|
| 114 | ...D BLDARY^IBDFBKS("sfconf=GETCONF("_SUB_");") | 
|---|
| 115 | ...D BLDARY^IBDFBKS("if (sfconf<conf) conf=sfconf;") | 
|---|
| 116 | ..; | 
|---|
| 117 | ..; patch 25 code starts here, remove dashes and dots | 
|---|
| 118 | ..D BLDARY^IBDFBKS("") | 
|---|
| 119 | ..D BLDARY^IBDFBKS("delfield = 0;") | 
|---|
| 120 | ..D BLDARY^IBDFBKS("position = STRFIND(str,\"".\"",1);") | 
|---|
| 121 | ..D BLDARY^IBDFBKS("if (position == 1) delfield = 1;") | 
|---|
| 122 | ..D BLDARY^IBDFBKS("position = STRFIND(\""     .  -----..  -....-----.-.--.../////--/.@.\"",str,1);") | 
|---|
| 123 | ..D BLDARY^IBDFBKS("if (position != 0 || delfield == 1) {") | 
|---|
| 124 | ..D BLDARY^IBDFBKS("   if (str != \"".\"") LOG(STRCAT(\""The following handprint field "_FIELD_" value was deleted: \"",str));") | 
|---|
| 125 | ..D BLDARY^IBDFBKS("   str = \""\"";") | 
|---|
| 126 | ..D BLDARY^IBDFBKS("   conf = 10;") | 
|---|
| 127 | ..D BLDARY^IBDFBKS("   found = 0;}") | 
|---|
| 128 | ..D BLDARY^IBDFBKS("") | 
|---|
| 129 | ..; | 
|---|
| 130 | ..D BLDARY^IBDFBKS("if (found) ret=SETTEXT("_FIELD_",str,ITOA(conf-1),FIELD_OK);") | 
|---|
| 131 | ..D BLDARY^IBDFBKS("if (found == 0) ret=SETTEXT("_FIELD_",\""\"",ITOA(conf-1),FIELD_BLANK);") | 
|---|
| 132 | ..D BLDARY^IBDFBKS("};") | 
|---|
| 133 | .; | 
|---|
| 134 | .;for handprint fields,must prefix data exported with field info - for bubbles the XMAP has the field info | 
|---|
| 135 | .S @FIELDS@(PAGE,FIELD)="H:"_IEN_":",@FIELDS@(PAGE,FIELD,"DATATYPE")=TYPEDATA | 
|---|
| 136 | ; | 
|---|
| 137 | ;following are handprint fields that don't need to be broken into subfields | 
|---|
| 138 | ; | 
|---|
| 139 | I READTYPE=1 D  ;not printed in ICR format | 
|---|
| 140 | .D CNVRTHT^IBDF2D1(LINES,.LINES) | 
|---|
| 141 | .S X2=X1+(103.65924*WIDTH*CONVERT),X2=$FN(X2,"",0) | 
|---|
| 142 | .S Y2=Y1+(ROWHT*LINES*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 143 | ; | 
|---|
| 144 | I READTYPE'=1 D  ;printed in ICR format | 
|---|
| 145 | .S X2=X1+(172.7654*WIDTH*CONVERT),X2=$FN(X2,"",0) | 
|---|
| 146 | .S Y2=Y1+(180*LINES*CONVERT),Y2=$FN(Y2,"",0) | 
|---|
| 147 | ; | 
|---|
| 148 | D PRINTEND^IBDFBKS3 | 
|---|
| 149 | D:READTYPE=2 PKFIELD(X1+2,Y1+2,X2-2,Y2-2,READTYPE,PICTURE,0,CONF,PKDICT,WIDTH,TYPEDATA,NAME,2) | 
|---|
| 150 | ; | 
|---|
| 151 | D:READTYPE'=2 PKFIELD(X1,Y1,X2,Y2,READTYPE,PICTURE,0,"","",LENGTH,TYPEDATA,NAME) | 
|---|
| 152 | S @FIELDS@(PAGE,FIELD)="H:"_IEN_":",@FIELDS@(PAGE,FIELD,"DATATYPE")=TYPEDATA | 
|---|
| 153 | ; | 
|---|
| 154 | ;** END STUFF ** | 
|---|
| 155 | I READTYPE'=2 D  ;test the results of the marksense fields that were laid on top of the operator fill field | 
|---|
| 156 | .D ADDTOEND^IBDFBKS3("  if ((hasprint)&&(FIELDACCEPTED==0)){") | 
|---|
| 157 | .D ADDTOEND^IBDFBKS3("    FIELDSTATUS=FIELD_BAD;}") | 
|---|
| 158 | Q | 
|---|
| 159 | ; | 
|---|
| 160 | PKFIELD(X1,Y1,X2,Y2,READTYPE,PICTURE,HIDDEN,CONF,PKDICT,LENGTH,TYPEDATA,NAME,ENDPGM) ; | 
|---|
| 161 | ; -- now for the handprint field | 
|---|
| 162 | S FIELD=FIELD+1 | 
|---|
| 163 | D BLDARY^IBDFBKS("FIELD ' "_FIELD) | 
|---|
| 164 | D BLDARY^IBDFBKS("  NAME = """_NAME_""";") | 
|---|
| 165 | ; | 
|---|
| 166 | I READTYPE=2 D | 
|---|
| 167 | .D BLDARY^IBDFBKS("  ELEMTYPE = ELEM_OT;") | 
|---|
| 168 | .D BLDARY^IBDFBKS("  METRIC = 2;") | 
|---|
| 169 | ; | 
|---|
| 170 | E  D | 
|---|
| 171 | .D BLDARY^IBDFBKS("  ELEMTYPE = ELEM_OT;") | 
|---|
| 172 | .D BLDARY^IBDFBKS("  METRIC = 1;") | 
|---|
| 173 | ; | 
|---|
| 174 | D BLDARY^IBDFBKS("  DATATYPE ="_TYPEDATA_";") | 
|---|
| 175 | D BLDARY^IBDFBKS("  LENGTH = "_LENGTH_";") | 
|---|
| 176 | D BLDARY^IBDFBKS("  POINTS = "_(Y1+XYSMALL)_" "_(X1+XYSMALL)_" "_(Y2-XYSMALL)_" "_(X2-XYSMALL)_";") | 
|---|
| 177 | D BLDARY^IBDFBKS("  PAGE = "_PAGE_";") | 
|---|
| 178 | I CONF'="" D BLDARY^IBDFBKS("  CONFIDENCE = """_CONF_""";") | 
|---|
| 179 | I HIDDEN D BLDARY^IBDFBKS(" HIDDEN = ""1"";") | 
|---|
| 180 | I $G(ENDPGM) D HPSKIP | 
|---|
| 181 | ; | 
|---|
| 182 | ;** IMAGE PROCESSING ** | 
|---|
| 183 | I READTYPE=2 D | 
|---|
| 184 | .D BLDARY^IBDFBKS(" ImageProcessing = {") | 
|---|
| 185 | .D BLDARY^IBDFBKS("   IMAGEPROC=1") | 
|---|
| 186 | .D BLDARY^IBDFBKS("   DESKEW=0") | 
|---|
| 187 | .D BLDARY^IBDFBKS("   DESHADE=0") | 
|---|
| 188 | .D BLDARY^IBDFBKS("   SMOOTH=1") | 
|---|
| 189 | .D BLDARY^IBDFBKS("   REMOVE_BORDER=1") | 
|---|
| 190 | .D BLDARY^IBDFBKS("   REMOVE_NOISE=0") | 
|---|
| 191 | .D BLDARY^IBDFBKS("   PROC_MIN_VERT_LINE_LEN=70") | 
|---|
| 192 | .D BLDARY^IBDFBKS("   PROC_MIN_HORZ_LINE_LEN=70") | 
|---|
| 193 | .D BLDARY^IBDFBKS("   FATTYPE=0") | 
|---|
| 194 | .D BLDARY^IBDFBKS("   FATTEN=0};") | 
|---|
| 195 | .D BLDARY^IBDFBKS("   Recognition = {FIXED_WIDTH=1") | 
|---|
| 196 | .D BLDARY^IBDFBKS("   OT_RECOGTYPE=HP") | 
|---|
| 197 | .D BLDARY^IBDFBKS("   };") | 
|---|
| 198 | ; | 
|---|
| 199 | ;** begin program ** | 
|---|
| 200 | I $G(ENDPGM)=2 D | 
|---|
| 201 | .D BLDARY^IBDFBKS("BEGIN = {ALPHA str;") | 
|---|
| 202 | .D BLDARY^IBDFBKS("INT conf;") | 
|---|
| 203 | .D BLDARY^IBDFBKS("INT ret;") | 
|---|
| 204 | .D BLDARY^IBDFBKS("  conf = GETCONF("_FIELD_");") | 
|---|
| 205 | .D BLDARY^IBDFBKS("  if (GETSTATUS("_FIELD_") == FIELD_BLANK) {") | 
|---|
| 206 | .D BLDARY^IBDFBKS("     ret=SETTEXT("_FIELD_",\""\"",ITOA(conf-1),FIELD_BLANK); }") | 
|---|
| 207 | .D BLDARY^IBDFBKS("if (ret) FIELDSTATUS = FIELD_ERROR;") | 
|---|
| 208 | .D BLDARY^IBDFBKS("};") | 
|---|
| 209 | .; | 
|---|
| 210 | I PKDICT'="" D BLDARY^IBDFBKS("  DICTIONARY = """_PKDICT_""";") | 
|---|
| 211 | I PICTURE'="",TYPEDATA="ALPHA" D BLDARY^IBDFBKS("  PICTURE = """_PICTURE_""";") | 
|---|
| 212 | Q | 
|---|
| 213 | HPSKIP ; If hand print field blank, skip it | 
|---|
| 214 | D ADDTOEND^IBDFBKS3("   if ((GETSTATUS(FIELDNAME) != FIELD_BLANK) && (FIELDACCEPTED == 0)) {") | 
|---|
| 215 | D ADDTOEND^IBDFBKS3("     FIELDSTATUS = FIELD_BAD;") | 
|---|
| 216 | D ADDTOEND^IBDFBKS3("     saveunrf = "_FIELD_";}") | 
|---|
| 217 | Q | 
|---|