[613] | 1 | XUSNPIE2 ;FO-OAKLAND/JLI - DATA ENTRY FOR INITIAL NPI VALUES ;5/13/08 17:41
|
---|
| 2 | ;;8.0;KERNEL;**410,435,454,462,480**;Jul 10, 1995;Build 38
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified
|
---|
| 4 | Q
|
---|
| 5 | ;
|
---|
| 6 | PRINTOPT ;
|
---|
| 7 | N DIR,%ZIS,ION,OPTION,PRNTFRMT,XUSDIV,XUSSORT,XUSRESO,Y,ZTDESC,ZTIO,ZTRTN,ZTSAVE,ZTSK
|
---|
| 8 | K IO("Q")
|
---|
| 9 | W !,"Select one of the following:",!!,?11,"1",?21,"All providers",!,?11,"2",?21,"All providers without NPI numbers",!
|
---|
| 10 | S DIR(0)="N^1:2",DIR("A")="Select a report option",DIR("B")="1" D ^DIR K DIR Q:Y'>0 S OPTION=+Y
|
---|
| 11 | S XUSRESO="" D Q:XUSRESO=""
|
---|
| 12 | . S DIR(0)="S^P:Providers who are not residents;R:Residents only;B:Both"
|
---|
| 13 | . S DIR("B")="P",DIR("A")="Selection: "
|
---|
| 14 | . D ^DIR K DIR Q:"PRB"'[Y
|
---|
| 15 | . S XUSRESO=Y Q
|
---|
| 16 | S DIR(0)="Y",DIR("B")="NO",DIR("A")="Sort by DIVISION" D ^DIR K DIR Q:Y="^" S XUSDIV=+Y
|
---|
| 17 | S PRNTFRMT=1
|
---|
| 18 | I XUSDIV S DIR(0)="N^1:2",DIR("A")="Output type (1=Printed text or 2=^-delimited)" D ^DIR K DIR Q:Y'>0 S PRNTFRMT=Y
|
---|
| 19 | S DIR(0)="Y",DIR("B")="YES",DIR("A")="Sort by SERVICE/SECTION"_$S(XUSDIV>0:" (as well)",1:"") D ^DIR K DIR Q:Y="^" S XUSSORT=+Y
|
---|
| 20 | W !!,">>> Report processing time is approximately 10 minutes."
|
---|
| 21 | W !," Recommend text output be queued to a network printer."
|
---|
| 22 | W !
|
---|
| 23 | S %ZIS="MQ" D ^%ZIS Q:POP
|
---|
| 24 | I $D(IO("Q")) D Q
|
---|
| 25 | . S ZTSAVE("OPTION")="",ZTSAVE("XUSSORT")="",ZTSAVE("XUSDIV")="",ZTSAVE("PRNTFRMT")="",ZTSAVE("XUSRESO")=""
|
---|
| 26 | . S ZTIO=ION,ZTRTN="DQ^XUSNPIE2",ZTDESC="NPI PRINT JOB FOR OPTION "_OPTION
|
---|
| 27 | . D ^%ZTLOAD W:$D(ZTSK) !,"Queued as Task "_ZTSK D HOME^%ZIS Q
|
---|
| 28 | ;
|
---|
| 29 | DQ ; entry point for queued print job
|
---|
| 30 | U IO D PRNTPROV(OPTION,XUSSORT,XUSDIV,PRNTFRMT,XUSRESO)
|
---|
| 31 | U IO D ^%ZISC
|
---|
| 32 | Q
|
---|
| 33 | ;
|
---|
| 34 | PRNTPROV(OPTION,XUSSORT,XUSDIV,PRNTFRMT,XUSRESO) ;
|
---|
| 35 | ; PRINT PROVIDER INFO
|
---|
| 36 | ;
|
---|
| 37 | ; OPTION SPECIFIES TYPE OF PRINT - 1=ALL PROVIDERS, 2=NEEDS NPI ONLY
|
---|
| 38 | ; XUSSORT INDICATES WHETHER SORTED BY SERVICE/SECTION
|
---|
| 39 | ; XUSDIV INDICATES WHETHER SORTED BY DIVISION
|
---|
| 40 | ; PRNTFRMT INDICATES TYPE OF OUTPUT, PRINTED OR ^-DELIMITED
|
---|
| 41 | ;
|
---|
| 42 | ; ZEXCEPT: IOSL - KERNEL VARIABLE
|
---|
| 43 | N PAGENUM,LINENUM,PROVNAME,TAXDESCR,TAXONOMY,SERVSECT,DIRUT,DTOUT
|
---|
| 44 | N GLOBLOC,IEN,NPI,DATETIME,GLOBVALU,NCOUNT,GLOBLOC1,XUSDIVNM,CNTTOTAL,CNTNONE,CNTEXMPT,CNTDONE,MULTDIV,MULTDIVC
|
---|
| 45 | S CNTTOTAL=0,CNTNONE=0,CNTEXMPT=0,CNTDONE=0
|
---|
| 46 | S PAGENUM=0,LINENUM=0
|
---|
| 47 | S DATETIME=$$NOW^XLFDT()
|
---|
| 48 | S GLOBLOC1=$$GETDATA(OPTION,XUSSORT,XUSDIV,XUSRESO)
|
---|
| 49 | I PRNTFRMT'=1 W !,"PROVIDER_NAME^LAST4^IEN^NPI^TAXONOMY_CODE^TAXONOMY DESCRIPTION"_$S(XUSDIV:"^DIVISION",1:"")_$S(XUSSORT:"^SERVICE/SECTION",1:"")
|
---|
| 50 | S GLOBLOC=GLOBLOC1,XUSDIVNM="" F S XUSDIVNM=$O(@GLOBLOC1@(XUSDIVNM)) Q:XUSDIVNM="" D Q:$D(DIRUT)!$D(DTOUT)
|
---|
| 51 | . S SERVSECT="" F S SERVSECT=$O(@GLOBLOC1@(XUSDIVNM,SERVSECT)) Q:SERVSECT="" S GLOBLOC=$NA(@GLOBLOC1@(XUSDIVNM,SERVSECT)) D Q:$D(DIRUT)!$D(DTOUT)
|
---|
| 52 | . . I PRNTFRMT=1 D HEADER(OPTION,DATETIME,.PAGENUM,.LINENUM,XUSDIV,XUSDIVNM,XUSSORT,SERVSECT,XUSRESO) Q:$D(DIRUT)!$D(DTOUT)
|
---|
| 53 | . . S PROVNAME="" F S PROVNAME=$O(@GLOBLOC@(PROVNAME)) Q:PROVNAME="" Q:$D(DIRUT)!$D(DTOUT) S IEN=0 F S IEN=$O(@GLOBLOC@(PROVNAME,IEN)) Q:IEN'>0 D Q:$D(DIRUT)!$D(DTOUT)
|
---|
| 54 | . . . S NCOUNT=0
|
---|
| 55 | . . . S TAXDESCR="" F S TAXDESCR=$O(@GLOBLOC@(PROVNAME,IEN,TAXDESCR)) Q:TAXDESCR="" S GLOBVALU=@GLOBLOC@(PROVNAME,IEN,TAXDESCR) D
|
---|
| 56 | . . . . S NPI=$P(GLOBVALU,U,3),TAXONOMY=$P(GLOBVALU,U,4)
|
---|
| 57 | . . . . I PRNTFRMT=1 S NCOUNT=NCOUNT+1 W:NCOUNT=1 !,PROVNAME,?33,$$ALIGNRGT(IEN,11),?49,NPI W !,?6,TAXONOMY," ",TAXDESCR
|
---|
| 58 | . . . . I PRNTFRMT'=1 W !,PROVNAME_U_$E($$GET1^DIQ(200,IEN_",",9),6,9)_U_IEN_U_NPI_U_TAXONOMY_U_TAXDESCR_$S(XUSDIV:U_XUSDIVNM,1:"")_$S(XUSSORT:U_SERVSECT,1:"")
|
---|
| 59 | . . . . Q
|
---|
| 60 | . . . I PRNTFRMT=1 S LINENUM=LINENUM+NCOUNT+1 I LINENUM>(IOSL-4) D HEADER(OPTION,DATETIME,.PAGENUM,.LINENUM,XUSDIV,XUSDIVNM,XUSSORT,SERVSECT,XUSRESO) Q:$D(DIRUT)!$D(DTOUT)
|
---|
| 61 | . . . Q
|
---|
| 62 | . . Q
|
---|
| 63 | . Q
|
---|
| 64 | I '($D(DIRUT)!$D(DTOUT)),PRNTFRMT=1 D
|
---|
| 65 | . S PROVNAME="" I $O(@GLOBLOC@(PROVNAME))="" W !,?20,"* * * N O D A T A F O U N D * * *",!! I 1
|
---|
| 66 | . E D
|
---|
| 67 | . . N TOTTYP S TOTTYP=$S(XUSRESO="R":"Residents",1:"Billable Providers")
|
---|
| 68 | . . W !!,"Total "_TOTTYP_":",?43,CNTTOTAL,!,TOTTYP_" with an NPI:",?43,CNTDONE,!,"EXEMPT "_TOTTYP_":",?43,CNTEXMPT,!,TOTTYP_" Still Needing an NPI:",?43,CNTNONE
|
---|
| 69 | . . I $G(MULTDIV)>0 W !!,MULTDIV," Providers were repeated a total of ",MULTDIVC," times",!," due to listing under multiple divisions"
|
---|
| 70 | . . Q
|
---|
| 71 | . W !!,?27,"*** End of Report ***"
|
---|
| 72 | . Q
|
---|
| 73 | Q
|
---|
| 74 | ;
|
---|
| 75 | HEADER(OPTION,DATETIME,PAGNOREF,LINNOREF,XUSDIV,XUSDIVNM,XUSSORT,SERVSECT,XUSRESO) ;
|
---|
| 76 | ; ZEXCEPT: IOF,IOST KERNEL IO VARIABLES
|
---|
| 77 | ; ZEXCEPT: DIRUT,DTOUT NEWED IN CALLING PRNTPROV - INDICATE QUIT TO PRNTPROV
|
---|
| 78 | N TEMPVAL,DIR,X,Y
|
---|
| 79 | S PAGNOREF=PAGNOREF+1
|
---|
| 80 | ; Don't page feed on the first page
|
---|
| 81 | IF PAGNOREF>1 I $E(IOST,1,2)="C-" S DIR(0)="E" D ^DIR I 'Y S DIRUT=1 Q
|
---|
| 82 | IF PAGNOREF>1 W @IOF
|
---|
| 83 | W:$E(IOST,1,2)'="C-" !
|
---|
| 84 | W "Active Provider Report ("_$S(XUSRESO="P":"no residents)",XUSRESO="R":"residents only)",1:"includes residents)")
|
---|
| 85 | W ?48,$$FMTE^XLFDT(DATETIME)," Page: ",PAGNOREF
|
---|
| 86 | W !," Report Option: Provider List Active Providers",$S(OPTION=2:" Without NPI Numbers",1:"")
|
---|
| 87 | W !!,"Provider Name",?39,"IEN",?49,$S(OPTION'=2:"NPI",1:"")
|
---|
| 88 | W !," Taxonomy"
|
---|
| 89 | W !,"--------------------------------------------------------------------------------"
|
---|
| 90 | S LINNOREF=6
|
---|
| 91 | I XUSDIV W !,"DIVISION: ",XUSDIVNM," " S LINNOREF=LINNOREF+1
|
---|
| 92 | I XUSSORT W:'XUSDIV ! W "SERVICE/SECTION: ",SERVSECT S:'XUSDIV LINNOREF=LINNOREF+1
|
---|
| 93 | Q
|
---|
| 94 | ;
|
---|
| 95 | GETDATA(OPTION,XUSSORT,XUSDIV,XUSRESO) ; get data for reports for providers
|
---|
| 96 | N NPI,PROVNAME,TAXDESCR,TAXONOMY,XUSDEFLT,XUSDIVCN,XUSDIVN,XUSDIVNM,XUSGLOB,XUSACTV,XUSSKIP
|
---|
| 97 | N XUSIEN,XUSSERVC,XUSVAL,CNTCLEAN,X
|
---|
| 98 | S XUSRESO=$G(XUSRESO)
|
---|
| 99 | ; ZEXCEPT: CNTTOTAL,CNTNONE,CNTEXMPT,CNTDONE - NEWed and initialized in PRNTPROV or killed based on CNTCLEAN
|
---|
| 100 | S CNTCLEAN=0 I '$D(CNTTOTAL) S CNTCLEAN=1
|
---|
| 101 | S XUSGLOB=$NA(^TMP($J,"XUSNPIPRNT")) K @XUSGLOB
|
---|
| 102 | I 'XUSDIV S XUSDIVNM(1)=" ",XUSDEFLT=" "
|
---|
| 103 | I XUSDIV S XUSDEFLT=$$NS^XUAF4($$KSP^XUPARAM("INST")),XUSDEFLT=$P(XUSDEFLT,U)
|
---|
| 104 | I 'XUSSORT S XUSSERVC=" "
|
---|
| 105 | F XUSIEN=0:0 S XUSIEN=$O(^VA(200,XUSIEN)) Q:XUSIEN'>0 D
|
---|
| 106 | . ; Don't report TERMINATED or DISUSERed users
|
---|
| 107 | . S XUSACTV=$$ACTIVE^XUSER(XUSIEN)
|
---|
| 108 | . I XUSACTV=""!($P(XUSACTV,U)=0) Q
|
---|
| 109 | . ; Don't report users with null NPI ENTRY STATUS
|
---|
| 110 | . S XUSVAL=$$CHEKNPI^XUSNPIED(XUSIEN),XUSVAL=$$NPISTATS^XUSNPIED(XUSIEN)
|
---|
| 111 | . Q:XUSVAL=""
|
---|
| 112 | . S PROVNAME=$$GET1^DIQ(200,XUSIEN_",",.01),NPI=$$GETNPI^XUSNPIED(XUSIEN),TAXONOMY=$$GETTAXON^XUSNPIED(XUSIEN,.TAXDESCR) I TAXONOMY=-1 S TAXONOMY=" ",TAXDESCR=" "
|
---|
| 113 | . ; Determine whether provider is a resident for local reports.
|
---|
| 114 | . I OPTION'=3,XUSRESO'="B" S XUSSKIP=0 D Q:XUSSKIP
|
---|
| 115 | . . I XUSRESO="R",TAXONOMY'="390200000X" S XUSSKIP=1 Q
|
---|
| 116 | . . I XUSRESO="P",TAXONOMY="390200000X" S XUSSKIP=1
|
---|
| 117 | . . Q
|
---|
| 118 | . I NPI="",$$EXMPTNPI^XUSNPIED(XUSIEN) S NPI="EXEMPTED "
|
---|
| 119 | . S CNTTOTAL=$G(CNTTOTAL)+1 S:NPI="" CNTNONE=$G(CNTNONE)+1 S:NPI="EXEMPTED " CNTEXMPT=$G(CNTEXMPT)+1 S:NPI?10N CNTDONE=$G(CNTDONE)+1
|
---|
| 120 | . I '((XUSVAL="N")!(OPTION'=2)) Q
|
---|
| 121 | . I XUSSORT S XUSSERVC=$$GET1^DIQ(200,XUSIEN_",",29) I XUSSERVC="" S XUSSERVC=" "
|
---|
| 122 | . I XUSDIV D
|
---|
| 123 | . . K XUSDIVNM S XUSDIVCN=0,XUSDIVNM(1)=XUSDEFLT
|
---|
| 124 | . . F XUSDIVN=0:0 S XUSDIVN=$O(^VA(200,XUSIEN,2,XUSDIVN)) Q:XUSDIVN'>0 S XUSDIVCN=XUSDIVCN+1,XUSDIVNM(XUSDIVCN)=$$GET1^DIQ(200.02,XUSDIVN_","_XUSIEN_",",.01)
|
---|
| 125 | . . I XUSDIVCN>1 S MULTDIV=$G(MULTDIV)+1,MULTDIVC=$G(MULTDIVC)+XUSDIVCN-1
|
---|
| 126 | . . Q
|
---|
| 127 | . F XUSDIVN=0:0 S XUSDIVN=$O(XUSDIVNM(XUSDIVN)) Q:XUSDIVN'>0 D
|
---|
| 128 | . . S X=PROVNAME_U_XUSIEN_U_NPI_U_TAXONOMY_U_TAXDESCR
|
---|
| 129 | . . S @XUSGLOB@(XUSDIVNM(XUSDIVN),XUSSERVC,PROVNAME,XUSIEN,TAXDESCR)=X
|
---|
| 130 | . . Q
|
---|
| 131 | . Q
|
---|
| 132 | I CNTCLEAN K CNTTOTAL,CNTNONE,CNTEXMPT,CNTDONE
|
---|
| 133 | Q XUSGLOB
|
---|
| 134 | ;
|
---|
| 135 | ALIGNRGT(TEXT,WIDTH) ; align text right in a specified width
|
---|
| 136 | N RESULT
|
---|
| 137 | S $P(RESULT," ",WIDTH)=" ",RESULT=RESULT_TEXT,RESULT=$E(RESULT,$L(RESULT)-WIDTH+1,$L(RESULT))
|
---|
| 138 | Q RESULT
|
---|
| 139 | ;
|
---|
| 140 | CHKOLD1(IEN) ; check for earlier value, and activate if present
|
---|
| 141 | N IEN1,STATUS,NPI,DATE,XUFDA
|
---|
| 142 | S IEN1=$O(^VA(200,IEN,"NPISTATUS"," "),-1) I IEN1>0 D I STATUS=0 D CHKOLD1(IEN)
|
---|
| 143 | . S STATUS=^VA(200,IEN,"NPISTATUS",IEN1,0),NPI=$P(STATUS,U,3),DATE=$P(STATUS,U),STATUS=$P(STATUS,U,2)
|
---|
| 144 | . I STATUS=0 D DELETNPI(IEN,IEN1,DATE) Q ; entry making it INACTIVE - remove it
|
---|
| 145 | . I STATUS=1 D SET^XUSNPIE1(IEN,NPI)
|
---|
| 146 | . Q
|
---|
| 147 | Q
|
---|
| 148 | ;
|
---|
| 149 | DELETNPI(IEN,OIEN,ODATEVAL) ;
|
---|
| 150 | N XUFDA
|
---|
| 151 | I $D(ODATEVAL) S XUFDA(200.042,OIEN_","_IEN_",",.01)="@" D FILE^DIE("","XUFDA")
|
---|
| 152 | I $O(^VA(200,IEN,"NPISTATUS",0))>0 Q
|
---|
| 153 | N XUFDA
|
---|
| 154 | I $$GET1^DIQ(200,IEN_",",41.99) S XUFDA(200,IEN_",",41.99)="@"
|
---|
| 155 | I $$GET1^DIQ(200,IEN_",",41.98)'="" S XUFDA(200,IEN_",",41.98)="@"
|
---|
| 156 | I $D(XUFDA) D FILE^DIE("","XUFDA")
|
---|
| 157 | Q
|
---|
| 158 | ;
|
---|
| 159 | CLERXMPT ; edit entry indicating whether a provider is exempt from needing an NPI
|
---|
| 160 | N DIC,DIR,FDA,IEN,Y
|
---|
| 161 | W ! S DIC="^VA(200,",DIC(0)="AEQ" S DIC("A")="select Provider: " D ^DIC Q:Y'>0 S IEN=+Y
|
---|
| 162 | I $$HASNPI^XUSNPIED(IEN) W !,"This Provider already has an NPI value. Nothing to do." Q
|
---|
| 163 | I '$$CHEKNPI^XUSNPIED(IEN),'$$EXMPTNPI^XUSNPIED(IEN) W !,"This Provider does not appear to need an NPI or Exemption." Q
|
---|
| 164 | I $$EXMPTNPI^XUSNPIED(IEN) D Q ; currently marked as Exempt
|
---|
| 165 | . S DIR(0)="Y",DIR("A")="Provider is currently EXEMPT from needing an NPI, set to NEEDS an NPI (Y/N)" D ^DIR I 'Y Q
|
---|
| 166 | . S FDA(200,IEN_",",41.98)="N" D FILE^DIE("","FDA")
|
---|
| 167 | . W !,$S($$NEEDSNPI^XUSNPIED(IEN):"File updated",1:"Ecountered a problem updating file, status NOT set to NEEDS an NPI")
|
---|
| 168 | . Q
|
---|
| 169 | ; check to make sure provider should be exempt
|
---|
| 170 | S DIR(0)="Y",DIR("A")="Confirm that Provider should be Exempt from needing an NPI (Y/N)" D ^DIR I 'Y Q
|
---|
| 171 | ; and update file to show as exempt
|
---|
| 172 | S FDA(200,IEN_",",41.98)="E" D FILE^DIE("","FDA")
|
---|
| 173 | W !,$S($$EXMPTNPI^XUSNPIED(IEN):"File updated",1:"Ecountered a problem updating file, status NOT set to EXEMPT")
|
---|
| 174 | Q
|
---|