Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BQIGPORD

BQIGPORD.m

Go to the documentation of this file.
  1. BQIGPORD ;VNGT/HS/BEE-Group Order Entry ; 17 Jun 2011 12:38 PM
  1. ;;2.3;ICARE MANAGEMENT SYSTEM;;Apr 18, 2012;Build 59
  1. ;
  1. ORD(DATA,DFN,PARMS) ;EP -- BQI GROUP ORDER ENTRY
  1. ;
  1. NEW UID,II,HDR,IX,LIST,PC,LST,ORDTEXT,OUTLST,BQIDX,VFIEN
  1. NEW BQIORD,BQISTDT,BQITEXT,BQIPROV,BQILOC,ORDITM,ORDNAM,BQ
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BQIGPORD",UID))
  1. K @DATA
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BQIGPORD D UNWIND^%ZTER" ; SAC 2006 2.2.3.3.2
  1. ;
  1. ;Define Header
  1. S HDR="T00001RESULT^T00050ERROR_MESSAGE^I00010DFN^I00010ORDER_NUMBER"_$C(30)
  1. S @DATA@(II)=HDR
  1. ;
  1. S VFIEN=$O(^BQI(90506.3,"B","Group Order Entry",""))
  1. I VFIEN="" S BMXSEC="RPC Call Failed: Group Order Entry" Q
  1. ;
  1. S DFN=$G(DFN,"")
  1. ;
  1. S PARMS=$G(PARMS,"")
  1. I PARMS="" D
  1. . N LIST,BN
  1. . S LIST="",BN=""
  1. . F S BN=$O(PARMS(BN)) Q:BN="" S LIST=LIST_PARMS(BN)
  1. . K PARMS
  1. . S PARMS=LIST
  1. . K LIST
  1. ;
  1. ;Pull Parameter Data
  1. F BQ=1:1:$L(PARMS,$C(28)) D Q:$G(BMXSEC)'=""
  1. . N CHIEN,FIELD,NAME,PDATA,PFIEN,PTYP,VALUE
  1. . S PDATA=$P(PARMS,$C(28),BQ) Q:PDATA=""
  1. . S NAME=$P(PDATA,"=",1) I NAME="" Q
  1. . S VALUE=$P(PDATA,"=",2,99)
  1. . S PFIEN=$O(^BQI(90506.3,VFIEN,10,"AC",NAME,""))
  1. . I PFIEN="" S BMXSEC=NAME_" not a valid parameter for this update" Q
  1. . S FIELD=$P($G(^BQI(90506.3,VFIEN,10,PFIEN,3)),U,1)
  1. . I VALUE="",FIELD'=".001" S VALUE="@"
  1. . S PTYP=$P($G(^BQI(90506.3,VFIEN,10,PFIEN,1)),U,1)
  1. . I PTYP="D"!(PTYP="A") S VALUE=$$DATE^BQIUL1(VALUE)
  1. . I PTYP="C" D
  1. .. S CHIEN=$O(^BQI(90506.3,VFIEN,10,PFIEN,5,"B",VALUE,"")) I CHIEN="" Q
  1. .. S VALUE=$P(^BQI(90506.3,VFIEN,10,PFIEN,5,CHIEN,0),U,2)
  1. . S @NAME=VALUE
  1. ;
  1. ;Set up information for API call
  1. S LST(1,"DFN")=DFN
  1. S LST(1,"PRV")=BQIPROV
  1. S:$G(BQIDX)]"" LST(1,"CLN")=BQIDX
  1. ;
  1. S ORDITM=$$GET1^DIQ(90621,BQIORD_",",.11,"I") G DONE:ORDITM=""
  1. S ORDNAM=$$GET1^DIQ(101.43,ORDITM_",",.01,"E")
  1. ;
  1. S ORDTEXT(1,0)=ORDNAM_" created from Group Order entry in iCare."
  1. ;
  1. ;Parse out incoming text
  1. N CNT,I,LN,CH,LINE
  1. S CNT=1 F I=1:1 Q:$L(BQITEXT)=0 D
  1. . S LN=$E(BQITEXT,1,80)
  1. . F CH=$L(LN):-1:1 I $E(LN,CH)=" " Q
  1. . I $L(BQITEXT)<81 S BQITEXT="",LINE=LN
  1. . E I CH>1 S BQITEXT=$E(BQITEXT,CH+1,999999),LINE=$E(LN,1,CH-1)
  1. . E S BQITEXT=$E(BQITEXT,81,999999),LINE=LN
  1. . S CNT=CNT+1,ORDTEXT(CNT,0)=LINE
  1. S ORDTEXT(0)="^100.0451^"_CNT_U_CNT_U_DT_U_U
  1. K CNT,I,LN,CH,LINE
  1. ;
  1. ;Check for duplicate orders
  1. ;
  1. ;Pull all active orders
  1. D AGET^ORWORR("",DFN,2,"","","","")
  1. I $D(^TMP("ORR",$J)) D
  1. . ;
  1. . ;Look for duplicate order
  1. . NEW ORLIST,CNT,ORD
  1. . S ORLIST="" F S ORLIST=$O(^TMP("ORR",$J,ORLIST)) Q:ORLIST="" D Q:$D(OUTLST)
  1. .. S CNT=.1 F S CNT=$O(^TMP("ORR",$J,ORLIST,CNT)) Q:'CNT D Q:$D(OUTLST)
  1. ... S ORD=$P($P($G(^TMP("ORR",$J,ORLIST,CNT)),U),";")
  1. ... I $D(^OR(100,ORD,.1,"B",ORDITM)) S OUTLST(1)="^^DUPLICATE ORDER - ORIGINAL ORDER #"_ORD
  1. . K ^TMP("ORR",$J)
  1. ;
  1. ;Call Group Order API
  1. I '$D(OUTLST) D GRPORD^BEHOOGP(.OUTLST,.LST,ORDITM,BQISTDT,BQILOC,"",.ORDTEXT)
  1. ;
  1. ;Return Success/Failure Information
  1. S II=$G(II)+1
  1. I $P($G(OUTLST(1)),U,3)="ORDER CREATED" S @DATA@(II)="1^"_U_DFN_U_$P(OUTLST(1),U,2)_$C(30)
  1. I $G(OUTLST(0))'="" S @DATA@(II)="0^"_$G(OUTLST(0))_U_DFN_U_$C(30)
  1. ;
  1. DONE ;
  1. S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. MACT(DATA,FAKE) ;EP -- BQI CHK SCR MAMM STS
  1. NEW UID,II,ACTIVE,DIC,X,IEN,Y
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S DATA=$NA(^TMP("BQIGPORD",UID))
  1. K @DATA
  1. ;
  1. S II=0
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BQIGPORD D UNWIND^%ZTER" ; SAC 2006 2.2.3.3.2
  1. S @DATA@(II)="T00001ACTIVE"_$C(30)
  1. ;
  1. S ACTIVE="Y"
  1. S DIC="^ORD(101.43,",DIC(0)="X"
  1. S X="SCREENING MAMMOGRAM"
  1. D ^DIC
  1. S IEN=+Y
  1. I IEN="-1" S ACTIVE="N" G XMACT
  1. ;
  1. ;Check if INACTIVE
  1. S X=$$GET1^DIQ(101.43,IEN_",",.1,"I")
  1. I X]"",X<DT S ACTIVE="N"
  1. ;
  1. XMACT S II=II+1,@DATA@(II)=ACTIVE_$C(30)
  1. S II=II+1,@DATA@(II)=$C(31)
  1. Q
  1. ;
  1. ERR ;
  1. D ^%ZTER
  1. NEW Y,ERRDTM
  1. S Y=$$NOW^XLFDT() X ^DD("DD") S ERRDTM=Y
  1. S BMXSEC="Recording that an error occurred at "_ERRDTM
  1. I $D(II),$D(DATA) S II=II+1,@DATA@(II)=$C(31)
  1. Q