XUSNPIX4 ;OAK_BP/CMW - NPI EXTRACT REPORT ;01-OCT-06
 ;;8.0;KERNEL;**438,452,453**; Jul 10, 1995;Build 36
 ;;Per VHA Directive 10-93-142, this routine should not be modified.
 ;
 ; NPI Extract Report
 ;
 ; Input parameter: N/A
 ;
 ; Other relevant variables:
 ;   XUSRTN="XUSNPIX1NV" (current routine name, used for ^XTMP and ^TMP
 ;   XUSRTN="XUSNPIX2NV"  storage subscript)
 ; Storage Global:
 ;   ^XTMP("XUSNPIX1VA",0) = Piece 1^Piece 2^Piece 3^Piece 4^Piece 5^Piece 6
 ;   ^XTMP("XUSNPIX2VA",0)
 ;      where:
 ;      Piece 1 => Purge Date - 1 year in future
 ;      Piece 2 => Create Date - Today
 ;      Piece 3 => Description
 ;      Piece 4 => Last Date Compiled
 ;      Piece 5 => $H last run start time
 ;      Piece 6 => $H last run completion time
 ;      
 ;      Entry Point - ENT called from XUSNPIX1
 ;
 Q
 ;
 ; Individual records
TYPE1 ;
 N IBA0,NVIEN,XUSNPI
 N XUSI,XUSNM,XUSNV,XLFNC,XUSIZE,XUSDT,XUSNEW
 N TOTREC1,TOTREC2
 S XUSCNT=1,(TOTREC1,MSGCNT,XUSIZE)=0
 S XUSNPI=""
 F  S XUSNPI=$O(^TMP("XUSNPI",$J,1,XUSNPI)) Q:'XUSNPI  D
 . S XUSDATA=XUSNPI
 . S NVIEN=$G(^TMP("XUSNPI",$J,1,XUSNPI))
 . ;
 . F XUSI=1:1:29 S XUSNV(XUSI)=""
 . S IBA0=$G(^IBA(355.93,NVIEN,0))
 . S XUSNM=$P(IBA0,U)
 . ; Break Name into components
 . I XUSNM'="" D
 . . S XLFNC=XUSNM D FORMAT^XLFNAME7(.XLFNC,,,,0)
 . . S XUSNV(2)=XLFNC("GIVEN"),XUSNV(3)=XLFNC("MIDDLE"),XUSNV(4)=XLFNC("FAMILY")
 . . I XLFNC("SUFFIX")'="" S XUSNV(4)=XUSNV(4)_" "_XLFNC("SUFFIX")
 . . K XLFNC
 . S XUSDATA=XUSDATA_U_XUSNV(2)_U_XUSNV(3)_U_XUSNV(4)
 . S XUSNV(5)=1 ;TYPE
 . ;                                    
 . ; DOB (place holder)
 . S XUSNV(6)=""
 . S XUSDATA=XUSDATA_U_XUSNV(5)_U_XUSNV(6)
 . ;
 . ; Pay to Provider Address (7-11)
 . S XUSDATA=XUSDATA_U_PTPMAIL
 . ;
 . ; Servicing Provider Address
 . S XUSNV(12)=$P(IBA0,U,5)
 . S XUSNV(13)=$P(IBA0,U,10)
 . S XUSNV(14)=$P(IBA0,U,6)
 . S XUSNV(15)=$P(IBA0,U,7)
 . I XUSNV(15) S XUSNV(15)=$P($G(^DIC(5,XUSNV(12),0)),U,2)
 . S XUSNV(16)=$P(IBA0,U,8)
 . S XUSDATA=XUSDATA_U_XUSNV(12)_U_XUSNV(13)_U_XUSNV(14)_U_XUSNV(15)_U_XUSNV(16)
 . ;
 . ; Office Phone number (place holder)
 . S XUSNV(17)=""
 . ;
 . ; Degree Description / Degree Code (place holder)
 . S XUSNV(18)=""
 . S XUSNV(19)=""
 . ;
 . ; Get Taxonomy and specialty codes
 . N NVTX,NVSPC,NVTAX
 . S NVTX=0
 . F  S NVTX=$O(^IBA(355.93,NVIEN,"TAXONOMY","B",NVTX)) Q:'NVTX  D
 . . S NVSPC=$P($G(^USC(8932.1,NVTX,0)),U,9)
 . . S NVTAX=$P($G(^USC(8932.1,NVTX,0)),U,7)
 . . I NVSPC'="" D
 . . . I XUSNV(20)="" S XUSNV(20)=NVSPC Q
 . . . S XUSNV(20)=XUSNV(20)_";"_NVSPC
 . . I NVTAX'="" D
 . . . I XUSNV(21)="" S XUSNV(21)=NVTAX Q
 . . . S XUSNV(21)=XUSNV(21)_";"_NVTAX
 . ;
 . ; Fed tax ID
 . S XUSNV(22)=$P($G(IBA0),U,9)
 . ;
 . S XUSDATA=XUSDATA_U_XUSNV(17)_U_XUSNV(18)_U_XUSNV(19)_U_XUSNV(20)_U_XUSNV(21)_U_XUSNV(22)
 . ;
 . ; Medicare Part A/B
 . S XUSNV(23)=670899
 . S XUSNV(24)="VA"_$E(SITE+10000,2,5)
 . ;
 . ; State Lic and DEA (place holder)
 . S XUSNV(25)=""
 . S XUSNV(26)=""
 . ;
 . ; VISN Station
 . S XUSNV(27)=SITE
 . ;
 . S XUSDATA=XUSDATA_U_XUSNV(23)_U_XUSNV(24)_U_XUSNV(25)_U_XUSNV(26)_U_XUSNV(27)
 . ;
 . ;BCBS info
 . K XUSBXID
 . D NNVAID^XUSNPIXU(NVIEN,.XUSBXID)
 . ;
 . ;Update counter and save Entry
 . N XUSB
 . S XUSCNT=XUSCNT+1,TOTREC1=TOTREC1+1
 . S ^TMP(XUSRTN,$J,XUSCNT)=XUSDATA_U_XUSEOL
 . S XUSIZE=XUSIZE+$L(^TMP(XUSRTN,$J,XUSCNT))
 . I $D(XUSBXID) D
 . . S XUSB=""
 . . F  S XUSB=$O(XUSBXID(XUSB)) Q:XUSB=""  D
 . . . S XUSCNT=XUSCNT+1,TOTREC1=TOTREC1+1
 . . . S ^TMP(XUSRTN,$J,XUSCNT)=XUSDATA_U_XUSB_U_XUSEOL
 . . . S XUSIZE=XUSIZE+$L(^TMP(XUSRTN,$J,XUSCNT))
 . I XUSIZE>MAXSIZE D
 . . D EOF1(XUSRTN)
 . . D EMAIL^XUSNPIX3(XUSRTN)
 . . D VMAIL^XUSNPIX3(XUSRTN)
 . . S ^TMP(XUSRTN,$J,1)=XUSHDR
 . . S XUSCNT=1,XUSIZE=0
 . K XUSNV,XUSDATA,XUSBXID
 ;
 D EOF1(XUSRTN)
 S ^XTMP("XUSNPIXT","1NV")=MSGCNT_U_TOTREC1_U_DTTM3
 Q
 ;
EOF1(XUSRTN) ;
 S MSGCNT=MSGCNT+1
 S ^TMP(XUSRTN,$J,1)=XUSHDR_U_"Message Number: "_MSGCNT_U_"Line Count: "_XUSCNT_U_DTTM3_U_$G(XUSPROD)_U_XUSEOL
 S XUSCNT=XUSCNT+1
 S ^TMP(XUSRTN,$J,XUSCNT)="END OF FILE"_U_XUSEOL
 Q
 ;
TYPE2 ;Facility/Group
 N IBA0,NVIEN,XUSNPI
 N XUSNV,XUSI,XUSNM,XLFNC,MSGCNT,XUSIZE,XUSDT,XUSNEW
 S XUSNPI=""
 S XUSCNT=1,(TOTREC2,MSGCNT,XUSIZE)=0
 F  S XUSNPI=$O(^TMP("XUSNPI",$J,2,XUSNPI)) Q:'XUSNPI  D
 . S XUSDATA=XUSNPI
 . S NVIEN=$G(^TMP("XUSNPI",$J,2,XUSNPI))
 . ;
 . F XUSI=1:1:24 S XUSNV(XUSI)=""
 . S IBA0=$G(^IBA(355.93,NVIEN,0))
 . ;Get Organization name  
 . S XUSNV(2)=$P(IBA0,U)
 . ;Type
 . S XUSNV(3)=2
 . ;
 . S XUSDATA=XUSDATA_U_XUSNV(2)_U_XUSNV(3)
 . ;
 . ; Pay to Provider Address (4-8)
 . S XUSDATA=XUSDATA_U_PTPMAIL
 . ;
 . ; Servicing Provider Address
 . S XUSNV(9)=$P(IBA0,U,5)
 . S XUSNV(10)=$P(IBA0,U,10)
 . S XUSNV(11)=$P(IBA0,U,6)
 . S XUSNV(12)=$P(IBA0,U,7)
 . I XUSNV(12) S XUSNV(12)=$P($G(^DIC(5,XUSNV(12),0)),U,2)
 . S XUSNV(13)=$P(IBA0,U,8)
 . S XUSDATA=XUSDATA_U_XUSNV(9)_U_XUSNV(10)_U_XUSNV(11)_U_XUSNV(12)_U_XUSNV(13)
 . ;
 . ;Office Phone number (place holder)
 . S XUSNV(14)=""
 . ; 
 . ; get Taxonomy and Specialty
 . N NVTX,NVSPC,NVTAX
 . S NVTX=0
 . F  S NVTX=$O(^IBA(355.93,NVIEN,"TAXONOMY","B",NVTX)) Q:'NVTX  D
 . . S NVSPC=$P($G(^USC(8932.1,NVTX,0)),U,9)
 . . S NVTAX=$P($G(^USC(8932.1,NVTX,0)),U,7)
 . . I NVSPC'="" D
 . . . I XUSNV(15)="" S XUSNV(15)=NVSPC Q
 . . . S XUSNV(15)=XUSNV(15)_";"_NVSPC
 . . I NVTAX'="" D
 . . . I XUSNV(16)="" S XUSNV(16)=NVTAX Q
 . . . S XUSNV(16)=XUSNV(16)_";"_NVTAX
 . ;
 . ; Fed Tax ID
 . S XUSNV(17)=$P($G(IBA0),U,9)
 . ;
 . ;Medicare A/B
 . S XUSNV(18)=670899
 . S XUSNV(19)="VA"_$E(SITE+10000,2,5)
 . ;
 . S XUSDATA=XUSDATA_U_XUSNV(14)_U_XUSNV(15)_U_XUSNV(16)_U_XUSNV(17)_U_XUSNV(18)_U_XUSNV(19)
 . ;
 . ;State License Number
 . S XUSNV(20)=$P($G(IBA0),U,12)
 . ;
 . ;DEA Number (place holder)
 . S XUSNV(21)=""
 . ;
 . ;VISN STATION ID
 . S XUSNV(22)=SITE
 . ;
 . S XUSDATA=XUSDATA_U_XUSNV(20)_U_XUSNV(21)_U_XUSNV(22)
 . ;
 . ;BCBS info
 . K XUSBXID
 . D NNVAID^XUSNPIXU(NVIEN,.XUSBXID)
 . ;
 . ;Update counter and save Entry
 . N XUSB
 . S XUSCNT=XUSCNT+1,TOTREC2=TOTREC2+1
 . S ^TMP(XUSRTN,$J,XUSCNT)=XUSDATA_U_XUSEOL
 . S XUSIZE=XUSIZE+$L(^TMP(XUSRTN,$J,XUSCNT))
 . I $D(XUSBXID) D
 . . S XUSB=""
 . . F  S XUSB=$O(XUSBXID(XUSB)) Q:XUSB=""  D
 . . . S XUSCNT=XUSCNT+1,TOTREC2=TOTREC2+1
 . . . S ^TMP(XUSRTN,$J,XUSCNT)=XUSDATA_U_XUSB_U_XUSEOL
 . . . S XUSIZE=XUSIZE+$L(^TMP(XUSRTN,$J,XUSCNT))
 . I XUSIZE>MAXSIZE D
 . . D EOF2(XUSRTN)
 . . D EMAIL^XUSNPIX3(XUSRTN)
 . . D VMAIL^XUSNPIX3(XUSRTN)
 . . S ^TMP(XUSRTN,$J,1)=XUSHDR
 . . S XUSCNT=1,XUSIZE=0
 . K XUSNV,XUSDATA,XUSB,XUSBXID
 ;
 D EOF2(XUSRTN)
 S ^XTMP("XUSNPIXT","2NV")=MSGCNT_U_TOTREC2_U_DTTM3
 Q
 ;
EOF2(XUSRTN) ;
 S MSGCNT=MSGCNT+1
 S ^TMP(XUSRTN,$J,1)=XUSHDR_U_"Message Number: "_MSGCNT_U_"Line Count: "_XUSCNT_U_DTTM3_U_$G(XUSPROD)_U_XUSEOL
 S XUSCNT=XUSCNT+1
 S ^TMP(XUSRTN,$J,XUSCNT)="END OF FILE"_U_XUSEOL
 Q
