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