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

ABSPOSPX.m

Go to the documentation of this file.
  1. ABSPOSPX ; IHS/FCS/DRS - automatic writeoffs - criteria on form ; [ 09/12/2002 10:18 AM ]
  1. ;;1.0;PHARMACY POINT OF SALE;**3**;JUN 21, 2001;Build 38
  1. Q
  1. ; Continuation of ABSPOSPW - invoked indirectly by ^DIP
  1. ;
  1. INCLUDE() ; should D0 be included?
  1. S NINCLUDE=NINCLUDE+1
  1. I NINCLUDE#100=0 W "." W:$X>70 !
  1. N PCNDFN S PCNDFN=D0
  1. N VSTDFN S VSTDFN=$P($G(^ABSBITMS(9002302,PCNDFN,1,1,0)),U,3)
  1. N WATCH
  1. I +$H=58211,PCNDFN=131154!(PCNDFN=130550) S WATCH=PCNDFN
  1. I $G(WATCH) W "Watching ",PCNDFN,": "
  1. I $G(WATCH) W 4," "
  1. I '$$INC4 Q 0 ; age of account
  1. I $G(WATCH) W 5," "
  1. I '$$INC5 Q 0 ; date of service
  1. I $G(WATCH) W 1," "
  1. I '$$INC1 Q 0 ; insurers
  1. I $G(WATCH) W 2," "
  1. I '$$INC2 Q 0 ; A/R type
  1. I $G(WATCH) W 3," "
  1. I '$$INC3 Q 0 ; balance, balance % of original
  1. I $G(WATCH) W 6," "
  1. I '$$INC6 Q 0 ; clinic
  1. I $G(WATCH) W 7," "
  1. I '$$INC7 Q 0 ; primary diagnosis
  1. I $G(WATCH) W 10," "
  1. I '$$INC10 Q 0 ; any payments
  1. I $G(WATCH) W "PASSED!",!
  1. Q 1
  1. INC1() ; insurer
  1. I $P(PARAMS,U)=1 Q 1 ; all insurers
  1. N X S X=$P(^ABSBITMS(9002302,PCNDFN,0),U,3) ; AUDIT INSURER
  1. N IEN S IEN=$$INSIEN
  1. N ONLIST I IEN S ONLIST=$D(PARAMS("INS","B",IEN))
  1. E S ONLIST=0
  1. I $P(PARAMS,U)=2 Q ONLIST ; only those on the list
  1. I $P(PARAMS,U)=3 Q 'ONLIST ; except those on the list
  1. D IMPOSS^ABSPOSUE("DB,P","TI","Bad PARAMS="_PARAMS,"piece 1","INC1",$T(+0))
  1. Q
  1. INSIEN() ; Insurer IEN
  1. N X
  1. I '$D(^ABSBITMS(9002302,PCNDFN,"INSCOV1")) G OLD7
  1. N Y S Y=$P(^ABSBITMS(9002302,PCNDFN,0),U,4) ; internal audit insurer
  1. I 'Y S Y=1 ; default to #1
  1. ; INSIEN for new-style INSCOV1
  1. ; But you can't always trust the internal audit insurer! - so $GET it
  1. S X=$P($G(^ABSBITMS(9002302,PCNDFN,"INSCOV1",Y,1)),U,2)
  1. I X Q X
  1. ; not there? try ^AUTNINS name lookup
  1. S X=$P(^ABSBITMS(9002302,PCNDFN,0),U,3)
  1. I X="" Q X
  1. Q $O(^AUTNINS("B",X,0))
  1. OLD7 ; INSIEN for old-style INSCOV
  1. N Z S Z=$O(^ABSBITMS(9002302,PCNDFN,"INSCOV",Y,""))
  1. I Z="" Q ""
  1. N Z0 S Z0=^ABSBITMS(9002302,PCNDFN,"INSCOV",Y,Z,0)
  1. I Z="PRVT"!(Z="CAID") S X=$P(Z0,U,5)
  1. E I Z="CARE"!(Z="RR") S X=$P(Z0,U,4) ; not sure about the RR
  1. E S X=""
  1. Q X
  1. INC2() ; a/r type
  1. I $P(PARAMS,U,2)=1 Q 1 ; all a/r types
  1. N X S X=$P(^ABSBITMS(9002302,PCNDFN,9),U,2) ; PCN TYPE
  1. N IEN S IEN=$O(^ABSBTYP("B",X,0))
  1. I 'IEN D IMPOSS^ABSPOSUE("DB,P","Bad A/R TYPE "_X,,"INC2",$T(+0))
  1. N ONLIST S ONLIST=$D(PARAMS("ARTYP","B",IEN))
  1. I $P(PARAMS,U)=2 Q ONLIST ; only those on the list
  1. I $P(PARAMS,U)=3 Q 'ONLIST ; except those on the list
  1. D IMPOSS^ABSPOSUE("DB,P","TI","Bad PARAMS="_PARAMS,"piece 1","INC1",$T(+0))
  1. Q ""
  1. INC6() ; clinic
  1. I $P(PARAMS,U,6)=1 Q 1 ; all clinics
  1. I VSTDFN="" Q 1 ; should never happen
  1. N X S X=$P(^AUPNVSIT(VSTDFN,0),U,8)
  1. S ONLIST=$D(PARAMS("CLINIC","B",X))
  1. I $P(PARAMS,U,6)=2 Q ONLIST
  1. I $P(PARAMS,U,6)=3 Q 'ONLIST
  1. D IMPOSS^ABSPOSUE("DB,P","TI","Bad PARAMS="_PARAMS,"piece 6","INC6",$T(+0))
  1. Q ""
  1. INC7() ; primary diagnosis
  1. I $P(PARAMS,U,7)=1 Q 1 ; any diagnosis
  1. N X S X=$$DIAG
  1. I 'X S ONLIST=0
  1. E S ONLIST=$D(PARAMS("DIAG","B",X))
  1. I $P(PARAMS,U,7)=2 Q ONLIST
  1. I $P(PARAMS,U,7)=3 Q 'ONLIST
  1. D IMPOSS^ABSPOSUE("DB,P","TI","Bad PARAMS="_PARAMS,"pieces 7","INC7",$T(+0))
  1. Q ""
  1. DIAG() ; find primary diagnosis for VSTDFN
  1. I VSTDFN="" Q 1 ; should never happen
  1. N X S X=$O(^ABSBV(VSTDFN,"FSICD9",0)) ; in V VISIT file?
  1. I X Q $P(^ABSBV(VSTDFN,"FSICD9",X,0),U)
  1. ; else look in V POV file for first one marked primary
  1. N IEN S IEN=0
  1. F S IEN=$O(^AUPNVPOV("AD",VSTDFN,IEN)) Q:'IEN D Q:X
  1. . I $P(^AUPNVPOV(IEN,0),U,12)="P" S X=$P(^(0),U)
  1. Q X
  1. INC10() ; include only if there's been a payment by current insurer
  1. ; useful, for example, if you want to write off Medicaid RX
  1. ; after getting whatever Medicaid paid
  1. N TYPE S TYPE=$P(PARAMS,U,11)
  1. I $G(WATCH) D ZWRITE^ABSPOS("TYPE")
  1. I 'TYPE Q 1 ; don't consider payments record
  1. I TYPE=1 N INSIEN S INSIEN=$$INSIEN ; insist on payment from this ins
  1. I $G(WATCH) D ZWRITE^ABSPOS("INSIEN")
  1. N RET S RET=0
  1. N X S X=0
  1. F S X=$O(^ABSBITMS(9002302,PCNDFN,7,X)) Q:'X D Q:RET
  1. . I $G(WATCH) W "Examining payment node #",X,!
  1. . I TYPE=2 S RET=1 Q ; yes, a payment, and we don't care who paid
  1. . I $P(^ABSBITMS(9002302,PCNDFN,7,X,0),U,3)=INSIEN S RET=1
  1. I $G(WATCH) D ZWRITE^ABSPOS("RET")
  1. Q RET
  1. INC3() ; balance
  1. N MIN,MAX,PCT
  1. S MIN=$P(PARAMS,U,3),MAX=$P(PARAMS,U,4),PCT=$P(PARAMS,U,9)/100
  1. I MIN="",MAX="",PCT="" Q 1
  1. N BAL S BAL=$P(^ABSBITMS(9002302,PCNDFN,3),U)
  1. N ORIG S ORIG=$P(^ABSBITMS(9002302,PCNDFN,1,1,0),U,4)
  1. I $G(WATCH) D
  1. . D ZWRITE^ABSPOS("MIN","MAX","PCT","BAL")
  1. . I ORIG W "BAL/ORIG=",BAL/ORIG,!
  1. I 'BAL Q 0 ; shouldn't happen; zero balance account s/b inactive
  1. I MIN]"",BAL<MIN Q 0
  1. I MAX]"",BAL>MAX Q 0
  1. I 'PCT Q 0
  1. I 'ORIG Q 1 ; impossible?
  1. N X S X=BAL/ORIG S:X<0 X=-X S:X>1 X=1
  1. Q X'>PCT
  1. INC4() ; aging date
  1. N X S X=$G(PARAMS("AGING DATE < THIS")) Q:'X 1
  1. N Y S Y=$P($G(^ABSBITMS(9002302,PCNDFN,"AGE")),U) Q:'Y 1
  1. Q Y<X ; true if account's aging date < specified date
  1. INC5() ; date of service
  1. N X S X=$P(PARAMS,U,8) Q:'X 1 ; dates of service prior to this
  1. I VSTDFN="" Q 1 ; should never happen
  1. N Y S Y=$P($G(^AUPNVSIT(VSTDFN,0)),U) Q:'Y 1
  1. Q Y<X ; true if date of service < specified date
  1. ACTIVBAT() ;EP - returns true if there's an active batch outstanding
  1. ; from this program's operation
  1. N X S X=$P($G(^ABSP(9002313.99,1,"WRITEOFF-SCREEN BATCH")),U)
  1. I X="" Q "" ; no batch in progress (first time program has been run)
  1. I '$D(^ABSBPMNT(X)) Q "" ; batch is undefined?!
  1. N Y S Y=$P(^ABSBPMNT(X,0),U,5) ; batch status
  1. I Y="R"!(Y="C") Q "" ; released or canceled, okay
  1. Q X ; return batch number