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

BARUFEX1.m

Go to the documentation of this file.
BARUFEX1 ; IHS/SD/TPF - MAIN EXTRACT RTN FOR UFMS (CONTINUED FROM BARUFEX) ; 10/31/2008
 ;;1.8;IHS ACCOUNTS RECEIVABLE;**7,9,16,19,20,23,28**;OCT 26,2005;Build 92
 ;NEW ROUTINE -- to meet SAC size requirements  ;MRS:BAR*1.8*7
 ;Heavily modified to prevent duplicate records ;MRS:BAR*1.8*7 IM30562
 ;New functionality; only enters from single PULLSESS EP ;MRS:BAR*1.8*7 IM30562
 ;MAR 2013 P.OTTIS ADDED NEW VA billing
 ;IHS/SD/SDR 1.8*28 CR8349 HEAT293633 - Added code so ignore transactions won't transmit to UFMS.
 Q
 ;
GETDATA(TRDATE,RECORD,TOTAMT,UDUZ,SESSID) ;EP - PULL DATA FROM ONE TRANSACTION DATE/TIME
 ;Q:$D(^BARSESS(DUZ(2),"ST",TRDATE)) ;TRANSACTION HAS BEEN TRANSMITTED INDIVIDUALLY BAR*1.8*4
 Q:'$$OK(TRDATE,SESSID)             ;DON'T SEND IF ALREADY SENT;MRS:BAR*1.8*7 IM30562
 Q:'$$LCKTR(TRDATE,SESSID)          ;CAN'T LOCK THE TRANSACTION NODE
 D DATA
 LOCK -^BARTR(DUZ(2),TRDATE,6)
 Q
 ;
DATA ;LOCAL ENTRY POINT
 W "."
 K IENS,UFMSTRDT,ARCREDIT,ARDEBIT,ARBILL,UFMSBILL,TPBIEN,TPBLOC,BARACCT,TPBSTAT
 K ARCOL,ARCOLIN,ARASUFAC,ARCOLDT,TRANTYPE,UFMSTYPE,UFMSAMT,APPLYTO,BARAREA,PARNTLOC
 K PRELIV,PRELIVLM,REVERSAL,ARCRDEB,UFMSSUFC,BARREAS
 S PRELIVLM=$P($G(^BAR(90052.06,DUZ(2),DUZ(2),15)),U,5)  ;MRS:BAR*1.8*7 IM30562
 ;I DT>3070930 S PRELIVLM=3071001 I 1         ;ORIGINAL UFMS RELEASE DATE ;MRS:BAR*1.7 IM30562
 ;E  S PRELIVLM=$P($$LAST^XPDUTL("IHS ACCOUNTS RECEIVABLE",1.8),U,2)  ;FOR PRE 10-1-2007 RELEASE;MRS:BAR*1.7 IM30562
 S IENS=TRDATE_","
 S Y=TRDATE X ^DD("DD") S UFMSTRDT=Y
 S ARBILL=$$GET1^DIQ(90050.03,IENS,4,"E")      ;A/R TRANSACTIONS, BILL (A/R)
 Q:ARBILL=""                            ;SCREEN OUT TRANSACTIONS WITH NO A/R BILL
 S ARCREDIT=$$GET1^DIQ(90050.03,IENS,2,"E")    ;A/R TRANSACTIONS, CREDIT
 S ARDEBIT=$$GET1^DIQ(90050.03,IENS,3,"E")     ;A/R TRANSACTIONS, DEBIT
 S ARCRDEB=$$GET1^DIQ(90050.03,IENS,3.5,"E")   ;A/R TRANSACTIONS, CREDIT - DEBIT ;MRS:BAR*1.8*4
 I ARCRDEB=0 Q                                 ;DON'T SEND ZERO DOLLAR TX'S
 S ARBILLIN=$$GET1^DIQ(90050.03,IENS,4,"I")    ;A/R TRANSACTIONS, BILL (A/R) PTR
 S CURBLAMT=$$GET1^DIQ(90050.01,ARBILLIN_",",15,"I")   ;A/R BILL, CURRENT BILL AMOUNT   BAR*1.8*4 PER MEETING
 ;
 ;BAR*1.8*4 SCR56,58
 I CURBLAMT<0 D  Q               ;DON'T SEND NEGATIVE BALANCE TX
ERR1 .D ERR^BARUFEXU(1)
 ;
 ;BAR*1.8*4 IM26555,IM26610 ET AL SCR80 4.1.1
 S TPBDUZ2=$$GETDUZ2^BARUFEXU(ARBILLIN,UDUZ,$G(SESSID),TRDATE,ARBILL)
 Q:'TPBDUZ2
 S TPBIEN=$$GETTPB^BARUFEXU(ARBILLIN)  ;A/R BILL, 3P DUZ(2) BAR*1.8*4 IM26555,IM26610 ET AL
 Q:'TPBIEN                             ;MRS:BAR*1.8*4 SCR80 4.1.1
 I '$$IHS^BARUFUT(TPBDUZ2) D  Q        ;CHECK FOR SATELITE MRS:BAR*1.8*4 SCR80 4.1.1
 . ;;;I '$$IHSERA^BARUFUT(TPBDUZ2) D  Q        ;P.OTT CHECK FOR SATELITE MRS:BAR*1.8*4 SCR80 4.1.1
 . W !,"NON-IHS FACILITY BILL -- TRANSACTION NOT SENT FOR ",ARBILL
 ;
 S BILASUFA=$P($$GET1^DIQ(90050.01,ARBILLIN_",",9,"I"),"-")  ;A/R BILL, A/R BILLING SITE/ASUFAC BAR*1.8*4 ITEM 3 SCR58
 ;
 ;CHECK EXCLUSION TABLE (BAR v1.8 patch 3 SCR2 UFMS)
 ;IF 0 ITS IN THE EXCLUSION TABLE
 ;IF -1 THE API CAN'T FIND THE 3P BILL AND THE A/R BILL IS PROBABLY A DUPLICATE
 I $$BILL^ABMUEAPI(TPBDUZ2,TPBIEN)<1 D  Q
 .W !,"3P EXCLUDED BILL -- TRANSACTION NOT SENT FOR ",ARBILL
 ;
 S BARACCT=$$GETBACC^BARUFEXU(ARBILLIN)        ;A/R BILL, A/R ACCOUNT
 Q:'BARACCT                                    ;MRS:BAR*1.8*4
 S PARNTLOC=$$GETPLOC^BARUFEXU(ARBILLIN)       ;A/R BILL, PARENT LOCATION
 Q:'PARNTLOC                                   ;MRS:BAR*1.8*4
 S ARCOLITM=$$GET1^DIQ(90050.03,IENS,15,"E")   ;A/R TRANSACTIONS, COLLECTION ITEM
 S ARCOLB=$$GET1^DIQ(90050.03,IENS,14,"E")     ;A/R TRANSACTIONS, A/R COLLECTION BATCH
 S ARCOLIN=$$GET1^DIQ(90050.03,IENS,14,"I")    ;A/R TRANSACTIONS, A/R COLLECTION BATCH PTR
 ;
 S BARAREA=$$GET1^DIQ(9999999.06,PARNTLOC_",",.04,"I")   ;LOCATION, AREA PTR
 ;
 S D0=BARACCT
 S BARITYP=$$VALI^BARVPM(8)   ;GET 'VIP INSURER TYPE' CODE
 Q:BARITYP="I"!(BARITYP="T")  ;EXCLUDE 'INDIAN' OR 'THIRD PARTY BILLING' PER MEETING OF 5/4/2007
 ;
 ; Check 3P transmitted date
 S UFMSSUFC=$$GETTRDT^BARUFEXU(TPBDUZ2,TPBIEN)
 I UFMSSUFC="" Q    ;Not transmitted from 3P
 ;
 ;REGULAR OLD LOGIC FOR 'APPLY TO' OR ASUFACASUFAC3PIEN STRING
 ;S UFMSSUFC=$$ASUFAC^BARUFUT1(DUZ(2),TRDATE)
 ;
 S ARCOLB=$$GET1^DIQ(90051.01,ARCOLIN_",",.01,"I")    ;A/R COLLECTION BATCH, NAME
 S ARCOLDT=$$GET1^DIQ(90051.01,ARCOLIN_",",4,"I")     ;A/R COLLECTION BATCH, OPENED DATE/TIME
 S TDNDATE=$$GET1^DIQ(90051.01,ARCOLIN_",",30,"I")     ;A/R COLLECTION BATCH, TDN/DATE  ;BAR*1.8*16 IHS/SD/TPF 1/27/2010
 S TDNDATE=$$FMTE^XLFDT($P(TDNDATE,"@"),"5DZ")
 S ARCOLDT=$$FMTE^XLFDT($P(ARCOLDT,"@"),"5DZ")
 S UFMSTRDT=$$FMTE^XLFDT($P(TRDATE,"."),"5DZ")
 S TRANTYPE=$$GET1^DIQ(90050.03,IENS,101,"E")  ;A/R TRANSACTIONS, TRANSACTION TYPE
 S ADJCAT=$$GET1^DIQ(90050.03,IENS,102,"E")    ;A/R TRANSACTIONS, ADJUSTMENT CATEGORY
 ;
 ;MAIN SCREEN FOR TRANSACTIONS TO PULL
 S UFMSAMT=ARCREDIT-ARDEBIT
 I TRANTYPE="PAYMENT" D  I 1
 .S UFMSTYPE="R"
 .S UFMSSIGN=$S(UFMSAMT>0!(UFMSAMT=0):"+",1:"-")            ;keep sign
 ; IHS/SD/PKD 1.8*19 9/23/10 Include Status Change (send to Collection=993) transactions
 ; E  I TRANTYPE[("ADJUST")!(TRANTYPE[("REFUND") D  I 1
 E  I TRANTYPE[("ADJUST")!(TRANTYPE[("REFUND")!(TRANTYPE[("STATUS CHANGE"))!(TRANTYPE["993")) D  I 1
 .S UFMSTYPE="A"
 .S UFMSSIGN=$S(UFMSAMT>0!(UFMSAMT=0):"-",1:"+")            ;reverse the sign on "A" records
 E  Q
 ;Modifications to fix Transmission/Approvals dates ;and UFMSSUFC MRS:BAR*1.8*4
 ;NEW CODE FOR REVERSALS                             ;MRS:BAR*1.8*4
 ;CHECK REVERSAL DATES AND FIX IF POSSIBLE
 S BARRIPAC=$$REVERSAL^BARUFEX3()
 Q:'ARBILL
 ;
 ;MOVED IPAC SET TO HERE BECAUSE REVERSAL PROCESS CAN CHANGE IPAC  ;MRS:BAR*1.8*4
 ;S IPAC=$$GET1^DIQ(90051.1101,ARCOLITM_","_ARCOLIN_",",20,"I")  ;A/R COLLECTION BATCH, TREASURY DEPOSIT SCHEDULE NUMBER/IPAC  ;MRS:BAR*1.8*9
 S IPAC=$$GET1^DIQ(90051.1101,ARCOLITM_","_ARCOLIN_",",20)   ;A/R COLLECTION BATCH, TREASURY DEPOSIT SCHEDULE NUMBER/IPAC  ;MRS:BAR*1.8*9
 ;
 ;I IPAC["NONPAY"!(BARRIPAC["NONPAY") D  Q     ;DON'T SEND NONPAYMENTS  ;bar*1.8*4 SDR
 I UFMSTYPE="R",(IPAC["NONPAY")!(BARRIPAC["NONPAY") D  Q     ;DON'T SEND NONPAYMENTS  ;bar*1.8*4 SDR
ERR2 .D ERR^BARUFEXU(2)
 ;
 S:IPAC="" IPAC="PRE-UFMS_COLLECTIONS"  ;FUNCTION ABOVE TAKES CARE OF NULL
 S:UFMSTYPE="A" IPAC=""        ;per UFMS THE FIELD WILL BE BLANK FOR ADJUSTMENTS
 I BARRIPAC]"" S IPAC=BARRIPAC ;Re-set schedule number with original ipac
 ;
CONT ; ALL QUIT CONDITIONS HAVE BEEN MET
 ; LET'S UPDATE THE 'APPLY TO' FIELD IN THE SESSION LOG FILE
 ;
 ;KILL THE 'NOT SENT FLAG'
 I $$GET1^DIQ(90057.110102,TRDATE_","_SESSID_","_UDUZ_",",.06,"I") D
 .K DIR,DIE,DIC,DA,DR
 .S DA(2)=UDUZ
 .S DA(1)=SESSID
 .S DA=TRDATE
 .S DIE="^BARSESS(DUZ(2),"_DA(2)_",11,"_DA(1)_",2,"
 .S DR=".06///@;.07////^S X=1;.08///^S X=$G(BARFILE)"
 .D ^DIE
 .K DIR,DIE,DIC,DA,DR
 .W !!,"TRANSACTION "_TRDATE_" "_ARBILL              ;MRS:BAR*1.8*4
 .W !,"HAS BEEN SENT THAT PREVIOUSLY WAS NOT SENT"   ;MRS:BAR*1.8*4
 ;
 S REVERSAL=$P($$GET1^DIQ(90050.03,TRDATE_",",110,"I"),".")
 ;I REVERSAL='0,(REVERSAL]"") D                      ;MRS:BAR*1.8*9
 I REVERSAL'=0,(REVERSAL]"") D                       ;MRS:BAR*1.8*9
 .S UFMSTRDT=$$FMTE^XLFDT(REVERSAL,"5DZ")
 ;LETS PAD THE FIELDS
 S UFMSCOLB=$$FILLSTR^BARUFUT1(ARCOLB,149,"R"," ")   ;A/R COLLECTION BATCH NAME
 S UFMSTRDT=$$FILLSTR^BARUFUT1(UFMSTRDT,10,"R"," ")  ;A/R TRANSACTION DATE MM/DD/YYYY
 S UFMSAMT=$$FILLDOL^BARUFUT1(UFMSAMT,20,"R",0)      ;TRANSACTION AMT W/O SIGN
 S UFMSSUFC=$$DBCK(UFMSSUFC)                         ;DOUBLE CHECK/RESET IF NECESSARY
 ;S UFMSSUFC=$$FILLSTR^BARUFUT1(UFMSSUFC,20,"L"," ")  ;ASUFACAUSFAC3PIEN ;MRS:BAR*1.8*9 HEAT529
 S UFMSSUFC=$$FILLSTR^BARUFUT1(UFMSSUFC,40,"L"," ")  ;ASUFACAUSFAC3PIEN ;MRS:BAR*1.8*9 HEAT529
 S UFMSIPAC=$$FILLSTR^BARUFUT1(IPAC,20,"R"," ")      ;SCHEDULE NUMBER
 S RPMSADJ=$$FILLSTR^BARUFUT1("",50,"R"," ")         ;NOT POPULATED YET
 S RPMSAMT=$$FILLSTR^BARUFUT1("",30,"R"," ")         ;NOT POPULATED YET
 S UFMSCODT=$$FILLSTR^BARUFUT1(ARCOLDT,10,"R"," ")   ;COLLECTION BATCH DATE  ;BAR*1.8*16 IHS/SD/TPF 1/27/2010
 S TDNDATE=$$FILLSTR^BARUFUT1(TDNDATE,10,"R"," ")    ;TDN/DATE  ;BAR*1.8*16 IHS/SD/TPF 1/27/2010
 ;BEGIN BAR*1.8*4 ITEM 3 SCR58
 S UNIQUEID=$$FILLSTR^BARUFUT1(TRDATE,14,"L",0)
 I $E($TR(UFMSSUFC," "))?.A D  I 1 ;IF PRE-LIVE 'APPLY TO' THEN GET UNIQUE ID DIFFERENTLY
 .S PSUFAC=$$GETSUFAC^BARUFUT1()
 .S:PSUFAC="" PSUFAC="000000"
 .S:BILASUFA="" BILASUFA="000000"
 .S PRESUFAC=PSUFAC_BILASUFA_TPBIEN          ;ADRIAN APPROVED THE USE OF BILASUFA
 .;S PRESUFAC=$$FILLSTR^BARUFUT1(PRESUFAC,20,"L"," ") ;MRS:BAR*1.8*9 HEAT529
 .S PRESUFAC=$$FILLSTR^BARUFUT1(PRESUFAC,40,"L"," ")  ;MRS:BAR*1.8*9 HEAT529
 .S UNIQUEID=UNIQUEID_"|"_$TR(PRESUFAC," ")
 E  S UNIQUEID=UNIQUEID_"|"_$TR(UFMSSUFC," ")
 S UNIQUEID=$$FILLSTR^BARUFUT1(UNIQUEID,150,"L"," ")
 ;END
 ;
 ;BEGIN BAR*1.8*4 ITEM 3 SCR58
 ;AND MRS:BAR*1.8*7 IM30562
SET ;EP - 
 ;S ^BARUFEX($J,RECORD)=$G(UFMSTYPE)_$G(UFMSCOLB)_$G(UFMSTRDT)_$G(UFMSSIGN)_$G(UFMSAMT)_$G(UFMSSUFC)_$G(UFMSIPAC)_$G(RPMSADJ)_$G(RPMSAMT)_$G(UNIQUEID)
 I UFMSTYPE="R" S ^BARUFEX($J,RECORD)=$G(UFMSTYPE)_$G(UFMSCOLB)_$G(UFMSTRDT)_$G(UFMSSIGN)_$G(UFMSAMT)_$G(UFMSSUFC)_$G(UFMSIPAC)_$G(RPMSADJ)_$G(RPMSAMT)_$G(UNIQUEID)_$G(TDNDATE)_$G(UFMSCODT)  ;BAR*1.8*16 IHS/SD/TPF 1/27/2010
 E  S ^BARUFEX($J,RECORD)=$G(UFMSTYPE)_$G(UFMSCOLB)_$G(UFMSTRDT)_$G(UFMSSIGN)_$G(UFMSAMT)_$G(UFMSSUFC)_$G(UFMSIPAC)_$G(RPMSADJ)_$G(RPMSAMT)_$G(UNIQUEID)  ;BAR*1.8*16 IHS/SD/TPF 1/27/2010
 D UPSTR(TRDATE,BARNOW,DUZ,($P(UNIQUEID,"|",2)))           ;UDATE SESSION FILE
 ;D UPTR(TRDATE,BARNOW,BARFILE,($P(UNIQUEID,"|",2)),DUZ)     ;UPDATE TRANSACTION FILE ;MRS:BAR*1.8*9 IM30945
 D UPTR(TRDATE,SESSID,BARFILE,($P(UNIQUEID,"|",2)),DUZ)     ;UPDATE TRANSACTION FILE  ;MRS:BAR*1.8*9 IM30945
 ;END
 ;IHS/SD/PKD 3/2/11 1.8*20 
 ;   Check to set ^BARSESS(DUZ(2),USER,11,SESSID,21,n,0)
 ;   Call same code as Session being exported for the 1st time
 ;   Update with UFMS FILENAME if not already there.  Was missing for "NS" TRX's
 ;   UDUZ - Original Cashier 
 D SET^BARUFUT0(UDUZ,SESSID)
 ; END 1.8*20
 S RECORD=RECORD+1
 S UFMSAMT=UFMSSIGN_UFMSAMT
 S TOTAMT=TOTAMT+UFMSAMT
 Q
 ;
UPSTR(A,D,Z,ID) ;UPDATE 'APPLY TO' AND THE TRANSMITTED? FIELD IN THE SESSION LOG FILE ;MRS:BAR*1.8*7 IM30562
 ;PUT INTO EFFECT FOR ALL TRANSMISSION WITH PATCH 7
 ;ENTERS WITH A = TRDATE
 ;            D = TRANSMISSION DATE
 ;            Z = DUZ OF CASHIER
 ;           ID = APPLY TO/UNIQUEID
 K DIR,DIC,DIE,DR,DA
 S DA(2)=UDUZ
 S DA(1)=SESSID
 S DA=A
 S DR=".02///^S X=1"
 S DR=DR_";.03////"_Z
 S DR=DR_";.04////"_D
 S DR=DR_";.05////"_$TR(ID," ")
 S DIE="^BARSESS(DUZ(2),"_DA(2)_",11,"_DA(1)_",2,"
 D ^DIE
 Q
 ;
UPTR(A,D,F,ID,Z) ;UPDATE THE NEW FIELDS IN A/R TRANSACTION FILE      ;MRS:BAR*1.8*7 IM30562
 ;PUT INTO EFFECT WITH PATCH 7
 ;ENTERS WITH A = TRDATE
 ;            D = DATE TRANSMITTED (CAN BE EARLIER THAN TODAY)--CHANGED TO: ;MRS:BAR*1.8*9 IM30945
 ;                SESSION ID DATE/TIME      ;MRS:BAR*1.8*9 IM30945
 ;            F = UFMS FILE NAME (CAN BE NULL)
 ;           ID = APPLY TO OR UNIQUEID
 ;            Z = DUZ OF CASHIER
 K DIR,DIC,DIE,DR,DA
 S DA=A
 S DR="601////"_F                   ;UFMS FILE NAME
 S DR=DR_";602////"_D
 S DR=DR_";603////"_Z
 S DR=DR_";604////"_$TR(ID," ")     ;APPLY TO
 S DIE="^BARTR(DUZ(2),"
 D ^DIE
 Q
 ;
OK(A,B) ;CHECK A/R TRANSACTION AND SESSION FILES FOR TRANSMISSION DATES;MRS:BAR*1.8*7 IM30562
 ;PUT INTO EFFECT WITH PATCH 7
 ;ENTERS WITH A = TRDATE
 ;            B = SESSID
 N OK,TR0,S0,TRFILE,TRDT,TRDUZ,TRID,SDUZ,SDT,SID,SFILE
 S OK=0
 S TR0=$G(^BARTR(DUZ(2),A,6))      ;GET TRANSACTION TRANSMITTED INFO IF THERE
 S S0=$G(^BARSESS(DUZ(2),UDUZ,11,B,2,A,0))
 I $G(TR0)="",$G(S0)="" Q 1        ;NOT TRANSMITTED, OK TO GO
 S TRDT=$P(TR0,U,2)                ;SESSION DATE/TIME FROM TRANSACTION FILE
 S SDT=$P(S0,U,4)                  ;DATE TRANSMITTED FROM SESSION FILE
 I $P($G(^BARTR(DUZ(2),A,1)),U,12)="I" Q 0  ;ignored trans - don't send  ;bar*1.8*28 IHS/SD/SDR CR8349 HEAT293633
 I TRDT="",SDT="" Q 1              ;NOT TRANSMITTED, OK TO GO
 S TRFILE=$P(TR0,U)
 S TRDUZ=$P(TR0,U,3)
 S TRID=$P(TR0,U,4)
 S SDUZ=$P(S0,U,3)                     ;TRANSMITTED BY
 S SID=$P(S0,U,5)                      ;APPLY TO/UNIQUEID
 I TRDT]""&(SDT]"") D MSG(27,TRDT,TRDATE) Q 0    ;ALREADY SENT AND DATA IN BOTH FILES
 S SFILE=""
 S:SDUZ]"" SFILE=$P($G(^BARSESS(DUZ(2),UDUZ,11,B,21,A,0)),U,2)  ;UFMS FILE NAME
 I SDT]""&(TRDT="") D UPTR(A,B,SFILE,SDUZ,SID),MSG(27,SDT,A) Q 0 ;SET A/R TRANSACTION FILE W/INFO FROM SESSION FIELDS
 I SDT=""&(TRDT]"") D UPSTR(A,TRDT,TRDUZ,TRID),MSG(27,TRDT,A) Q 0  ;SET SESSION TRANSMITTED? FIELDS
 Q 1                          ;OK TO TRANSMIT
 ;
MSG(X,Y,Z) ;WRITE ERROR MESSAGE  MRS:BAR*1.8*9 IM30945
 W !,$P($G(^BARUFERR(X,0)),U,5)
 W " Date:"_Y_" for Transaction/Session: ",Z
 Q
 ;
LCKTR(TRDATE,SESSID) ;EP; LOCK A/R SESSION FILE
 ;
 N X
 F I=1:1:5 LOCK +^BARSESS(DUZ(2),UDUZ,11,SESSID):2 S X=$T Q:X
ERR26 I 'X W !,"NOT PROCESSING SESSION " D
 .D MSG(26,$G(TRDATE),SESSID)
 Q X
 ;
DBCK(X) ;DOUBLE CHECK UFMSSUFC
 ;ENTERS WITH TRDATE AND X = UFMSSUFC
 N Z
 S Z=$$GETTRDT^BARUFEXU(TPBDUZ2,TPBIEN)
 I X=Z Q X               ;OK
 I X'=Z D
 .W !,"WRONG SETTING FOR UFMS APPLY TO "_X
 .W !,"FOR ",TRDATE," RESET TO CORRECT "_Z
 Q Z
 ;EOR - IHS/DIT/CPC 1.8*28