- IBDF18A1 ;ALB/CJM/AAS - ENCOUNTER FORM - utilities for PCE ;12-AUG-94
- ;;3.0;AUTOMATED INFO COLLECTION SYS;**34,38**;APR 24, 1997
- ;
- COPYLIST(LIST,ARY,COUNT) ;
- ; -- copies the entries from LIST to @ARY, starting subscript at COUNT+1
- ;
- N SLCTN,NODE,NODE1,NODE2,TSUBCOL,GROUP,ORDER,HDR,PRNT
- ;
- D SUBCOL(LIST,.TSUBCOL) ;find the subcolumn containing the text
- ;
- S PRNT=""
- F S PRNT=$O(^IBE(357.4,"APO",LIST,PRNT)) Q:PRNT="" D
- . S GROUP=""
- . F S GROUP=$O(^IBE(357.4,"APO",LIST,PRNT,GROUP)) Q:GROUP="" D
- .. S HDR=$P($G(^IBE(357.4,GROUP,0)),"^")
- .. I HDR="BLANK" S HDR=""
- .. S COUNT=COUNT+1,@ARY@(COUNT)="^"_HDR
- .. S ORDER=""
- .. F S ORDER=$O(^IBE(357.3,"APO",LIST,GROUP,ORDER)) Q:ORDER="" D
- ... S SLCTN=0
- ... F S SLCTN=$O(^IBE(357.3,"APO",LIST,GROUP,ORDER,SLCTN)) Q:'SLCTN D
- .... S NODE=$G(^IBE(357.3,SLCTN,0))
- .... S NODE2=$G(^IBE(357.3,SLCTN,2))
- .... S NODE1=$G(^IBE(357.3,SLCTN,1,+$O(^IBE(357.3,SLCTN,1,"B",+TSUBCOL,0)),0))
- .... ; -- return placeholders as headers when use as subheader
- .... ; is yes and quit
- .... I $P(NODE,"^",2),$P(NODE,"^",7)=1 D Q
- ..... S COUNT=COUNT+1,@ARY@(COUNT)="^"_$P(NODE,"^",6)
- .... ;
- .... I $P(NODE1,"^")=TSUBCOL,$L($P(NODE1,"^",2)) S COUNT=COUNT+1,@ARY@(COUNT)=$P(NODE,"^")_"^"_$P(NODE1,"^",2)_"^^^^"_$P(NODE2,"^")_"^"_$P(NODE2,"^",3)_"^"_$P(NODE2,"^",4)_"^"_$P(NODE2,"^",2)
- .... D MODLIST
- Q
- ;
- SUBCOL(LIST,TSUBCOL) ; -- finds the subcolumn containing the text
- ; -- TSUBCOL passed by reference - used to return the subcolumn
- ; LIST is the selection list to search
- ;
- ; -- refering to the data returned by the package interface,
- ; piece 2 is usually the description
- ;
- N PI,SC
- S TSUBCOL="",SC=0
- S PI=$P($G(^IBE(357.6,+$P($G(^IBE(357.2,+LIST,0)),"^",11),0)),"^")
- ;
- F S SC=$O(^IBE(357.2,LIST,2,SC)) Q:'SC D
- .Q:$P($G(^IBE(357.2,LIST,2,SC,0)),"^",4)=2 ;is a marking area
- .I $P($G(^IBE(357.2,LIST,2,SC,0)),"^",5)=2 S TSUBCOL=$P(^(0),"^") Q
- .I TSUBCOL="",$P($G(^IBE(357.2,LIST,2,SC,0)),"^",5)>2 S TSUBCOL=$P(^(0),"^") Q ; -- see if other than data piece two is text subcolumn
- .;
- .; -- utility for selecting blanks is exception
- .I TSUBCOL="",PI="IBDF UTILITY FOR SELECTING BLANKS",$P($G(^IBE(357.2,LIST,2,SC,0)),"^",5)=1 S TSUBCOL=$P(^(0),"^") Q
- Q
- ;
- F2(ARY) ; -- filter cpt code array to find only codes beginning with 992 and asssicated headers
- ; -- Copy filtered array to from ibdtmp( to @ary@(
- ;
- N NODE,IBQUIT,COUNT
- S (COUNT,IBQUIT)=0
- ;
- ;I INTRFACE'="DG SELECT CPT PROCEDURE CODES" S @ARY=IBDTMP K IBDTMP
- ;
- S NODE="" F S NODE=$O(IBDTMP(NODE),-1) Q:NODE="" I $E(IBDTMP(NODE),1,3)=992 D ;Q:IBQUIT ;comment out the q:ibquit if want from more than 1 list
- .;
- .S @ARY@(NODE)=IBDTMP(NODE),COUNT=COUNT+1 ;this is bottom of list
- .;
- .; -- process from bottom of list to header
- .F S NODE=$O(IBDTMP(NODE),-1) Q:NODE="" D Q:IBQUIT
- ..S IBQUIT=0
- ..I $E(IBDTMP(NODE),1,3)=992 S @ARY@(NODE)=IBDTMP(NODE),COUNT=COUNT+1
- ..I $P(IBDTMP(NODE),"^",1)="" S @ARY@(NODE)=IBDTMP(NODE),IBQUIT=1,COUNT=COUNT+1
- I COUNT S @ARY@(0)=COUNT
- Q
- ;
- URH ; -- UnReferenced Headers (removal)
- ; if a header doesn't have any data under it, then remove the header
- N X,HDR
- S X=0 F S X=$O(@ARY@(X)) Q:'X D
- .I '$D(HDR),$P(@ARY@(X),"^",1)="" S HDR=X Q ;find a header
- .I $P(@ARY@(X),"^",1)="" K HDR Q ; is item under header
- .; -- patch 34 check if piece one below = null instead of positive
- .I $D(HDR),$P(@ARY@(X),"^",1)="" K @ARY@(HDR) S COUNT=COUNT-1,HDR=X ;hdr doesn't have any items, kill hdr node and reset header to next header
- .;I $D(HDR),$P(@ARY@(X),"^",1) K @ARY@(HDR) S COUNT=COUNT-1,HDR=X ;hdr doesn't have any items, kill hdr node and reset header to next header
- I $D(HDR) S X=$O(@ARY@(""),-1) I $P(@ARY@(X),"^",1)="" K @ARY@(X) S COUNT=COUNT-1,HDR=X ;last item in list is a header
- Q
- MODLIST ; return all CPT Modifiers if defined
- ;
- Q:$G(MODIFIER)'=1
- N MCOUNT,MOD
- Q:'$D(^IBE(357.3,SLCTN,3))
- S MCOUNT=0
- F MOD=0:0 S MOD=$O(^IBE(357.3,SLCTN,3,MOD)) Q:'MOD D
- . S MCOUNT=MCOUNT+1
- . S @ARY@(COUNT,"MODIFIER",MCOUNT)=$G(^IBE(357.3,SLCTN,3,MOD,0))
- S:MCOUNT>0 @ARY@(COUNT,"MODIFIER",0)=MCOUNT
- Q
- IBDF18A1 ;ALB/CJM/AAS - ENCOUNTER FORM - utilities for PCE ;12-AUG-94
- +1 ;;3.0;AUTOMATED INFO COLLECTION SYS;**34,38**;APR 24, 1997
- +2 ;
- COPYLIST(LIST,ARY,COUNT) ;
- +1 ; -- copies the entries from LIST to @ARY, starting subscript at COUNT+1
- +2 ;
- +3 NEW SLCTN,NODE,NODE1,NODE2,TSUBCOL,GROUP,ORDER,HDR,PRNT
- +4 ;
- +5 ;find the subcolumn containing the text
- DO SUBCOL(LIST,.TSUBCOL)
- +6 ;
- +7 SET PRNT=""
- +8 FOR
- SET PRNT=$ORDER(^IBE(357.4,"APO",LIST,PRNT))
- IF PRNT=""
- QUIT
- Begin DoDot:1
- +9 SET GROUP=""
- +10 FOR
- SET GROUP=$ORDER(^IBE(357.4,"APO",LIST,PRNT,GROUP))
- IF GROUP=""
- QUIT
- Begin DoDot:2
- +11 SET HDR=$PIECE($GET(^IBE(357.4,GROUP,0)),"^")
- +12 IF HDR="BLANK"
- SET HDR=""
- +13 SET COUNT=COUNT+1
- SET @ARY@(COUNT)="^"_HDR
- +14 SET ORDER=""
- +15 FOR
- SET ORDER=$ORDER(^IBE(357.3,"APO",LIST,GROUP,ORDER))
- IF ORDER=""
- QUIT
- Begin DoDot:3
- +16 SET SLCTN=0
- +17 FOR
- SET SLCTN=$ORDER(^IBE(357.3,"APO",LIST,GROUP,ORDER,SLCTN))
- IF 'SLCTN
- QUIT
- Begin DoDot:4
- +18 SET NODE=$GET(^IBE(357.3,SLCTN,0))
- +19 SET NODE2=$GET(^IBE(357.3,SLCTN,2))
- +20 SET NODE1=$GET(^IBE(357.3,SLCTN,1,+$ORDER(^IBE(357.3,SLCTN,1,"B",+TSUBCOL,0)),0))
- +21 ; -- return placeholders as headers when use as subheader
- +22 ; is yes and quit
- +23 IF $PIECE(NODE,"^",2)
- IF $PIECE(NODE,"^",7)=1
- Begin DoDot:5
- +24 SET COUNT=COUNT+1
- SET @ARY@(COUNT)="^"_$PIECE(NODE,"^",6)
- End DoDot:5
- QUIT
- +25 ;
- +26 IF $PIECE(NODE1,"^")=TSUBCOL
- IF $LENGTH($PIECE(NODE1,"^",2))
- SET COUNT=COUNT+1
- SET @ARY@(COUNT)=$PIECE(NODE,"^")_"^"_$PIECE(NODE1,"^",2)_"^^^^"_$PIECE(NODE2,"^")_"^"_$PIECE(NODE2,"^",3)_"^"_$PIECE(NODE2,"^",4)_"^"_$PIECE(NODE2,"^",2)
- +27 DO MODLIST
- End DoDot:4
- End DoDot:3
- End DoDot:2
- End DoDot:1
- +28 QUIT
- +29 ;
- SUBCOL(LIST,TSUBCOL) ; -- finds the subcolumn containing the text
- +1 ; -- TSUBCOL passed by reference - used to return the subcolumn
- +2 ; LIST is the selection list to search
- +3 ;
- +4 ; -- refering to the data returned by the package interface,
- +5 ; piece 2 is usually the description
- +6 ;
- +7 NEW PI,SC
- +8 SET TSUBCOL=""
- SET SC=0
- +9 SET PI=$PIECE($GET(^IBE(357.6,+$PIECE($GET(^IBE(357.2,+LIST,0)),"^",11),0)),"^")
- +10 ;
- +11 FOR
- SET SC=$ORDER(^IBE(357.2,LIST,2,SC))
- IF 'SC
- QUIT
- Begin DoDot:1
- +12 ;is a marking area
- IF $PIECE($GET(^IBE(357.2,LIST,2,SC,0)),"^",4)=2
- QUIT
- +13 IF $PIECE($GET(^IBE(357.2,LIST,2,SC,0)),"^",5)=2
- SET TSUBCOL=$PIECE(^(0),"^")
- QUIT
- +14 ; -- see if other than data piece two is text subcolumn
- IF TSUBCOL=""
- IF $PIECE($GET(^IBE(357.2,LIST,2,SC,0)),"^",5)>2
- SET TSUBCOL=$PIECE(^(0),"^")
- QUIT
- +15 ;
- +16 ; -- utility for selecting blanks is exception
- +17 IF TSUBCOL=""
- IF PI="IBDF UTILITY FOR SELECTING BLANKS"
- IF $PIECE($GET(^IBE(357.2,LIST,2,SC,0)),"^",5)=1
- SET TSUBCOL=$PIECE(^(0),"^")
- QUIT
- End DoDot:1
- +18 QUIT
- +19 ;
- F2(ARY) ; -- filter cpt code array to find only codes beginning with 992 and asssicated headers
- +1 ; -- Copy filtered array to from ibdtmp( to @ary@(
- +2 ;
- +3 NEW NODE,IBQUIT,COUNT
- +4 SET (COUNT,IBQUIT)=0
- +5 ;
- +6 ;I INTRFACE'="DG SELECT CPT PROCEDURE CODES" S @ARY=IBDTMP K IBDTMP
- +7 ;
- +8 ;Q:IBQUIT ;comment out the q:ibquit if want from more than 1 list
- SET NODE=""
- FOR
- SET NODE=$ORDER(IBDTMP(NODE),-1)
- IF NODE=""
- QUIT
- IF $EXTRACT(IBDTMP(NODE),1,3)=992
- Begin DoDot:1
- +9 ;
- +10 ;this is bottom of list
- SET @ARY@(NODE)=IBDTMP(NODE)
- SET COUNT=COUNT+1
- +11 ;
- +12 ; -- process from bottom of list to header
- +13 FOR
- SET NODE=$ORDER(IBDTMP(NODE),-1)
- IF NODE=""
- QUIT
- Begin DoDot:2
- +14 SET IBQUIT=0
- +15 IF $EXTRACT(IBDTMP(NODE),1,3)=992
- SET @ARY@(NODE)=IBDTMP(NODE)
- SET COUNT=COUNT+1
- +16 IF $PIECE(IBDTMP(NODE),"^",1)=""
- SET @ARY@(NODE)=IBDTMP(NODE)
- SET IBQUIT=1
- SET COUNT=COUNT+1
- End DoDot:2
- IF IBQUIT
- QUIT
- End DoDot:1
- +17 IF COUNT
- SET @ARY@(0)=COUNT
- +18 QUIT
- +19 ;
- URH ; -- UnReferenced Headers (removal)
- +1 ; if a header doesn't have any data under it, then remove the header
- +2 NEW X,HDR
- +3 SET X=0
- FOR
- SET X=$ORDER(@ARY@(X))
- IF 'X
- QUIT
- Begin DoDot:1
- +4 ;find a header
- IF '$DATA(HDR)
- IF $PIECE(@ARY@(X),"^",1)=""
- SET HDR=X
- QUIT
- +5 ; is item under header
- IF $PIECE(@ARY@(X),"^",1)=""
- KILL HDR
- QUIT
- +6 ; -- patch 34 check if piece one below = null instead of positive
- +7 ;hdr doesn't have any items, kill hdr node and reset header to next header
- IF $DATA(HDR)
- IF $PIECE(@ARY@(X),"^",1)=""
- KILL @ARY@(HDR)
- SET COUNT=COUNT-1
- SET HDR=X
- +8 ;I $D(HDR),$P(@ARY@(X),"^",1) K @ARY@(HDR) S COUNT=COUNT-1,HDR=X ;hdr doesn't have any items, kill hdr node and reset header to next header
- End DoDot:1
- +9 ;last item in list is a header
- IF $DATA(HDR)
- SET X=$ORDER(@ARY@(""),-1)
- IF $PIECE(@ARY@(X),"^",1)=""
- KILL @ARY@(X)
- SET COUNT=COUNT-1
- SET HDR=X
- +10 QUIT
- MODLIST ; return all CPT Modifiers if defined
- +1 ;
- +2 IF $GET(MODIFIER)'=1
- QUIT
- +3 NEW MCOUNT,MOD
- +4 IF '$DATA(^IBE(357.3,SLCTN,3))
- QUIT
- +5 SET MCOUNT=0
- +6 FOR MOD=0:0
- SET MOD=$ORDER(^IBE(357.3,SLCTN,3,MOD))
- IF 'MOD
- QUIT
- Begin DoDot:1
- +7 SET MCOUNT=MCOUNT+1
- +8 SET @ARY@(COUNT,"MODIFIER",MCOUNT)=$GET(^IBE(357.3,SLCTN,3,MOD,0))
- End DoDot:1
- +9 IF MCOUNT>0
- SET @ARY@(COUNT,"MODIFIER",0)=MCOUNT
- +10 QUIT