BPSOSQA ;BHAM ISC/FCS/DRS/DLF - ECME background, Part 1 ;06/02/2004
 ;;1.0;E CLAIMS MGMT ENGINE;**1,5,7,8,10**;JUN 2004;Build 27
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 Q
 ;
 ; ONE59 - Validate BPS Transaction data
 ; Input
 ;   IEN59 - BPS Transaction
 ;
ONE59(IEN59) ;EP - from BPSOSIZ
 ; Process this one IEN59
 ;
 ; Initialize variables
 N RTN,X1,REQTYPE,ERRNO,ERRMSG
 S RTN=$T(+0),X1=$G(^BPST(IEN59,1)),REQTYPE=$P($G(^BPST(IEN59,0)),U,15)
 ;
 ; Create log entry
 ; Needed for Turn-Around Stats - Do NOT delete/alter!!
 D LOG^BPSOSL(IEN59,$T(+0)_"-Validating the BPS Transaction")
 ;
 ; Validate that there is a request type
 I REQTYPE="" D ERROR^BPSOSU(RTN,IEN59,109,"Request Type not found in Transaction ") G END
 ;
 S (ERRNO,ERRMSG)=""
 I REQTYPE="C" D  I ERRNO D ERROR^BPSOSU(RTN,IEN59,ERRNO,ERRMSG) G END
 . N RX,RXR
 . S RX=$P(X1,U,11),RXR=$P(X1,U)
 . I RX="" S ERRNO=108,ERRMSG="Prescription Number not found in Transaction" Q
 . I RXR="" S ERRNO=107,ERRMSG="Fill Number not found in Transaction" Q
 . I $$RXAPI1^BPSUTIL1(RX,.01,"I")="" S ERRNO=101,ERRMSG="Missing RX # field .01" Q
 . I RXR,$$RXSUBF1^BPSUTIL1(RX,52,52.1,RXR,.01,"I")="" S ERRNO=102,ERRMSG="Missing RX Refill field .01" Q
 ;
 ; Check for missing patient
 I '$P(^BPST(IEN59,0),U,6) D ERROR^BPSOSU(RTN,IEN59,103,"Patient missing from BPS Transaction") G END
 ;
 ; Check for missing division
 I '$P(X1,U,4) D ERROR^BPSOSU(RTN,IEN59,104,"Division missing from BPS Transaction") G END
 ;
 ; Check for missing BPS Pharmacy
 I '$P(X1,U,7)="" D ERROR^BPSOSU(RTN,IEN59,105,"ECME Pharmacy missing from BPS Transaction") G END
 ;
 ; Check for missing insurance node
 I '$D(^BPST(IEN59,10,1,0)) D ERROR^BPSOSU(RTN,IEN59,106,"Missing Insurance in BPST("_IEN59_",10,1,0)") G END
 ;
 ; If we got this far, we did not get an error
 ; Change status to 30 (Waiting for packet build)
 D SETSTAT^BPSOSU(IEN59,30)
 ;
END ; Common exit point
 ;
 ; Log payer sequence
 N BPSCOB
 S BPSCOB=$$COB59^BPSUTIL2(IEN59),BPSCOB=$S(BPSCOB=2:"-Secondary",BPSCOB=3:"-Tertiary",1:"-Primary"),BPSCOB=BPSCOB_" Insurance"
 D LOG^BPSOSL(IEN59,$T(+0)_BPSCOB)
 ;
 ; Log the contents of Transaction record
 D LOG^BPSOSL(IEN59,$T(+0)_"-Contents of ^BPST("_IEN59_"):")
 D LOG59(IEN59)
 ;
 ; If there are claims at 30%, fire up the packet process
 I $O(^BPST("AD",30,0)) D TASK
 Q
 ;
 ;
LOG59(IEN59) ; Log the IEN59 array
 N A
 M A=^BPST(IEN59)
 D LOGARRAY^BPSOSL(IEN59,"A")
 Q
 ;
TASK ;EP - from BPSOSQ2,BPSOSQ4,BPSOSRB
 N X,%DT,Y S X="N",%DT="ST" D ^%DT
 D TASKAT(Y)
 Q
 ;
TASKAT(ZTDTH) ;EP - from BPSOSQ4 (requeue if insurer is sleeping)
 N ZTRTN,ZTIO
 S ZTRTN="PACKETS^BPSOSQ2",ZTIO=""
 D ^%ZTLOAD
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HBPSOSQA   2747     printed  Sep 23, 2025@19:28:06                                                                                                                                                                                                     Page 2
BPSOSQA   ;BHAM ISC/FCS/DRS/DLF - ECME background, Part 1 ;06/02/2004
 +1       ;;1.0;E CLAIMS MGMT ENGINE;**1,5,7,8,10**;JUN 2004;Build 27
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified.
 +3        QUIT 
 +4       ;
 +5       ; ONE59 - Validate BPS Transaction data
 +6       ; Input
 +7       ;   IEN59 - BPS Transaction
 +8       ;
ONE59(IEN59) ;EP - from BPSOSIZ
 +1       ; Process this one IEN59
 +2       ;
 +3       ; Initialize variables
 +4        NEW RTN,X1,REQTYPE,ERRNO,ERRMSG
 +5        SET RTN=$TEXT(+0)
           SET X1=$GET(^BPST(IEN59,1))
           SET REQTYPE=$PIECE($GET(^BPST(IEN59,0)),U,15)
 +6       ;
 +7       ; Create log entry
 +8       ; Needed for Turn-Around Stats - Do NOT delete/alter!!
 +9        DO LOG^BPSOSL(IEN59,$TEXT(+0)_"-Validating the BPS Transaction")
 +10      ;
 +11      ; Validate that there is a request type
 +12       IF REQTYPE=""
               DO ERROR^BPSOSU(RTN,IEN59,109,"Request Type not found in Transaction ")
               GOTO END
 +13      ;
 +14       SET (ERRNO,ERRMSG)=""
 +15       IF REQTYPE="C"
               Begin DoDot:1
 +16               NEW RX,RXR
 +17               SET RX=$PIECE(X1,U,11)
                   SET RXR=$PIECE(X1,U)
 +18               IF RX=""
                       SET ERRNO=108
                       SET ERRMSG="Prescription Number not found in Transaction"
                       QUIT 
 +19               IF RXR=""
                       SET ERRNO=107
                       SET ERRMSG="Fill Number not found in Transaction"
                       QUIT 
 +20               IF $$RXAPI1^BPSUTIL1(RX,.01,"I")=""
                       SET ERRNO=101
                       SET ERRMSG="Missing RX # field .01"
                       QUIT 
 +21               IF RXR
                       IF $$RXSUBF1^BPSUTIL1(RX,52,52.1,RXR,.01,"I")=""
                           SET ERRNO=102
                           SET ERRMSG="Missing RX Refill field .01"
                           QUIT 
               End DoDot:1
               IF ERRNO
                   DO ERROR^BPSOSU(RTN,IEN59,ERRNO,ERRMSG)
                   GOTO END
 +22      ;
 +23      ; Check for missing patient
 +24       IF '$PIECE(^BPST(IEN59,0),U,6)
               DO ERROR^BPSOSU(RTN,IEN59,103,"Patient missing from BPS Transaction")
               GOTO END
 +25      ;
 +26      ; Check for missing division
 +27       IF '$PIECE(X1,U,4)
               DO ERROR^BPSOSU(RTN,IEN59,104,"Division missing from BPS Transaction")
               GOTO END
 +28      ;
 +29      ; Check for missing BPS Pharmacy
 +30       IF '$PIECE(X1,U,7)=""
               DO ERROR^BPSOSU(RTN,IEN59,105,"ECME Pharmacy missing from BPS Transaction")
               GOTO END
 +31      ;
 +32      ; Check for missing insurance node
 +33       IF '$DATA(^BPST(IEN59,10,1,0))
               DO ERROR^BPSOSU(RTN,IEN59,106,"Missing Insurance in BPST("_IEN59_",10,1,0)")
               GOTO END
 +34      ;
 +35      ; If we got this far, we did not get an error
 +36      ; Change status to 30 (Waiting for packet build)
 +37       DO SETSTAT^BPSOSU(IEN59,30)
 +38      ;
END       ; Common exit point
 +1       ;
 +2       ; Log payer sequence
 +3        NEW BPSCOB
 +4        SET BPSCOB=$$COB59^BPSUTIL2(IEN59)
           SET BPSCOB=$SELECT(BPSCOB=2:"-Secondary",BPSCOB=3:"-Tertiary",1:"-Primary")
           SET BPSCOB=BPSCOB_" Insurance"
 +5        DO LOG^BPSOSL(IEN59,$TEXT(+0)_BPSCOB)
 +6       ;
 +7       ; Log the contents of Transaction record
 +8        DO LOG^BPSOSL(IEN59,$TEXT(+0)_"-Contents of ^BPST("_IEN59_"):")
 +9        DO LOG59(IEN59)
 +10      ;
 +11      ; If there are claims at 30%, fire up the packet process
 +12       IF $ORDER(^BPST("AD",30,0))
               DO TASK
 +13       QUIT 
 +14      ;
 +15      ;
LOG59(IEN59) ; Log the IEN59 array
 +1        NEW A
 +2        MERGE A=^BPST(IEN59)
 +3        DO LOGARRAY^BPSOSL(IEN59,"A")
 +4        QUIT 
 +5       ;
TASK      ;EP - from BPSOSQ2,BPSOSQ4,BPSOSRB
 +1        NEW X,%DT,Y
           SET X="N"
           SET %DT="ST"
           DO ^%DT
 +2        DO TASKAT(Y)
 +3        QUIT 
 +4       ;
TASKAT(ZTDTH) ;EP - from BPSOSQ4 (requeue if insurer is sleeping)
 +1        NEW ZTRTN,ZTIO
 +2        SET ZTRTN="PACKETS^BPSOSQ2"
           SET ZTIO=""
 +3        DO ^%ZTLOAD
 +4        QUIT