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

PSOORED6.m

Go to the documentation of this file.
  1. PSOORED6 ;BHAM ISC/SAB-edit orders from backdoor ;05-Sep-2013 15:44;DU
  1. ;;7.0;OUTPATIENT PHARMACY;**78,104,117,133,1005,1013,1014,143,219,148,247,268,260,269,1015,1016**;DEC 1997;Build 74
  1. ;External reference to ^PSDRUG supported by DBIA 221
  1. ;External reference to ^PS(50.7 supported by DBIA 2223
  1. ;External reference ^PS(50.606 supported by DBIA 2174
  1. ; Modified - IHS/CIA/PLS - 06/15/04 - Line DRG+20 (Mod removed in 1015)
  1. ; 09/07/04 - Line UPDATE+25
  1. ; 09/15/06 - Line UPDATE+7 added
  1. ; 10/14/11 - Line UPDATE+11 and UPDATE+28
  1. ; 05/22/12 - Line UPDATE+19, UPDATE+56
  1. ; 05/31/12 - Line UPDATE+13, UPDATE+38
  1. ; 06/21/12 - Line UPDATE+12, UPDATE+40
  1. DRG ;select drug
  1. S PSORX("EDIT")=1,RX0HLD=RX0
  1. S PSODRUG("IEN")=$S($G(PSODRUG("IEN"))]"":PSODRUG("IEN"),1:$P(RX0,"^",6)),PSODRUG("NAME")=$S($G(PSODRUG("NAME"))]"":PSODRUG("NAME"),1:$P(^PSDRUG($P(RX0,"^",6),0),"^"))
  1. D ^PSODRG I PSODRUG("IEN")=$P(RX0,"^",6) K PSORXED("FLD",6)
  1. D:PSODRUG("IEN")'=$P(RX0,"^",6) I $G(PSORX("DFLG")) K PSORXED("FLD",6) S PSORXED("DFLG")=1 Q
  1. .D POST^PSODRG
  1. .I '$O(^PSRX(PSORXED("IRXN"),1,0)) S PSORXED("FLD",17)=$G(PSODRUG("COST"))
  1. .I $G(PSORX("DFLG")) K PSORXED("FLD",6),PSODRUG,PSOOIFLG,PSOSIGFL,VALMSG Q
  1. .D KV S DIR(0)="Y",DIR("B")="YES"
  1. .S DIR("A",1)="You have changed the dispense drug from"
  1. .S DIR("A",2)=$P(^PSDRUG($P(PSORXED("RX0"),"^",6),0),"^")_" to "_$P(^PSDRUG(PSODRUG("IEN"),0),"^")_"."
  1. .I $P($G(^PSRX(PSORXED("IRXN"),"SIG")),"^",2),$O(^PSRX(PSORXED("IRXN"),"SIG1",0)) S DIR("A",3)="" D
  1. ..F I=0:0 S I=$O(^PSRX(PSORXED("IRXN"),"SIG1",I)) Q:'I S DIR("A",3+I)=$S(I=1:"Current SIG: ",1:"")_$G(^PSRX(PSORXED("IRXN"),"SIG1",I,0))
  1. .S DIR("A")="Do You want to Edit the SIG"
  1. .D ^DIR K DIR I $D(DIRUT) S PSORX("DFLG")=1 D M1
  1. .Q:$D(DIRUT)!('Y)
  1. .S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ
  1. .I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q
  1. .D:$G(PSOSIGFL) M2
  1. S RX0=RX0HLD K RX0HLD I $G(PSODRUG("OI"))=$G(PSOI) D Q
  1. .D:$O(^TMP("PSORXDC",$J,0))
  1. ..W !!,"This edit will discontinue the duplicate Rx & change the dispensed drug!"
  1. ..K DIR,X,Y S DIR("A")="Do You Want to Proceed",DIR("B")="NO",DIR(0)="Y"
  1. ..D ^DIR K DIR S:'Y!($D(DIRUT)) PSORXED("DFLG")=1 D:Y DCORD^PSONEW2
  1. .Q:$G(PSORXED("DFLG"))
  1. .I PSODRUG("IEN")'=$P(RX0,"^",6) D
  1. ..S PSORXED("FLD",6)=PSODRUG("IEN"),PSORXED("FLD",39.2)=PSOI
  1. .S:$G(PSODRUG("TRADE NAME"))]"" PSORXED("FLD",6.5)=PSODRUG("TRADE NAME")
  1. .S:$G(PSODRUG("NDC"))]"" PSORXED("FLD",27)=PSODRUG("NDC")
  1. .S:$G(PSODRUG("DAW"))]"" PSORXED("FLD",81)=PSODRUG("DAW")
  1. W !!,"New Orderable Item selected. This edit will create a new prescription!",! D PAUSE^VALM1 S VALMSG="New Orderable Item selected. This edit will create a new prescription!" S (PSOOIFLG,PSOSIGFL)=1
  1. Q
  1. PSOCOU ;patient counseling
  1. K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=41 D EN^DIQ1 K DIC,DIQ
  1. D KV S DIR(0)="52,41" S:$G(PSORXED(52,DA,DR))]"" DIR("B")=PSORXED(52,DA,DR) D ^DIR K DIR,PSORXED(52,DA,DR)
  1. I $D(DIRUT) K PSORXED("FLD",41) D KV Q
  1. S PSORXED("FLD",DR)=Y D K DIRUT
  1. .I Y D Q
  1. ..K DIC,DIQ S DIC=52,DA=PSORXED("IRXN"),DIQ="PSORXED",DR=42 D EN^DIQ1 K DIC,DIQ
  1. ..K DIR,DIRUT S DIR(0)="52,42" S:$G(PSORXED(52,DA,DR))]"" DIR("B")=PSORXED(52,DA,DR) D ^DIR K DIR,PSORXED(52,DA,DR)
  1. ..I $D(DIRUT) K PSORXED("FLD",41),DUOUT,DTOUT Q
  1. ..S PSORXED("FLD",42)=Y
  1. .S PSORXED("FLD",41)=0,PSORXED("FLD",42)="@"
  1. Q
  1. PSOI ;select orderable item
  1. W !!,"Current Orderable Item: "_$P(^PS(50.7,PSOI,0),"^")_" "_$P(^PS(50.606,$P(^(0),"^",2),0),"^")
  1. S DIC("B")=$P(^PS(50.7,PSOI,0),"^"),DIC="^PS(50.7,",DIC(0)="AEMQZ"
  1. S DIC("S")="I '$P(^PS(50.7,+Y,0),""^"",4)!($P(^(0),""^"",4)'<DT) N PSOF,PSOL S (PSOF,PSOL)=0 F S PSOL=$O(^PSDRUG(""ASP"",+Y,PSOL)) Q:PSOF!'PSOL "
  1. S DIC("S")=DIC("S")_"I $P($G(^PSDRUG(PSOL,2)),U,3)[""O"",'$G(^(""I""))!($G(^(""I""))'<DT) S PSOF=1"
  1. ;BHW;PSO*7*269;Modify ^DIC call to call MIX^DIC to use only the B and C Cross-References.
  1. S D="B^C" D MIX^DIC1 I "^"[X S PSORXED("DFLG")=1 Q
  1. G:Y<1 PSOI Q:PSOI=+Y
  1. S PSODRUG("OI")=+Y,PSODRUG("OIN")=Y(0,0) K DIC
  1. I PSOI'=PSODRUG("OI") W !!,"New Orderable Item selected. This edit will create a new prescription!",! D K PSHOLDD Q
  1. .D PAUSE^VALM1,M2
  1. .S PSHOLDD=$G(PSODRUG("IEN")) K PSODRUG("IEN"),PSODRUG("NAME") S PSODRUG("DEA")="",(PSOOIFLG,PSOSIGFL)=1
  1. .D DREN^PSOORNW2
  1. .I $G(PSHOLDD),$G(PSODRUG("IEN")),$G(PSHOLDD)'=$G(PSODRUG("IEN")) D Q:$G(PSORX("DFLG"))
  1. ..D FULL^VALM1,POST^PSODRG S VALMBCK="R"
  1. ..I $G(PSORX("DFLG")) K PSODRUG S PSODRUG("IEN")=$G(PSHOLDD),PSODRUG("NAME")=$P($G(^PSDRUG(PSODRUG("IEN"),0)),"^") K PSOOIFLG,PSOSIGFL S VALMSG=""
  1. .I '$G(PSODRUG("IEN")) W !!,"DRUG NAME REQUIRED!" D 2^PSOORNW1
  1. .I '$G(PSODRUG("IEN")) K PSORXED("FLD"),INDEL,^TMP($J,"INS1"),PSOSIGFL,VALMSG S PSORXED("DFLG")=1,VALMSG="Dispense Drug NOT Selected!" Q
  1. .D KV S DIR(0)="Y",DIR("B")="NO",DIR("A",1)="You have changed the Orderable Item from",DIR("A",2)=$P(^PS(50.7,PSOI,0),"^")_" to "_PSODRUG("OIN")_".",DIR("A")="Do You want to Edit the SIG"
  1. .D ^DIR K DIR I $D(DIRUT) K PSODRUG("OIN"),PSOOIFLG,PSOSIGFL S PSODRUG("OI")=PSOI,VALMSG="",PSORX("DFLG")=1 Q
  1. .I 'Y S PSORX("DFLG")=1 Q
  1. .S PSOREEDQ=1 D DOLST^PSOORED3,DOSE^PSOORED3 K PSOREEDQ
  1. .I '$O(PSORXED("DOSE",0)) S PSORX("DFLG")=1 Q
  1. .D:$G(PSOSIGFL) M2
  1. S PSORXED("FLD",39.2)=PSOI
  1. Q
  1. NCPDP ;Reverse previously billed Rx on an edited orderable item or drug.
  1. N RX,NPSOY
  1. S RX=$G(PSORXED("IRXN")) I RX="" D
  1. . S NPSOY=$O(PSONEW("OLD LAST RX#","")),NPSOY=$G(PSONEW("OLD LAST RX#",NPSOY)),RX=$O(^PSRX("B",NPSOY,RX))
  1. I 'RX Q
  1. D REVERSE^PSOBPSU1(RX,,"DC",7) S NCPDPFLG=0
  1. Q
  1. UPDATE ;add new data to file
  1. ;
  1. N RXREF,UPDATE,FLDS,CHGNDC
  1. N APSPRCHK,APSPRFLG S APSPRCHK=0,APSPRFLG=0
  1. Q:'$G(PSORXED("IRXN"))
  1. I $O(PSORXED("FLD",0))!($G(^TMP($J,"INS1",0))]"")!($G(INSDEL))!($O(PSORXED("ODOSE",0))) D G:'Y UPDX
  1. .K DIR,DIRUT,DTOUT,DUOUT
  1. .S DIR(0)="Y",DIR("A")="Are You Sure You Want to Update Rx "_$P(^PSRX(PSORXED("IRXN"),0),"^"),DIR("B")="Yes"
  1. .D ^DIR K DIR I 'Y D M1 Q
  1. .I $D(^PSRX(PSORXED("IRXN"),1,0)) D
  1. ..S RXREF=$P(^PSRX(PSORXED("IRXN"),0),"^",9)-$P(^PSRX(PSORXED("IRXN"),1,0),"^",4)
  1. .E S RXREF=0
  1. .K X,DIRUT,DUOUT,DTOUT
  1. UPDATE1 ;IHS/MSC/MGH separated for reissue code
  1. S:$O(PSORXED("FLD",0)) ^TMP("APSPPOS",$J,PSORXED("IRXN"))=1 ;IHS/MSC/PLS - 09/15/06
  1. I $D(PSORXED("FLD",39.3)) D UPDATE^PSODIAG ;update ICD's after edit
  1. ; - Retrieving fields before changes that are relevant for 3rd Party Billing
  1. D GETS^DIQ(52,PSORXED("IRXN")_",","4;7;8;20;22;27;81","I","FLDS")
  1. K Y S DA=PSORXED("IRXN"),DIE="^PSRX(",FLD=0
  1. F S FLD=$O(PSORXED("FLD",FLD)) Q:'FLD D
  1. .I FLD=1 S APSPRCHK=1 ;IHS/MSC/PLS - 05/22/2012
  1. .I FLD=8 D ;IHS/MSC/PLS - 06/21/2012
  1. ..Q:$$RMNRFL^APSPFUNC(PSORXED("IRXN"))
  1. ..S APSPRCHK=4
  1. .;I FLD=9,PSORXED("FLD",FLD)>$P(PSORXED("RX0"),U,9) S APSPRCHK=2 ;IHS/MSC/PLS - 10/14/2011 - Change for update to expiration date
  1. .I FLD=9 D ;IHS/MSC/PLS - 05/31/2012 - APSP 1014
  1. ..Q:PSORXED("FLD",FLD)=$P(PSORXED("RX0"),U,9) ;no change in value
  1. ..I PSORXED("FLD",FLD)>$P(PSORXED("RX0"),U,9) S APSPRCHK=2 Q
  1. ..I PSORXED("FLD",FLD)<$P(PSORXED("RX0"),U,9) S APSPRFLG=1 Q
  1. .I FLD=12!(FLD=24)!(FLD=35) D Q
  1. ..I FLD=12,PSORXED("FLD",12)="@" S $P(^PSRX(DA,3),"^",7)="" Q
  1. ..I FLD=12,PSORXED("FLD",12)]"" S $P(^PSRX(DA,3),"^",7)=PSORXED("FLD",12) Q
  1. ..I FLD=24,PSORXED("FLD",24)="@" S $P(^PSRX(DA,2),"^",4)="" Q
  1. ..I FLD=24,PSORXED("FLD",24)]"" S $P(^PSRX(DA,2),"^",4)=PSORXED("FLD",24) Q
  1. ..I FLD=35,PSORXED("FLD",35)="@" S $P(^PSRX(DA,"MP"),"^")="" Q
  1. ..I FLD=35,PSORXED("FLD",35)]"" S $P(^PSRX(DA,"MP"),"^")=PSORXED("FLD",35) Q
  1. .I FLD=114 D Q
  1. ..I PSORXED("FLD",114)="@" K ^PSRX(DA,"INS"),^PSRX(DA,"INS1")
  1. ..I PSORXED("FLD",114)'="@" D
  1. ...S ^PSRX(DA,"INS")=PSORXED("FLD",114)
  1. ...S X=PSORXED("FLD",114) D SIG^PSOHELP Q:$G(INS1)']""
  1. ...S PSORXED("SIG",1)=$E(INS1,2,9999999) K ^PSRX(DA,"INS1")
  1. ...S ^PSRX(DA,"INS1",0)="^52.0115^1^1^"_DT_"^^"
  1. ...S ^PSRX(DA,"INS1",1,0)=PSORXED("SIG",1)
  1. ..D DOLST^PSOORED3 K:PSORXED("FLD",114)="@" PSORXED("SIG") D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3
  1. .; IHS/CIA/PLS - 09/07/04 - Fix for Man Expiration Date
  1. .I FLD=29,PSORXED("FLD",29)="" S $P(^PSRX(DA,2),"^",11)="" Q
  1. .I FLD=27 D Q
  1. ..I PSORXED("FLD",27)'=$$GETNDC^PSONDCUT(DA,0) D
  1. ...S CHGNDC=1 D RXACT^PSOBPSU2(DA,0,"NDC changed from "_$$GETNDC^PSONDCUT(DA,0)_" to "_PSORXED("FLD",27)_".","E")
  1. ..D SAVNDC^PSONDCUT(DA,0,PSORXED("FLD",27),0,1)
  1. .I FLD=81 D SAVDAW^PSODAWUT(DA,0,PSORXED("FLD",81)) Q
  1. .S DR=FLD_"////"_PSORXED("FLD",FLD) D ^DIE
  1. .I FLD=4 D UDPROV^PSOOREDT Q
  1. .I APSPRCHK=4 D
  1. ..I '$P($G(PSORXED("RX2")),U,13) S APSPRCHK=0 Q ;Original dispense not released
  1. ..N LASTRFL
  1. ..S LASTRFL=$O(^PSRX(PSORXED("IRXN"),1,$C(1)),-1)
  1. ..I 'LASTRFL S APSPRCHK=4_U_$P($G(PSORXED("RX2")),U,13) Q
  1. ..I '$P($G(^PSRX(PSORXED("IRXN"),1,LASTRFL,0)),U,18) S APSPRCHK=0 Q ;Last refill not released
  1. ..S APSPRCHK=4_U_$P($G(^PSRX(PSORXED("IRXN"),1,LASTRFL,0)),U,18)
  1. .I FLD=9,APSPRFLG D ;IHS/MSC/PLS - 05/31/2012
  1. ..Q:$$RMNRFL^APSPFUNC(PSORXED("IRXN")) ;remaining fills no action required
  1. ..I '$$RMNRFL^APSPFUNC(PSORXED("IRXN")) D
  1. ...Q:'$P($G(PSORXED("RX2")),U,13) ;Original dispense not released
  1. ...N LASTRFL
  1. ...S LASTRFL=$O(^PSRX(PSORXED("IRXN"),1,$C(1)),-1)
  1. ...I 'LASTRFL S APSPRCHK=3_U_$P($G(PSORXED("RX2")),U,13) Q
  1. ...Q:'$P($G(^PSRX(PSORXED("IRXN"),1,LASTRFL,0)),U,18) ;Last refill not released
  1. ...S APSPRCHK=3_U_$P($G(^PSRX(PSORXED("IRXN"),1,LASTRFL,0)),U,18)
  1. .S APSPRFLG=0
  1. ;
  1. ; - Re-submitting Rx to ECME due to edits
  1. D RESUB^PSOORED7
  1. ;
  1. I $G(INSDEL) K ^PSRX(DA,"INS"),^PSRX(DA,"INS1") D DOLST^PSOORED3 K PSORXED("SIG") D EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3 G UPDX
  1. I $O(^TMP($J,"INS1",0)) D
  1. .K ^PSRX(DA,"INS"),^PSRX(DA,"INS1"),DD,PSORXED("SIG")
  1. .F I=0:0 S I=$O(^TMP($J,"INS1",I)) Q:'I S (PSORXED("SIG",I),^PSRX(DA,"INS1",I,0))=^TMP($J,"INS1",I,0),DD=$G(DD)+1
  1. .S ^PSRX(DA,"INS1",0)=^TMP($J,"INS1",0)
  1. .I DD=1 S ^PSRX(DA,"INS")=^PSRX(DA,"INS1",1,0)
  1. .D DOLST^PSOORED3,EN^PSOFSIG(.PSORXED),UPDSIG^PSOORED3
  1. ;IHS/MSC/PLS - 10/14/2011 - Update expiration date when more fills are added
  1. I APSPRCHK D
  1. .N CS,DE,EXTEXP,X2,NEXPDT,DA,DIE,ISSDT,DRG
  1. .S CS=0
  1. .;IHS/MSC/PLS - 05/22/2012 - Change made to support Issue Date edit
  1. .;S DE=+$E(PSODRUG("DEA"),1)
  1. .;I DE>1,DE<6 S CS=1 S:DE=2 $P(CS,U,2)=1
  1. .S DRG=$P(PSORXED("RX0"),U,6)
  1. .S CS=$$ISSCH^APSPFNC2(DRG,"2345")
  1. .S $P(CS,U,2)=$$ISSCH^APSPFNC2(DRG,"2")
  1. .S EXTEXP=$$GET1^DIQ(50,DRG,9999999.08)
  1. .S ISSDT=$P(^PSRX(PSORXED("IRXN"),0),U,13)
  1. .S X2=$S(EXTEXP:EXTEXP,$P(CS,U,2):184,CS:184,1:366)
  1. .;IHS/MSC/PLS - 05/22/2012
  1. .;S NEXPDT=$$FMADD^XLFDT($P(PSORXED("RX0",U,13),X2)
  1. .S NEXPDT=$$FMADD^XLFDT(ISSDT,X2)
  1. .;IHS/MSC/PLS - 05/22/2012 - Quit if Issue Date edited, prescription has been released and no remaining dispenses
  1. .I +APSPRCHK=1,$P(PSORXED("RX2"),U,13),'$$RMNRFL^APSPFUNC(PSORXED("IRXN")) Q
  1. .I +APSPRCHK=3,$$EXPDT^APSPAUTO(PSORXED("IRXN"),1,+$P($P(APSPRCHK,U,2),".")) S NEXPDT=$$EXPDT^APSPAUTO(PSORXED("IRXN"),1,+$P($P(APSPRCHK,U,2),"."))
  1. .I +APSPRCHK=4,$$EXPDT^APSPAUTO(PSORXED("IRXN"),1,+$P($P(APSPRCHK,U,2),".")) S NEXPDT=$$EXPDT^APSPAUTO(PSORXED("IRXN"),1,+$P($P(APSPRCHK,U,2),".")) ;IHS/MSC/PLS - 06/21/2012
  1. .S DA=PSORXED("IRXN"),DIE="^PSRX("
  1. .S DR="26///"_NEXPDT D ^DIE
  1. .S APSPRCHK=0
  1. UPDX ;
  1. K DIE,DA,DR,FLD,X,Y,PSORXED("FLD"),DD,^TMP($J,"INS1")
  1. KV K DIR,DIRUT,DTOUT,DUOUT
  1. Q
  1. UPD ;updates dosing array
  1. S HENT=ENT
  1. UPD1 ;
  1. I $G(PSORXED("CONJUNCTION",(HENT+1)))]"" S PSORXED("CONJUNCTION",HENT)=PSORXED("CONJUNCTION",(HENT+1)) D G UPD
  1. .K PSORXED("CONJUNCTION",(HENT+1))
  1. .I $D(PSORXED("DOSE",(HENT+2))) D
  1. ..S PSORXED("DOSE",(HENT+1))=PSORXED("DOSE",(HENT+2))
  1. ..S PSORXED("ODOSE",(HENT+1))=$G(PSORXED("ODOSE",(HENT+2)))
  1. ..S PSORXED("DOSE ORDERED",(HENT+1))=$G(PSORXED("DOSE ORDERED",(HENT+2)))
  1. ..S PSORXED("UNITS",(HENT+1))=$G(PSORXED("UNITS",(HENT+2)))
  1. ..S PSORXED("NOUN",(HENT+1))=$G(PSORXED("NOUN",(HENT+2)))
  1. ..S PSORXED("DURATION",(HENT+1))=$G(PSORXED("DURATION",(HENT+2)))
  1. ..S PSORXED("CONJUNCTION",(HENT+1))=$G(PSORXED("CONJUNCTION",(HENT+2)))
  1. ..S PSORXED("ROUTE",(HENT+1))=$G(PSORXED("ROUTE",(HENT+2)))
  1. ..S PSORXED("SCHEDULE",(HENT+1))=$G(PSORXED("SCHEDULE",(HENT+2)))
  1. ..S PSORXED("VERB",(HENT+1))=$G(PSORXED("VERB",(HENT+2)))
  1. ..K PSORXED("DOSE",(HENT+2)),PSORXED("ODOSE",(HENT+2)),PSORXED("DOSE ORDERED",(HENT+2))
  1. ..K PSORXED("UNITS",(HENT+2)),PSORXED("NOUN",(HENT+2)),PSORXED("DURATION",(HENT+2)),PSORXED("ROUTE",(HENT+2)),PSORXED("SCHEDULE",(HENT+2)),PSORXED("VERB",(HENT+2))
  1. .S HENT=HENT+1
  1. F I=0:0 S I=$O(PSORXED("DOSE",I)) Q:'I S SENT=$G(SENT)+1
  1. Q
  1. ;
  1. M1 D M1^PSOOREDX
  1. Q
  1. M2 D M2^PSOOREDX
  1. Q