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

ORDEA01B.m

Go to the documentation of this file.
  1. ORDEA01B ;ISP/RFR - DEA REPORTS 02;10/15/2014 08:02
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**218,350,499**;Dec 17, 1997;Build 165
  1. Q
  1. FEEDEA ;List those Fee Basis and C & A providers without a DEA number
  1. ;REP IS HANDLED BY REPORTS^ORDEA01
  1. W !!,"This report identifies Fee Basis and C & A providers who do not have a DEA# ",!
  1. W "value in the NEW PERSON file (#200). These providers will need a valid DEA ",!
  1. W "number entered into the NEW DEA# (#53.21) field in the NEW PERSON file (#200) ",!
  1. W "before they can order controlled substances.",!
  1. N DISINC,DIV,SAVE,X
  1. S DISINC=$$DISPRMPT^ORDEA01()
  1. Q:DISINC=U
  1. S X=$$DIVPRMPT^ORUTL(.DIV)
  1. Q:X<1
  1. S SAVE("DISINC")="",SAVE("DIV(")=""
  1. D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
  1. Q
  1. FEEDEAQ ;TASKMAN ENTRY POINT
  1. ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
  1. N PROVIDERS,ERROR,IN,IDX,STATUS,DATA,PGNUM,COL,STOP,OUTPUT
  1. S IN=$NA(^TMP("DILIST",$J)) K @IN
  1. S DATA=$NA(^TMP($J,"ORFEEDATA")) K @DATA
  1. ;*499 introduces multiple dea's for provider
  1. D LIST^DIC(200,,"@;.01;53.6;9.2I","P",,,,,"I ""^3^4^""[(U_$P($G(^VA(200,Y,""PS"")),U,6)_U)&'($L($$PRDEA^XUSER(Y)))",,,"ERROR")
  1. ;D LIST^DIC(200,,"@;.01;53.6;9.2I","P",,,,,"I ""^3^4^""[(U_$P($G(^VA(200,Y,""PS"")),U,6)_U)&($P($G(^VA(200,Y,""PS"")),U,2)="""")",,,"ERROR")
  1. I $D(ERROR) D Q
  1. .D FMERROR^ORUTL(.ERROR)
  1. .S:$D(ZTQUEUED) ZTREQ="@"
  1. S COL(2)=$$REPEAT^XLFSTR(" ",37)_"PROVIDER TERMINATION ACCOUNT"
  1. S COL(3)=$$LJ^XLFSTR("PROVIDER NAME",35," ")_" TYPE DATE STATUS"
  1. I '$D(@IN) D Q
  1. .S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. .Q:STOP
  1. .W !,$$CJ^XLFSTR("0 PROVIDERS FOUND",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. .S:$D(ZTQUEUED) ZTREQ="@"
  1. S IDX=0 F S IDX=$O(@IN@(IDX)) Q:+$G(IDX)=0 D
  1. .N DIVISION S DIVISION=$$HASDIV^ORUTL($P(@IN@(IDX,0),U),.DIV)
  1. .Q:DIVISION=""
  1. .N STATUS S STATUS=$$ACTIVE^XUSER($P(@IN@(IDX,0),U,1))
  1. .I 'DISINC,(+STATUS<1),($P(STATUS,U,2)'="") Q
  1. .;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
  1. .S STATUS("TEXT")=$S($P(STATUS,U,2)'="":$P(STATUS,U,2),STATUS=0:"CANNOT SIGN ON",1:"UNKNOWN")
  1. .I STATUS=0 S STATUS=1
  1. .N DATE,IDATE S DATE=+$P(@IN@(IDX,0),U,4),IDATE=9999999-DATE S DATE=$$LJ^XLFSTR($S(DATE>0:$$FMTE^XLFDT(DATE,"5D"),1:""),11," ")
  1. .S @DATA@(DIVISION,+STATUS,IDATE,$P(@IN@(IDX,0),U,2))=$$LJ^XLFSTR($P(@IN@(IDX,0),U,2),35," ")_" "_$$LJ^XLFSTR($P(@IN@(IDX,0),U,3),9)_" "_DATE_" "_STATUS("TEXT")
  1. N DIVISION S DIVISION="" F S DIVISION=$O(@DATA@(DIVISION)) Q:$G(DIVISION)=""!($G(STOP)) D
  1. .S COL(1)="DIVISION: "_DIVISION
  1. .S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. .Q:STOP
  1. .N STATUS F STATUS=1:-1:0 D Q:STOP
  1. ..Q:'$D(@DATA@(DIVISION,STATUS))
  1. ..I STATUS=0 D Q:STOP
  1. ...I ($Y+4+CBUFFER)>IOSL S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. ...Q:STOP
  1. ...W:$Y>5 !
  1. ...W $$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. ...W $$CJ^XLFSTR($$REPEAT^XLFSTR("-",34),$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. ..S IDATE=0 F S IDATE=$O(@DATA@(DIVISION,STATUS,IDATE)) Q:+$G(IDATE)=0!(STOP) D
  1. ...N NAME S NAME="" F S NAME=$O(@DATA@(DIVISION,STATUS,IDATE,NAME)) Q:$G(NAME)=""!(STOP) D
  1. ....I ($Y+CBUFFER)>IOSL D Q:STOP
  1. .....S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. ....W @DATA@(DIVISION,STATUS,IDATE,NAME)
  1. ....I ($Y+1)<IOSL W !
  1. ....S OUTPUT=1
  1. I '$G(STOP) D
  1. .I '$G(OUTPUT) D Q:$G(STOP)
  1. ..S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. ..Q:STOP
  1. ..W !,$$CJ^XLFSTR("0 PROVIDERS FOUND",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. .I ($Y+2)>IOSL S STOP=$$HEADER^ORUTL("FEE BASIS/C & A PROVIDER MISSING DEA# REPORT",.PGNUM,.COL)
  1. .Q:$G(STOP)
  1. .W !,$$CJ^XLFSTR("[END OF REPORT]",$S(+$G(IOM)>0:(IOM-1),1:79)," ")
  1. K @IN,@DATA
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. Q
  1. AUDIT ;Display the audit data for OE/RR EPCS PARAMTERS file (#100.7)
  1. ;REP IS HANDLED BY REPORTS^ORDEA01
  1. W !!,"This report displays the audit data for the logical access control feature.",!
  1. N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,ORCDATE,ORDDATE,DIV
  1. S DIR(0)="DO"_U_":"_DT_":EP"
  1. S DIR("A")="START DATE"
  1. S DIR("?",1)="The report will not display audit data created before this date."
  1. S DIR("?")="To display all audit data, leave this field blank."
  1. D ^DIR
  1. Q:$D(DTOUT)!($D(DUOUT))
  1. S ORCDATE=+$G(Y)
  1. K X,Y,DTOUT,DUOUT,DIRUT,DIROUT
  1. S DIR("A")="END DATE"
  1. S DIR("?",1)="The report will not display audit data created after this date."
  1. I ORCDATE>0 S DIR("?")="To display all audit data created through the date the report runs, leave this field blank."
  1. D ^DIR
  1. Q:$D(DTOUT)!($D(DUOUT))
  1. S ORDDATE=+$G(Y)
  1. S X=$$DIVPRMPT^ORUTL(.DIV)
  1. Q:X<1
  1. S SAVE("ORCDATE")="",SAVE("ORDDATE")="",SAVE("DIV(")=""
  1. D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
  1. Q
  1. AUDITQ ;TASKMAN ENTRY POINT
  1. ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
  1. N ORDATE,ORDATA,ORSITE,PGNUM,ORDUZ,ORDIVISION
  1. S ORDATA=$NA(^TMP($J,"ORAUDITDATA")) K @ORDATA
  1. I 'ORDDATE S ORDDATE=DT+0.235959
  1. E S ORDDATE=ORDDATE+0.235959
  1. S ORDATE=ORCDATE F S ORDATE=$O(^DIA(100.7,"C",ORDATE)) Q:ORDATE=""!(ORDATE>ORDDATE) D
  1. .N ORIEN
  1. .S ORIEN=0 F S ORIEN=$O(^DIA(100.7,"C",ORDATE,ORIEN)) Q:ORIEN="" D
  1. ..N ORNAME,ORACTION,ORTEXT,ORFIELD,OROUTPUT,ORCOUNT,ORITM
  1. ..S ORFIELD=$P($G(^DIA(100.7,ORIEN,0)),U,3)
  1. ..S ORNAME=$P($G(^DIA(100.7,ORIEN,3.1)),U)
  1. ..S:$G(ORNAME)="" ORNAME=$P($G(^DIA(100.7,ORIEN,2.1)),U)
  1. ..I ORFIELD="1,.01" D Q:ORDIVISION=""
  1. ...S ORDIVISION=$$HASDIV^ORUTL(ORNAME,.DIV)
  1. ..I $D(^DIA(100.7,ORIEN,2.1))=1,'$D(^DIA(100.7,ORIEN,3.1)) S ORACTION="Disabled",ORNAME(1)=$G(^DIA(100.7,ORIEN,2))
  1. ..I '$D(^DIA(100.7,ORIEN,2.1)),$D(^DIA(100.7,ORIEN,3.1))=1 S ORACTION="Enabled",ORNAME(1)=$G(^DIA(100.7,ORIEN,3))
  1. ..I $D(^DIA(100.7,ORIEN,2.1))=1,$D(^DIA(100.7,ORIEN,3.1))=1 D
  1. ...I ORFIELD=.02 S ORACTION=$S($G(^DIA(100.7,ORIEN,2))="YES":"Disabled",1:"Enabled")
  1. ...E S ORACTION="Modified"
  1. ...S ORNAME(1)=$G(^DIA(100.7,ORIEN,3))
  1. ..I ORFIELD=.01 D Q
  1. ...S $P(@ORDATA@("TOP",$P($G(^DIA(100.7,ORIEN,0)),U)),U,3)=ORNAME(1)
  1. ..S ORNAME("USER")=$$GET1^DIQ(200,$P($G(^DIA(100.7,ORIEN,0)),U,4)_",",.01)
  1. ..S:ORNAME("USER")="" ORNAME("USER")="User #"_$P($G(^DIA(100.7,ORIEN,0)),U,4)
  1. ..S ORTEXT=ORACTION_" on "_$$FMTE^XLFDT(ORDATE)_" by "_ORNAME("USER")
  1. ..I $P($G(^DIA(100.7,ORIEN,4.1)),U)'="" S ORTEXT=ORTEXT_" with option "_$$GET1^DIQ(19,$P($G(^DIA(100.7,ORIEN,4.1)),U)_",",.01)
  1. ..I ORFIELD=.02,ORACTION="Modified" S ORTEXT=ORTEXT_" from "_$G(^DIA(100.7,ORIEN,2))_" to "_ORNAME(1)
  1. ..S ORTEXT=ORTEXT_"."
  1. ..I ORFIELD="1,.01" S OROUTPUT=$NA(@ORDATA@(ORDIVISION,ORNAME,ORIEN))
  1. ..E S OROUTPUT=$NA(@ORDATA@("TOP",$P($G(^DIA(100.7,ORIEN,0)),U),ORIEN))
  1. ..S ORITM=1+$P($G(@($P(OROUTPUT,","_ORIEN_")")_")")),U,2),ORTEXT=$$PAD^ORUTL(ORITM,3)_ORITM_": "_ORTEXT
  1. ..D WRAP^ORUTL(ORTEXT,OROUTPUT)
  1. ..S ORCOUNT=@OROUTPUT
  1. ..S OROUTPUT=$P(OROUTPUT,","_ORIEN_")")_")",$P(@OROUTPUT,U)=ORCOUNT+$G(@OROUTPUT),$P(@OROUTPUT,U,2)=1+$P($G(@OROUTPUT),U,2)
  1. ..I ORFIELD'=.02 S $P(@OROUTPUT,U,3)=ORNAME(1)
  1. S STOP=$$HEADER^ORUTL("LOGICAL ACCESS CONTROL AUDIT REPORT",.PGNUM)
  1. Q:STOP
  1. S ORSITE(1)=$O(^ORD(100.7,0)),ORSITE=$$GET1^DIQ(100.7,ORSITE(1)_",",.01)
  1. I ORSITE="" S ORSITE=$P(@ORDATA@("TOP",ORSITE(1)),U,3)
  1. W "SITE: "_ORSITE
  1. S ORDIEN=0 F S ORDIEN=$O(@ORDATA@("TOP",ORSITE(1),ORDIEN)) Q:ORDIEN=""!(STOP) D
  1. .N ORLINE
  1. .S ORLINE=0 F S ORLINE=$O(@ORDATA@("TOP",ORSITE(1),ORDIEN,ORLINE)) Q:ORLINE=""!(STOP) D
  1. ..I ($Y+CBUFFER+1)>IOSL D Q:STOP
  1. ...S STOP=$$HEADER^ORUTL("LOGICAL ACCESS CONTROL AUDIT REPORT",.PGNUM)
  1. ..W !,@ORDATA@("TOP",ORSITE(1),ORDIEN,ORLINE)
  1. Q:STOP
  1. S ORDIVISION="" F S ORDIVISION=$O(@ORDATA@(ORDIVISION)) Q:ORDIVISION=""!(STOP) D
  1. .Q:ORDIVISION="TOP"
  1. .I ($Y+CBUFFER+2)>IOSL D Q:STOP
  1. ..S STOP=$$HEADER^ORUTL("LOGICAL ACCESS CONTROL AUDIT REPORT",.PGNUM)
  1. .W !!,"DIVISION: "_ORDIVISION
  1. .S ORDUZ=0 F S ORDUZ=$O(@ORDATA@(ORDIVISION,ORDUZ)) Q:ORDUZ=""!(STOP) D
  1. ..I ($Y+CBUFFER+@ORDATA@(ORDIVISION,ORDUZ))>IOSL D Q:STOP
  1. ...S STOP=$$HEADER^ORUTL("LOGICAL ACCESS CONTROL AUDIT REPORT",.PGNUM)
  1. ..N ORDIEN,ORUSER
  1. ..S ORUSER=$$GET1^DIQ(200,ORDUZ_",",.01)
  1. ..S:ORUSER="" ORUSER=$P(@ORDATA@(ORDIVISION,ORDUZ),U,3)
  1. ..W !,"USER: "_ORUSER
  1. ..S ORDIEN=0 F S ORDIEN=$O(@ORDATA@(ORDIVISION,ORDUZ,ORDIEN)) Q:ORDIEN="" D
  1. ...N ORLINE
  1. ...S ORLINE=0 F S ORLINE=$O(@ORDATA@(ORDIVISION,ORDUZ,ORDIEN,ORLINE)) Q:ORLINE="" D
  1. ....W !,@ORDATA@(ORDIVISION,ORDUZ,ORDIEN,ORLINE)
  1. K @ORDATA
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. Q
  1. LAST ;List those providers that contain a space and/or punctuation in the last name
  1. ;REP IS HANDLED BY REPORTS^ORDEA01
  1. W !!,"This report identifies providers with one or more space or punctuation",!
  1. W "characters in their family (last) name. These providers may not be able to",!
  1. W "link their PIV card using CPRS GUI. For these providers, someone may have",!
  1. W "to use the Data Entry for e-Prescribing Controlled Substances GUI and",!
  1. W "manually enter the subject alternative name stored on the provider's PIV",!
  1. W "card.",!!
  1. W "Additionally, it is recommended that for those providers who's NAME COMPONENTS",!
  1. W "file (#20) entry does not exactly match the value in the NAME field (#.01) in",!
  1. W "the NEW PERSON file (#200), either the NAME COMPONENTS file entry or the value",!
  1. W "in the NAME field in the NEW PERSON file are modified so that both are the same.",!
  1. N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,DISINC,DIV,SCREEN2,SAVE
  1. S DISINC=$$DISPRMPT^ORDEA01()
  1. Q:DISINC=U
  1. W !
  1. S DIR(0)="Y"_U
  1. S DIR("A",1)="Do you want to include providers who have already linked their PIV card"
  1. S DIR("A")="with their VistA account"
  1. S DIR("B")="NO"
  1. D ^DIR
  1. Q:$D(DIRUT)
  1. I 'Y S SCREEN2="I $$GET1^DIQ(200,Y_"","",501.2)="""""
  1. S X=$$DIVPRMPT^ORUTL(.DIV)
  1. Q:X<1
  1. S SAVE("DISINC")="",SAVE("DIV(")=""
  1. S:$D(SCREEN2) SAVE("SCREEN2")=""
  1. D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
  1. Q
  1. LASTQ ;TASKMAN ENTRY POINT
  1. ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
  1. N Y,OUT,DATA,REASON,PGNUM,COL,STOP,OUTPUT,DHEADER
  1. S DATA=$NA(^TMP($J,"ORLASTMP")) K @DATA
  1. S COL(2)=$$LJ^XLFSTR("PROVIDER NAME",37," ")_"ACCOUNT STATUS"
  1. S REASON="THE NAME COMPONENTS FILE (#20) ENTRY DOES NOT MATCH THE NAME FIELD (#.01) IN THE "
  1. S REASON=REASON_"NEW PERSON FILE (#200)."
  1. ;IA #10076
  1. S Y=0 F S Y=$O(^XUSEC("ORES",Y)) Q:+$G(Y)=0 D
  1. .N STATUS S STATUS=$$ACTIVE^XUSER(Y)
  1. .I 'DISINC,(+STATUS<1),($P(STATUS,U,2)'="") Q
  1. .;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
  1. .S STATUS("TEXT")=$S($P(STATUS,U,2)'="":$P(STATUS,U,2),STATUS=0:"CANNOT SIGN ON",1:"UNKNOWN")
  1. .I STATUS=0 S STATUS=1
  1. .N DIVISION S DIVISION=$$HASDIV^ORUTL(Y,.DIV)
  1. .Q:DIVISION=""
  1. .I $D(SCREEN2) X SCREEN2 I '$T Q
  1. .N ONAME,CNAME,ITEM
  1. .S ONAME=$$GET1^DIQ(200,Y_",",.01)
  1. .D NAMECOMP^XLFNAME(.ONAME)
  1. .S ONAME("STRIPPED")=$$STRIP^ORDEA01A(ONAME("FAMILY"))
  1. .S CNAME("FILE")=200,CNAME("FIELD")=.01,CNAME("IENS")=Y_","
  1. .S CNAME=$$NAMEFMT^XLFNAME(.CNAME,"F","C")
  1. .D NAMECOMP^XLFNAME(.CNAME)
  1. .S CNAME("STRIPPED")=$$STRIP^ORDEA01A(CNAME("FAMILY"))
  1. .I ONAME("FAMILY")'=ONAME("STRIPPED") S @DATA@(DIVISION,+STATUS,ONAME)=STATUS("TEXT")
  1. .I ONAME("FAMILY")=ONAME("STRIPPED")&(CNAME("FAMILY")'=CNAME("STRIPPED")) D
  1. ..S @DATA@(DIVISION,+STATUS,ONAME)=STATUS("TEXT")
  1. ..S @DATA@(DIVISION,+STATUS,ONAME,CNAME)=""
  1. .F ITEM="FAMILY","GIVEN","MIDDLE","SUFFIX" D
  1. ..I ONAME(ITEM)'=CNAME(ITEM) D
  1. ...S @DATA@(DIVISION,+STATUS,ONAME)=STATUS("TEXT")
  1. ...S @DATA@(DIVISION,+STATUS,ONAME,CNAME)=REASON
  1. N DIVISION S DIVISION="" F S DIVISION=$O(@DATA@(DIVISION)) Q:$G(DIVISION)=""!($G(STOP)) D
  1. .S COL(1)="DIVISION: "_DIVISION
  1. .S STOP=$$HEADER^ORUTL("PROVIDER LAST NAME REPORT",.PGNUM,.COL)
  1. .Q:STOP
  1. .S DHEADER=0
  1. .N STATUS F STATUS=1:-1:0 D Q:STOP
  1. ..N NAME S NAME="" F S NAME=$O(@DATA@(DIVISION,STATUS,NAME)) Q:$G(NAME)=""!(STOP) D
  1. ...N NAMEC,OUT S NAMEC="" F S NAMEC=$O(@DATA@(DIVISION,STATUS,NAME,NAMEC)) Q:$G(NAMEC)=""!(STOP) D
  1. ....D WRAP^ORUTL(" NAME COMPONENTS: "_NAMEC,"OUT") S OUT=OUT+1
  1. ....I $G(@DATA@(DIVISION,STATUS,NAME,NAMEC))'="" D WRAP^ORUTL(" "_@DATA@(DIVISION,STATUS,NAME,NAMEC),"OUT")
  1. ...I ($Y+$G(OUT)+CBUFFER+$S(STATUS=0&('DHEADER):3,1:0))>IOSL D Q:STOP
  1. ....S STOP=$$HEADER^ORUTL("PROVIDER LAST NAME REPORT",.PGNUM,.COL)
  1. ...I STATUS=0,('DHEADER) D
  1. ....W:$Y>4 !
  1. ....W $$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. ....W $$CJ^XLFSTR($$REPEAT^XLFSTR("-",34),$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. ....S DHEADER=1
  1. ...W $$LJ^XLFSTR(NAME,37," ")_@DATA@(DIVISION,STATUS,NAME),!
  1. ...S OUT=0 F S OUT=$O(OUT(OUT)) Q:'OUT W OUT(OUT) I ($Y+1)<IOSL W !
  1. ...S OUTPUT=1
  1. I '$G(STOP) D
  1. .I '$G(OUTPUT) D Q:$G(STOP)
  1. ..S STOP=$$HEADER^ORUTL("PROVIDER LAST NAME REPORT",.PGNUM,.COL)
  1. ..Q:STOP
  1. ..W !,$$CJ^XLFSTR("No family (last) name issues found.",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
  1. .I ($Y+2)>IOSL S STOP=$$HEADER^ORUTL("PROVIDER LAST NAME REPORT",.PGNUM,.COL)
  1. .Q:$G(STOP)
  1. .W !,$$CJ^XLFSTR("[END OF REPORT]",$S(+$G(IOM)>0:(IOM-1),1:79)," ")
  1. K @DATA
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. Q