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
|
---|