VistA-WorldVistAEHR/r/E_CLAIMS_MGMT_ENGINE-BPS/BPSOSIZ.m

144 lines
3.8 KiB
Mathematica

BPSOSIZ ;BHAM ISC/FCS/DRS/DLF - Filing BPS Transaction ;06/01/2004
;;1.0;E CLAIMS MGMT ENGINE;**1,5**;JUN 2004;Build 45
;;Per VHA Directive 2004-038, this routine should not be modified.
;
Q
;
; EN - Create and/or update BPS Transaction
; Input
; IEN59 - BPS Transaction number
; MOREDATA - Array of data created by BPSNCPD*
EN(IEN59,MOREDATA) ;EP - BPSOSRB
;
; Initialize variables
N RX,RXR,EXISTS,ERROR,X
S ERROR=0,RX=$P(IEN59,"."),RXR=+$E($P(IEN59,".",2),1,4)
;
;
D LOG^BPSOSL(IEN59,$T(+0)_"-Building Transaction")
;
; Lock the transaction
I '$$LOCK59(IEN59) D ERROR(IEN59,"Could not lock the transaction") Q
;
; Check for claims that should not be resubmitted
S X=$$RXPAID^BPSOSIY(IEN59)
I X D ERROR(IEN59,"RXPAID^BPSOSIY returned "_X) Q
;
; Make sure that the record is not already IN PROGRESS
S X=+$$STATUS59^BPSOSRX(IEN59)
I X'=0,X'=99 D ERROR(IEN59,"STATUS is "_X) Q
;
; Check if the BPS Transaction exists
S EXISTS=$$EXIST59(IEN59)
;
; If the record exists, delete all but the essential fields
I EXISTS D CLEAR59(IEN59)
;
; If the record does not exist, create new record and validate the IEN
I 'EXISTS S X=$$NEW59(IEN59) I X'=IEN59 D ERROR(IEN59,"NEW59 returned "_X) Q
;
; Update the fields. If error is returned, log to the BPS Transaction, which
; we know exists at this point
S ERROR=$$INIT^BPSOSIY(IEN59)
I ERROR D ERROR^BPSOSU($T(+0),IEN59,ERROR,"BPS Transaction not updated"),UNLOCK59(IEN59) Q
;
; Validate the transaction
D ONE59^BPSOSQA(IEN59)
;
; Unlock the transaction
D UNLOCK59(IEN59)
Q
;
; LOCK59 - Lock Transaction
LOCK59(IEN59) ;
L +^BPST(IEN59):5
Q $T
;
; UNLOCK59 - Unlock record
UNLOCK59(IEN59) ;
L -^BPST(IEN59)
Q
;
; EXISTS - See if the BPS Transaction already exists
EXIST59(IEN59) ;
N X
S X=$$FIND1^DIC(9002313.59,,"QX","`"_IEN59)
Q $S(X>0:X,X=0:0)
;
; NEW59 - Create a new BPS Transaction record
NEW59(IEN59) ;
; Initialize variables
N FDA,IEN,MSG,FN
;
; The .01 node and IEN should be the transaction number
S FN=9002313.59
S (IEN(1),FDA(FN,"+1,",.01))=IEN59
;
; Create the new BPS Transaction record
D UPDATE^DIE("","FDA","IEN","MSG")
I $D(MSG) Q 0
Q IEN(1)
;
; CLEAR59 - If it exists, clear out the old values
CLEAR59(IEN59) ;
; Deletes all values except for fields:
; Entry # (.01)
; Resubmit after reversal (1.12)
; Result Text (202)
; Comments (111 multiple)
; If reverse/resubmit, then also do not clear fields:
; Status (1)
; Submit Date/Time (6)
; Last Update (7)
; Start Date (15)
;
; Initialize variables
N FN,FDA,MSG,FIELD,SKIP,ENTRY
S FN=9002313.59
;
; Set up fields that we do not want to delete
S SKIP(1.12)="",SKIP(202)=""
I $G(MOREDATA("REVERSE THEN RESUBMIT"))=1 S SKIP(1)="",SKIP(6)="",SKIP(7)="",SKIP(15)=""
;
; Start with field .01 so it will not be deleted
; Place 'non-skip' fields in FDA to be deleted
S FIELD=.01
F S FIELD=$O(^DD(FN,FIELD)) Q:'FIELD I '$D(SKIP(FIELD)) S FDA(FN,IEN59_",",FIELD)=""
;
; Delete Insurance multiple
S FN=9002313.59902,ENTRY=0
F S ENTRY=$O(^BPST(IEN59,10,ENTRY)) Q:ENTRY="B"!(ENTRY="") D
. S FDA(FN,ENTRY_","_IEN59_",",.01)=""
;
; Delete DUR multiple
S FN=9002313.5913,ENTRY=0
F S ENTRY=$O(^BPST(IEN59,13,ENTRY)) Q:+ENTRY=0 D
. S FDA(FN,ENTRY_","_IEN59_",",.01)=""
;
; Fileman call to do the delete
D FILE^DIE("","FDA","MSG")
;
; Update Result Text File with 'PREVIOUSLY['
D PREVISLY(IEN59) ; for result text field 202
Q
;
; PREVISLY - Add semicolon in between the result text
PREVISLY(IEN59) ;EP - BPSOSRB, BPSOSU
N X
S X=$$GET1^DIQ(9002313.59,IEN59,202)
I X="" Q
S X=$E(";"_X,1,200)
N FN,FDA,MSG
S FDA(9002313.59,IEN59_",",202)=X
D FILE^DIE("","FDA","MSG")
Q
;
; ERROR - Log an error to the log
ERROR(IEN59,MSG) ;
N RX,RXR
S RX=$P(IEN59,"."),RXR=+$E($P(IEN59,".",2),1,4)
D LOG^BPSOSL(IEN59,$T(+0)_"-Skipping: "_$G(MSG))
K ^XTMP("BPSOSRX",RX,RXR)
D UNLOCK59(IEN59)
Q