1 | IBDFDE4 ;ALB/AAS - AICS Manual Data Entry, process multiple choice fields ; 29-APR-96IOIN
|
---|
2 | ;;3.0;AUTOMATED INFO COLLECTION SYS;;APR 24, 1997
|
---|
3 | ;
|
---|
4 | % G ^IBDFDE
|
---|
5 | ;
|
---|
6 | MULT(RESULT,IBDF) ; -- Procedure
|
---|
7 | ; -- Manual Data entry routine for Multiple Choice Fields
|
---|
8 | ; Input : Result := call by reference, used to output results
|
---|
9 | ; IBDF("IEN") := pointer to hand print file (359.94)
|
---|
10 | ; IBDF("PI") := pointer to input package interface
|
---|
11 | ; IBDF("DFN") := pointer to patient
|
---|
12 | ; IBDF("CLINIC") := pointer to hospital location
|
---|
13 | ;
|
---|
14 | ; output: Result(n) $p1 := pointer to package interface
|
---|
15 | ;
|
---|
16 | N I,J,X,Y,ANS,DISPTXT,HDR,DIR,DIRUT,DUOUT,DTOUT,IBDX,QLFR,CHOICE,OVER
|
---|
17 | S X="IOINHI;IOINORM" D ENDR^%ZISS
|
---|
18 | S (IBQUIT,OVER)=0,(ANS,QLFR)=""
|
---|
19 | I $G(^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"),0))="" D
|
---|
20 | .D OBJLST^IBDFRPC1(.CHOICE,.IBDF)
|
---|
21 | .M ^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"))=CHOICE
|
---|
22 | .K CHOICE
|
---|
23 | .D COMPLST^IBDFDE5
|
---|
24 | I +$G(^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"),0))<1 G MULTQ
|
---|
25 | S IBDASK=$P($P($G(^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"),0)),"^",3),":")
|
---|
26 | I '$D(^TMP("IBD-ASK",$J,IBDFMIEN,IBDASK)) S ^TMP("IBD-ASK",$J,IBDFMIEN,$$UP^XLFSTR(IBDASK),IBDF("IBDF"))=""
|
---|
27 | S RULE=+$P($G(^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"),0)),"^",4)
|
---|
28 | ;
|
---|
29 | OVER ; -- ask or re-ask for selection(s) from list
|
---|
30 | IF RULE=0 S DIR("?",1)="Any Number of "_$G(IOINHI)_IBDASK_$G(IOINORM)_" allowed (including zero)."
|
---|
31 | IF RULE=1 S DIR("?",1)="Exactly one "_$G(IOINHI)_IBDASK_$G(IOINORM)_" Required."
|
---|
32 | IF RULE=2 S DIR("?",1)="At most one "_$G(IOINHI)_IBDASK_$G(IOINORM)_" allowed."
|
---|
33 | IF RULE=3 S DIR("?")="At least 1 (1 or more) "_$G(IOINHI)_IBDASK_$G(IOINORM)_" Required."
|
---|
34 | ;
|
---|
35 | S DIR("?",2)=""
|
---|
36 | S DIR("?")="Select an item from the form, enter by name or number. Enter '??' to see the choices. When editing, press enter to accept, '@' to delete, or enter a new selection."
|
---|
37 | ;
|
---|
38 | S DIR("??")="^D LST^IBDFDE41"
|
---|
39 | ;
|
---|
40 | S DIR(0)="FO^1:40^I $D(X),X="" "" K X W !!,$G(IOINHI),""Spacebar Return Not allowed!"",$G(IOINORM)"
|
---|
41 | I IBDASK[":" S $P(DIR(0),"^")="FOA"
|
---|
42 | S DIR("A")="Select "_$G(IBDASK)
|
---|
43 | D ^DIR K DIR
|
---|
44 | I $G(IBDEFLT(IBDF("PI")))'="",Y=IBDEFLT(IBDF("PI")) S Y="" ; on re-edit, accepting last entry same as entering nothing.
|
---|
45 | S ANS=$$UP^XLFSTR(Y)
|
---|
46 | I ANS="",$D(DIRUT),$G(IBDEFLT(IBDF("PI")))'="",$G(SELAST) K IBDPI(IBDF("PI"),SELAST),IBDSEL(SELAST) W " Deleted!" ;user type "@" at prompt
|
---|
47 | I ANS="" D CHK^IBDFDE42 G MCOVER
|
---|
48 | I ANS["^",ANS'="^" D G MCOVER
|
---|
49 | .S GOTO=$$UP^XLFSTR($P(ANS,"^",2))
|
---|
50 | .I GOTO="?"!(GOTO="??") X "W !!,""Valid Blocks to Jump to: "" S IBDX=0 F S IBDX=$O(^TMP(""IBD-ASK"",$J,IBDFMIEN,IBDX)) Q:IBDX="""" W !,?6,IBDX" S OVER=1 Q
|
---|
51 | .S X=$O(^TMP("IBD-ASK",$J,IBDFMIEN,GOTO))
|
---|
52 | .I X'="",X[GOTO W $E(X,$L(GOTO)+1,$L(X)) S IBDF("GOTO")=+$O(^TMP("IBD-ASK",$J,IBDFMIEN,X,""))-1,IBDREDIT=1 Q
|
---|
53 | .S IBQUIT=1
|
---|
54 | I $D(DIRUT) S IBQUIT=1 G MULTQ
|
---|
55 | S SELECT=0
|
---|
56 | ;
|
---|
57 | ;
|
---|
58 | ; -- first check for exact code matches
|
---|
59 | I $G(NUMBER(ANS)) S SELECT=$G(NUMBER(ANS)) D SEL^IBDFDE41(SELECT),CHK^IBDFDE42 G MCOVER
|
---|
60 | ;
|
---|
61 | ; -- check for exact text matches
|
---|
62 | S ARRAY="^TMP(""IBD-LTEXT"",$J,IBDFMIEN,IBDF(""PI""),IBDF(""IEN""))"
|
---|
63 | I $G(@ARRAY@(ANS,1)),'$O(@ARRAY@(ANS,1)) S SELECT=@ARRAY@(ANS,1) D SEL^IBDFDE41(SELECT),CHK^IBDFDE42 G MCOVER
|
---|
64 | I $G(@ARRAY@(ANS,1)) D I $G(SELECT) D SEL^IBDFDE41(SELECT),CHK^IBDFDE42 G MCOVER
|
---|
65 | .; -- more than one description the same
|
---|
66 | .S SELECT=$$PARTLST^IBDFDE41(ARRAY,ANS,ANS)
|
---|
67 | ;
|
---|
68 | ; -- next check for paritial text answers
|
---|
69 | S NEXT=$O(@ARRAY@(ANS)) D I SELECT D SEL^IBDFDE41(SELECT),CHK^IBDFDE42 G MCOVER
|
---|
70 | .Q:NEXT=""!($E(NEXT,1,$L(ANS))'=ANS)
|
---|
71 | .I $O(@ARRAY@(NEXT,1)) S SELECT=$$PARTLST^IBDFDE41(ARRAY,NEXT,ANS) Q
|
---|
72 | .S NEXT1=$O(@ARRAY@(NEXT)) I $E(NEXT1,1,$L(ANS))=ANS S SELECT=$$PARTLST^IBDFDE41(ARRAY,NEXT,ANS) Q ;Not Unique answer
|
---|
73 | .W $E(NEXT,($L(ANS)+1),$L(NEXT))
|
---|
74 | .S SELECT=$G(@ARRAY@(NEXT,1))
|
---|
75 | ;
|
---|
76 | I ANS'="" W " ?? ",$C(7),"Not Found" G OVER
|
---|
77 | ;
|
---|
78 | MCOVER ;
|
---|
79 | G:OVER OVER
|
---|
80 | ;
|
---|
81 | MULTQ ;
|
---|
82 | K ^TMP("IBD-LST",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"))
|
---|
83 | K ^TMP("IBD-LTEXT",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"))
|
---|
84 | K ^TMP("IBD-LCODE",$J,IBDFMIEN,IBDF("PI"),IBDF("IEN"))
|
---|
85 | K ^TMP("IB",$J,"INTERFACES")
|
---|
86 | K IBDF("OTHER"),ASKOTHER
|
---|
87 | Q
|
---|
88 | ;
|
---|
89 | ASKYN(DIR) ; -- input dir
|
---|
90 | N ANS,X
|
---|
91 | D ^DIR
|
---|
92 | I $G(IBDREDIT),Y=$G(DIR("B")) S ANS=DIR("B") G ASKYNQ
|
---|
93 | K DIR
|
---|
94 | S ANS=$$UP^XLFSTR(Y)
|
---|
95 | I ANS="" G ASKYNQ
|
---|
96 | I ANS["^",ANS'="^" D G ASKYNQ
|
---|
97 | .S GOTO=$$UP^XLFSTR($P(ANS,"^",2))
|
---|
98 | .S X=$O(^TMP("IBD-ASK",$J,IBDFMIEN,GOTO))
|
---|
99 | .;I GOTO="?"!(GOTO="??") X "W !!,""Valid Blocks to Jump to: "" S IBDX=0 F S IBDX=$O(^TMP(""IBD-ASK"",$J,IBDFMIEN,IBDX)) Q:IBDX="""" W !,?6,IBDX" S OVER=1 Q
|
---|
100 | .I X'="",X[GOTO W $E(X,$L(GOTO)+1,$L(X)) S IBDF("GOTO")=+$O(^TMP("IBD-ASK",$J,IBDFMIEN,X,""))-1,IBDREDIT=1 Q
|
---|
101 | .S IBQUIT=1
|
---|
102 | I $D(DIRUT) S IBQUIT=1
|
---|
103 | ASKYNQ Q $G(ANS)
|
---|
104 | ;
|
---|
105 | Q
|
---|
106 | TEST ;
|
---|
107 | S IBDFMIEN=9999
|
---|
108 | S IBDF("APPT")=2970331.1014
|
---|
109 | S IBDF("CLINIC")=300
|
---|
110 | S IBDF("DFN")=7169761
|
---|
111 | S IBDF("FORM")=33154
|
---|
112 | S IBDF("FRMDEF")=747
|
---|
113 | S IBDF("IBDF")=9
|
---|
114 | S IBDF("IEN")=213
|
---|
115 | S IBDF("TYPE")="MC"
|
---|
116 | S IBDF("PI")=92
|
---|
117 | D MULT(.RESULT,.IBDF)
|
---|
118 | Q
|
---|