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

IBCNIUF.m

Go to the documentation of this file.
  1. IBCNIUF ;AITC/TAZ - IIU FILER ;01/14/21 2:23p.m.
  1. ;;2.0;INTEGRATED BILLING;**687**;21-MAR-94;Build 88
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;IA/ICR #2990 and #10112 Used in tag TFL
  1. ;
  1. Q
  1. ;
  1. LOC(DFN,INSCOIEN,IEN312,AUTO,BUFFER,SOI,ICB) ; Entry point to file locally generated data
  1. ;INPUT:
  1. ; DFN - Pointer to Patient file
  1. ; IEN312 - Pointer to the INSURANCE TYPE record
  1. ; AUTO - AUTO UPDATE Yes/No
  1. ; BUFFER - Pointer to Buffer File
  1. ; SOI - Source of Information
  1. ; ICB - ICB processed buffer Yes/No
  1. ; ICB was set in routine IBCNICB. It will be used to set ICB PROCESSED BUFFER (365.19,1.08)
  1. ;
  1. ;OUTPUT:
  1. ; None
  1. ;
  1. N DATA,IBDFDA,IEN,IENS,PIEN,SITE,SITES
  1. ;
  1. ;If Manila and not participating in IIU, quit and don't file into #365.19
  1. I (+$P($$SITE^VASITE,U,3)=358),$$GET1^DIQ(350.9,"1,",51.33,"I")="N" G LOCQ
  1. ;
  1. ;Quit if the IIU MASTER SWITCH is off
  1. I $$GET1^DIQ(350.9,1_",",53.01,"I")'="Y" G LOCQ
  1. ;
  1. S PIEN=$$GET1^DIQ(36,INSCOIEN_",",3.1,"I") ; payer IEN associated with ins company
  1. S IENS=IEN312_","_DFN_","
  1. ;
  1. I '$$OKTOFILE G LOCQ ;Not a valid policy for IIU
  1. ;
  1. ;Set Header Nodes
  1. S DATA(.01)=DFN
  1. S DATA(.02)=$$NOW^XLFDT
  1. S DATA(.03)="S"
  1. ;
  1. ;Set SENDER nodes
  1. S DATA(1.01)="W" ;SENDER STATUS
  1. S DATA(1.02)=PIEN ;Pointer to the Payer File (#365.12)
  1. S DATA(1.03)=IEN312 ;Pointer to INSURANCE TYPE subfile (#2.312)
  1. S DATA(1.04)=$G(AUTO,0) ;Auto Updated Yes/No
  1. S DATA(1.05)=$G(BUFFER) ;Pointer to the INSURANCE VERIFICATION PROCESSOR File (#355.33)
  1. I $G(AUTO) D
  1. . S DATA(1.06)=$$GET1^DIQ(2.312,IENS,7.02,"I") ;Subscriber ID to be sent to remote facility
  1. . S DATA(1.07)=$$GET1^DIQ(2.312,IENS,.2,"I") ;Coordination of Benefits to be sent to remote facility
  1. S DATA(1.08)=+$G(ICB) ;ICB Processed Buffer Yes/No
  1. ;
  1. ; File Main Level Data
  1. S IEN=$$ADD^IBDFDBS(365.19,,.DATA)
  1. K DATA
  1. ;
  1. ; File VAMC Level
  1. S SITE=0
  1. F S SITE=$O(SITES(SITE)) Q:'SITE D
  1. . N X
  1. . S IBDFDA(1)=IEN
  1. . S DATA(.01)=SITE
  1. . S DATA(.02)="R"
  1. . S DATA(.03)=$$NOW^XLFDT
  1. . S X=$$ADD^IBDFDBS(365.191,.IBDFDA,.DATA)
  1. . K DATA
  1. ;
  1. ;Send to remote site in real time
  1. D RT^IBCNIUHL(IEN)
  1. ;
  1. LOCQ ;Exit Local processing
  1. Q
  1. ;====================================
  1. OKTOFILE() ; Confirm that we can/should send to remote facilities
  1. N OK
  1. S OK=0
  1. K SITES ;array of sites that will receive the verified active policy
  1. ;
  1. ;Check Insurance Co
  1. I "^VACAA-WNR^CAMPLEJEUNE-WNR^IVF-WNR^VHADIRECTIVE1029WNR"[$TR($$GET1^DIQ(36,INSCOIEN_",",.01,"E")," ","") G OKTOFILEQ
  1. ;
  1. ;Check Payer
  1. I '$$PYRAPP^IBCNEUT5("IIU",PIEN) G OKTOFILEQ ;Payer is not IIU
  1. I $$PYRDEACT^IBCNINSU(PIEN) G OKTOFILEQ ;Payer is Deactivated
  1. ;
  1. ;Check Patient
  1. I $$GET1^DIQ(2,DFN_",",.6,"I") G OKTOFILEQ ;Is a test patient
  1. I $E($$GET1^DIQ(2,DFN_",",.09,"I")="P") G OKTOFILEQ ;Has Pseudo SSN
  1. ;
  1. ;Check Policy
  1. I ",INTERFACILITY INS UPDATE,INSURANCE IMPORT,"[(","_SOI_",") G OKTOFILEQ ;Source of Information is IMPORT OR IIU
  1. I '$$ACTIVE() G OKTOFILEQ
  1. I '$$TOP() G OKTOFILEQ
  1. ;
  1. ;Check Sites
  1. S SITES=$$TFL(DFN,.SITES) ;Build list of remote facilities visited.
  1. I 'SITES G OKTOFILEQ ;No sites were visited
  1. ;
  1. ;IIU days before sending violated
  1. ; check the combination of patient, policy, and facility we sent it to
  1. N DEST,DESTDT,DESTIEN,DESTSTAT,IEN,SHAREDT
  1. ; TODAY - IIU MIN DAYS BEFORE SHARING (#53.04) to determine if it is too soon
  1. S SHAREDT=$$FMADD^XLFDT(DT,-$$GET1^DIQ(350.9,1_",",53.04,"I"))
  1. I $D(^IBCN(365.19,"D",DFN,IEN312)) D
  1. . S IEN="" F S IEN=$O(^IBCN(365.19,"D",DFN,IEN312,IEN)) Q:'IEN D
  1. . . S DESTIEN=0 F S DESTIEN=$O(^IBCN(365.19,IEN,1.1,DESTIEN)) Q:'DESTIEN D
  1. . . . S DEST=$$GET1^DIQ(365.191,DESTIEN_","_IEN_",",.01,"I")
  1. . . . S DESTSTAT=$$GET1^DIQ(365.191,DESTIEN_","_IEN_",",.02,"I")
  1. . . . I DESTSTAT="R",$D(SITES(DEST)) K SITES(DEST) S SITES=SITES-1 Q ; waiting to send to site
  1. . . . S DESTDT=$P($$GET1^DIQ(365.191,DESTIEN_","_IEN_",",.03,"I"),".") ;date only
  1. . . . ;
  1. . . . ; SUBTRACT IIU MIN DAYS BEFORE SHARING (#53.04) from Today. If the date is less than DATE/TIME CREATED (#.02) it is too soon.
  1. . . . I SHAREDT<DESTDT K SITES(DEST) S SITES=SITES-1
  1. ;
  1. I 'SITES G OKTOFILEQ ;No sites to send to
  1. ;
  1. S OK=1
  1. ;
  1. OKTOFILEQ ;
  1. Q OK
  1. ;
  1. TFL(DFN,IBT,DIR) ; returns treating facility list (pass IBT by reference)
  1. ;INPUT:
  1. ; DFN - Patient's IEN in the Patient File
  1. ; IBT - Array of visited facilities
  1. ; DIR - Direction of data flow
  1. ; S = Sending
  1. ; R = Receiving
  1. ;OUTPUT:
  1. ; IBT - Array of sites
  1. ; Can have multiple entries for Sending
  1. ; Will have 1 entry for receiving
  1. ; supported references IA #2990 and #10112, value returned is count
  1. ; needed to new Y because VAFCTFU1 will kill it
  1. N FTLIEN,IBC,IBZ,IBS,IBFT,Y
  1. ;
  1. K IBT
  1. S DIR=$G(DIR,"S")
  1. D TFL^VAFCTFU1(.IBZ,DFN) Q:-$G(IBZ(1))=1 0
  1. ; Setup current site and initialize variables
  1. S IBS=+$P($$SITE^VASITE,"^",3),(IBZ,IBC)=0
  1. ; Return only remote facilities of certain types:
  1. S IBFT="^VAMC^"
  1. F S IBZ=$O(IBZ(IBZ)) Q:IBZ<1 I +IBZ(IBZ)>0 D
  1. . I (+IBZ(IBZ)=358),$$GET1^DIQ(350.9,"1,",51.33,"I")="N" Q ;Manila is not participating
  1. . S FTLIEN=$$FIND1^DIC(4,,"X",+IBZ(IBZ),"D") I 'FTLIEN Q
  1. . ;If it is the current site and Sending, Q. If receiving set array.
  1. . I +IBZ(IBZ)=IBS Q:(DIR'="R") S IBT(FTLIEN)=IBZ(IBZ),IBC=IBC+1 Q
  1. . ; build array for sending sites
  1. . I DIR="R" Q
  1. . I $$INSTS^IBCNINSL(FTLIEN) S IBT(FTLIEN)=IBZ(IBZ),IBC=IBC+1
  1. Q IBC
  1. ;
  1. ACTIVE() ;Check active policy status
  1. N OK,EFFDT,EXPDT
  1. S OK=0
  1. S EFFDT=$$GET1^DIQ(2.312,IENS,8,"I")
  1. S EXPDT=$$GET1^DIQ(2.312,IENS,3,"I")
  1. I 'EFFDT G ACTIVEQ
  1. I EXPDT,(EXPDT<DT) G ACTIVEQ
  1. S OK=1
  1. ;
  1. ACTIVEQ ;
  1. Q OK
  1. ;
  1. TOP() ;Screen Type of Plan
  1. N GRPIEN,OK,TOP
  1. S OK=0
  1. S GRPIEN=$$GET1^DIQ(2.312,IENS,.18,"I")
  1. S TOP=$$GET1^DIQ(355.3,GRPIEN_",",.09,"E")
  1. I "^ACCIDENT AND HEALTH INSURANCE^AUTOMOBILE^AVIATION TRIP INSURANCE^CATASTROPHIC INSURANCE^"[("^"_TOP_"^") G TOPQ
  1. I "^COINSURANCE^DUAL COVERAGE^INCOME PROTECTION (INDEMNITY)^KEY-MAN HEALTH INSURANCE^"[("^"_TOP_"^") G TOPQ
  1. I "^MEDI-CAL^MEDICAID^MEDICARE/MEDICAID (MEDI-CAL)^NO-FAULT INSURANCE^QUALIFIED IMPAIRMENT INSURANCE^"[("^"_TOP_"^") G TOPQ
  1. I "^SPECIAL CLASS INSURANCE^SPECIAL RISK INSURANCE^SPECIFIED DISEASE INSURANCE^TORT FEASOR^"[("^"_TOP_"^") G TOPQ
  1. I "^VA SPECIAL CLASS^WORKERS' COMPENSATION INSURANCE^"[("^"_TOP_"^") G TOPQ
  1. ;
  1. S OK=1
  1. ;
  1. TOPQ ;
  1. Q OK
  1. ;