| 1 | IBDFDE22 ;ALB/AAS - AICS Data Entry, check selection rules ; 24-FEB-96
 | 
|---|
| 2 |  ;;3.0;AUTOMATED INFO COLLECTION SYS;;APR 24, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | % G ^IBDFDE
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | CHK ; -- see if rules allow for more or less than one
 | 
|---|
| 7 |  ;    rules 0 := select any number
 | 
|---|
| 8 |  ;          1 := exactly 1
 | 
|---|
| 9 |  ;          2 := at most 1
 | 
|---|
| 10 |  ;          3 := at least 1 (1 or more)
 | 
|---|
| 11 |  N I,IBDY,MATCH,OVERSAV
 | 
|---|
| 12 |  S (MATCH,OVER,OVERSAV,ASKOTHER)=0
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  ; -- check all rules for list and enforce
 | 
|---|
| 15 |  S I=0 F  S I=$O(RULE(I)) Q:I=""  D  I OVER S:OVER>OVERSAV OVERSAV=OVER
 | 
|---|
| 16 |  .;
 | 
|---|
| 17 |  .; -- find all matches for list, and qualifier
 | 
|---|
| 18 |  .S MATCH=0
 | 
|---|
| 19 |  .S IBDY=0 F  S IBDY=$O(IBDPI(IBDF("PI"),IBDY)) Q:'IBDY  I $P(IBDPI(IBDF("PI"),IBDY),"^",6)=QLFR(I) S MATCH=MATCH+1
 | 
|---|
| 20 |  .;
 | 
|---|
| 21 |  .; -- any number allowed
 | 
|---|
| 22 |  .I $G(RULE(+I))=0 D  Q
 | 
|---|
| 23 |  ..I ANS="" S OVER=0 Q  ;nothing selected, don't reask
 | 
|---|
| 24 |  ..I ANS'="" S OVER=1 Q  ;something selected, reask
 | 
|---|
| 25 |  .;
 | 
|---|
| 26 |  .; -- exactly one required
 | 
|---|
| 27 |  .I $G(RULE(+I))=1 D  Q
 | 
|---|
| 28 |  ..I MATCH>1 S OVER=2 W:'$G(IBDREDIT) !,"More than one selected, you must delete one" Q
 | 
|---|
| 29 |  ..I MATCH=1 S OVER=0 D DELQLF Q  ;exactly one selected
 | 
|---|
| 30 |  ..I MATCH<1 S OVER=1 W:'$G(IBDREDIT) !!,"A ",IOINHI,IBDASK,IOINORM," selection is required"_$S(QLFR(I)="":"",1:" for "_IOINHI_QLFR(I)_IOINORM),".",! Q
 | 
|---|
| 31 |  .;
 | 
|---|
| 32 |  .; -- at most one required
 | 
|---|
| 33 |  .I $G(RULE(+I))=2 D  Q
 | 
|---|
| 34 |  ..I MATCH>1 S OVER=2 W:'$G(IBDREDIT) !,"More than one selected, you must delete one" Q
 | 
|---|
| 35 |  ..I MATCH=1 S OVER=0 D DELQLF Q  ;exactly one selected
 | 
|---|
| 36 |  ..I ANS'="",MATCH<1 S OVER=1 ;if match = 0 thats okay but ask
 | 
|---|
| 37 |  .;
 | 
|---|
| 38 |  .; -- at least one required
 | 
|---|
| 39 |  .I $G(RULE(+I))=3 D  Q
 | 
|---|
| 40 |  ..S OVER=1
 | 
|---|
| 41 |  ..I MATCH<1 S OVER=1 W:'$G(IBDREDIT) !!,"A ",IOINHI,IBDASK,IOINORM," selection is required"_$S(QLFR(I)="":"",1:" for "_IOINHI_QLFR(I)_IOINORM),".",! Q
 | 
|---|
| 42 |  ..I MATCH>1,ANS="" S OVER=0 Q  ;more than one selected
 | 
|---|
| 43 |  ..I MATCH=1,ANS="" S OVER=0 Q  ;exactly one selected
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  S OVER=OVERSAV
 | 
|---|
| 46 |  I OVER=2 D DEL^IBDFDE1
 | 
|---|
| 47 | CHKQ Q
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 | DELQLF ; -- delete rule, qualifier
 | 
|---|
| 50 |  Q:RULE<2  ;must leave the last or only rule
 | 
|---|
| 51 |  I MATCH=1 S OVER=0 K RULE(I),QLFR(I) S RULE=RULE-1
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | RULES ; -- look at zero node, find qualifiers and selection rule
 | 
|---|
| 55 |  N Q,R,CNT
 | 
|---|
| 56 |  S RULE=$P($$CHOICE^IBDFDE2(0),"^",3),QLFR="",CNT=0
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ; -- go thru rules, if primary then make #1
 | 
|---|
| 59 |  F IBD=1:1 S ROW=$P(RULE,"::",IBD) Q:ROW=""  D
 | 
|---|
| 60 |  .S Q(IBD)=$P(ROW,";;",1),R(IBD)=$P(ROW,";;",2)
 | 
|---|
| 61 |  .I Q(IBD)="PRIMARY" D
 | 
|---|
| 62 |  ..S R(IBD)=$S(R(IBD)=3:1,R(IBD)=0:2,1:R(IBD))
 | 
|---|
| 63 |  ..S RULE(1)=R(IBD),QLFR(1)=Q(IBD),CNT=CNT+1 K R(IBD),Q(IBD)
 | 
|---|
| 64 |  S RULE=IBD-1
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ; -- make secondary #2 if primary exists, else #1
 | 
|---|
| 67 |  S IBD="" F  S IBD=$O(R(IBD)) Q:'IBD  I Q(IBD)="SECONDARY" S CNT=CNT+1,RULE(CNT)=R(IBD),QLFR(CNT)=Q(IBD) K R(IBD),Q(IBD) Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ; -- take the rest as they come
 | 
|---|
| 70 |  S IBD="" F  S IBD=$O(R(IBD)) Q:'IBD  S CNT=CNT+1,RULE(CNT)=R(IBD),QLFR(CNT)=Q(IBD)
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;F IBD=1:1 S ROW=$P(RULE,"::",IBD) Q:ROW=""  S QLFR(IBD)=$P(ROW,";;",1),RULE(IBD)=$P(ROW,";;",2) I QLFR(IBD)="PRIMARY" D
 | 
|---|
| 73 |  ;.S RULE(IBD)=$S(RULE(IBD)=3:1,RULE(IBD)=0:2,1:RULE(IBD))
 | 
|---|
| 74 |  ;S RULE=IBD-1
 | 
|---|
| 75 |  Q
 | 
|---|