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

APSPDIR.m

Go to the documentation of this file.
  1. APSPDIR ;IHS/CIA/PLS - ASKS DATA FOR RX ORDER ENTRY ;25-Apr-2016 14:22;DU
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1005,1006,1008,1013,1015,1017,1018,1021**;Sep 23, 2004;Build 14
  1. ; This routine contains additional prompts for input of IHS specific data.
  1. ; Original Entry points courtesy of Patrick Cox.
  1. ; Patch 1006 adds new TRPDCLS entry point.
  1. ; Patch 1008 adds support for SUBSTITUTION and CASH DUE prompts and check for SANS default Chronic Med prompt
  1. ; Patch 1015 added PSODRUG("DAW") at SUBS+3
  1. ; Patch 1017 adds support for Discharge Medication
  1. BST(PSODIR) ; EP - Bill Status
  1. N DIR,DIC,X,Y,B
  1. S DIR(0)="52,9999999.07"
  1. S:$G(PSOBILST)]"" DIR("B")=PSOBILST
  1. S B=$$GET1^DIQ(52,+$G(PSODIR("IRXN")),9999999.07,"I")
  1. S:$L(B) DIR("B")=B
  1. S:$G(PSODIR("BST"))]"" DIR("B")=PSODIR("BST")
  1. S:$L(DIR("B")) DIR("B")=$$EXTERNAL^DILFD(52,9999999.07,,DIR("B"))
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") BSTX
  1. S PSODIR("BST")=Y
  1. BSTX Q
  1. ;
  1. MANUF(PSODIR) ; EP - Select and stuff manufacturer
  1. Q:'$G(PSODRUG("IEN"))
  1. N DIR,DIC,Y,DIE,DA,DR
  1. S DIC=55.95,DIC(0)="AEMQ"
  1. S DIC("A")="MANUFACTURER: "
  1. S:$G(PSODRUG("MANUFACTURER"))]"" DIC("B")=PSODRUG("MANUFACTURER")
  1. S:$G(PSODIR("MANUFACTURER"))]"" DIC("B")=PSODIR("MANUFACTURER")
  1. D ^DIC
  1. S PSODIR("FIELD")=0 D DIRS^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") MANUFX
  1. I Y>0 D
  1. .S PSODIR("MANUFACTURER")=$P(Y,U,2)
  1. .S PSODIR("MANUFACTURERIEN")=+Y
  1. .S DIE="^PSDRUG("
  1. .S DA=PSODRUG("IEN")
  1. .S DR="9999999.24///^S X=""`""_PSODIR(""MANUFACTURERIEN"")"
  1. .D ^DIE
  1. MANUFX Q
  1. ;
  1. LOT(PSODIR) ; EP - Collect and stuff Lot Number
  1. Q:'$G(PSODRUG("IEN"))
  1. N DIR,DIC,Y,DIE,DA,DR
  1. S DIR(0)="52,24"
  1. S:$G(PSODRUG("LOT #"))]"" DIR("B")=PSODRUG("LOT #")
  1. S:$G(PSODIR("LOT #"))]"" DIR("B")=PSODIR("LOT #")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") LOTX
  1. S PSODIR("LOT #")=Y
  1. I Y>0 D
  1. . S DIE="^PSDRUG("
  1. . S DA=PSODRUG("IEN")
  1. . S DR="9999999.25///^S X=PSODIR(""LOT #"")"
  1. . D ^DIE
  1. LOTX Q
  1. ;
  1. EXPDATE(PSODIR) ; EP - Prompt and stuff Expiration Date
  1. Q:'$G(PSODRUG("IEN"))
  1. N DIR,DIC,Y,DIE,DA,DR
  1. S DIR(0)="DO^DT::EX"
  1. S DIR("A")="EXPIRATION DATE"
  1. I $G(PSODRUG("EXPIRATION DATE"))]"" D
  1. .I (DT<PSODRUG("EXPIRATION DATE"))!($E(PSODRUG("EXPIRATION DATE"),1,2)="T+") D
  1. ..S DIR("B")=$$FMTE^XLFDT(PSODRUG("EXPIRATION DATE"))
  1. I $G(PSODIR("EXPIRATION DATE"))]"" D
  1. .S DIR("B")=$$FMTE^XLFDT(PSODIR("EXPIRATION DATE"))
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") EXPDATEX
  1. S PSODIR("EXPIRATION DATE")=Y
  1. I Y>0 D
  1. .S DIE="^PSDRUG("
  1. .S DA=PSODRUG("IEN")
  1. .S DR="9999999.26///^S X=PSODIR(""EXPIRATION DATE"")"
  1. .D ^DIE
  1. E S PSODIR("EXPIRATION DATE")=""
  1. EXPDATEX Q
  1. ;
  1. NDC(PSODIR) ; EP - Prompt for NDC value
  1. N DIR,DIC,Y,DA
  1. S DIR(0)="52,27"
  1. S DIR("A")="NDC "
  1. S:$G(PSODRUG("NDC"))]"" DIR("B")=PSODRUG("NDC")
  1. S:$G(PSODIR("NDC"))]"" DIR("B")=PSODIR("NDC")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") NDCX
  1. S PSODIR("NDC")=Y
  1. NDCX Q
  1. ;
  1. AWP(PSODIR) ; EP - Prompt for AWP value
  1. N DIR,DIC,NDC,Y,DA
  1. S DIR(0)="52,9999999.06"
  1. S DIR("A")="BENCHMARK PRICE "
  1. ;IF NDC NOT ASKED THEN NO VALUE FOR PSODIR("NDC") BUT GOT PSODRUG("NDC" )
  1. ;WILL NEED TO PASS THE FILLDATE TO APSQDAWP AND ASK FOR FILL DATE BEFOR
  1. ;E ASKING ABOUT AWP FOR MULTIPLE AWPS IHS/OKCAO/POC 7/3/2001
  1. S:'$G(PSODRUG("IEN")) PSODRUG("IEN")=$$GET1^DIQ(52,+$G(PSODIR("IRXN")),6,"I")
  1. S NDC=$G(PSODIR("NDC"))
  1. I '$L(NDC) D
  1. .S NDC=$$NDCVAL^APSPFUNC(+$G(PSODIR("IRXN")))
  1. .S:'$L(NDC) NDC=$$GET1^DIQ(50,PSODRUG("IEN"),31,"I")
  1. S DIR("B")=$$AWP^APSQDAWP(NDC,PSODRUG("IEN"),.TALK)
  1. ;S DIR("B")=$$AWP^APSQDAWP($S($D(PSODIR("NDC")):PSODIR("NDC"),1:+$G(PSODRUG("NDC"))),+$G(PSODRUG("IEN")),.TALK)
  1. ;S DIR("B")=$$AWP^APSQDAWP($S($D(PSODIR("NDC")):PSODIR("NDC"),1:PSODRUG("NDC")),PSODRUG("IEN"),.TALK,PSODIR("FILL DATE")) ;FOR MULTIPLE AWPS IHS/OKCAO /POC 7/3/2001
  1. ;SOMEOTHER DIR("B" FROM REFILL?
  1. D MSG^DIALOG("WM","",75,5,"TALK") ;IHS/OKCAO/POC 2/16/2001
  1. S:$G(PSODIR("AWP"))]"" DIR("B")=PSODIR("AWP")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") AWPX
  1. S PSODIR("AWP")=Y
  1. AWPX Q
  1. ;
  1. COST(PSODIR) ; EP - Prompt for Unit Price of Drug
  1. N DIR,DIC,Y,NDC,DA
  1. S DIR(0)="52,17"
  1. S DIR("A")="UNIT PRICE OF DRUG"
  1. S:'$G(PSODRUG("IEN")) PSODRUG("IEN")=$$GET1^DIQ(52,+$G(PSODIR("IRXN")),6,"I")
  1. S NDC=$G(PSODIR("NDC"))
  1. I '$L(NDC) D
  1. .S NDC=$$NDCVAL^APSPFUNC(+$G(PSODIR("IRXN")))
  1. .S:'$L(NDC) NDC=$$GET1^DIQ(50,PSODRUG("IEN"),31,"I")
  1. ;S DIR("B")=$$COST^APSQDAWP($S($D(PSODIR("NDC")):PSODIR("NDC"),1:PSODRUG("NDC")),PSODRUG("IEN"),.TALK)
  1. S DIR("B")=$$COST^APSQDAWP(NDC,PSODRUG("IEN"),.TALK)
  1. D MSG^DIALOG("WM","",75,5,"TALK")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") NCOST
  1. S PSODIR("COST")=Y
  1. NCOST Q
  1. ;
  1. HOLDER(PSODIR) ; EP - Prompt for holder
  1. N DIR,DIC,Y
  1. S DIR(0)="FAOU^1:10"
  1. S DIR("A")="JUMP TO FIELD//"
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") HOLDERX
  1. S PSODIR("HOLDER")=Y
  1. HOLDERX Q
  1. ;
  1. CM(PSODIR) ; EP - Chronic Med Enter/Edit
  1. N DIR,DIC,Y,DA
  1. S DIR(0)="52,9999999.02"
  1. ;IHS/MSC/PLS - 12/05/2008 - Added check for sans default
  1. ;S DIR("B")=$S($L($G(PSODIR("CM"))):$$EXTERNAL^DILFD(52,9999999.02,,PSODIR("CM")),APSPCMP>1:"YES",1:"NO")
  1. S DIR("B")=$S($L($G(PSODIR("CM"))):$$EXTERNAL^DILFD(52,9999999.02,,PSODIR("CM")),APSPCMP=2:"YES",APSPCMP=1:"NO",1:"")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") CMX
  1. S PSODIR("CM")=Y,APSP("CM")=Y
  1. CMX Q
  1. ;
  1. ;
  1. INSURER(PSODIR) ; EP - Prompt for insurer info
  1. ;PSODIR("INSURER") - blnk first time - pntr to ABSP(9002313.511
  1. ;PSODIR("DUR") = blnk first time - pntr to ABSP(9002313.473
  1. N DIR,DIC,Y
  1. S DIR(0)="YA",DIR("A")="WANT TO ADD/EDIT INSURER INFO// "
  1. S DIR("B")="NO"
  1. D ^DIR
  1. I X[U,$L(X)>1 D JUMP^PSODIR1 Q
  1. I $D(DUOUT)!($D(DTOUT)) S PSODIR("DFLG")=1 G INSURERX
  1. I Y'=1 S PSODIR("FIELD")=0 Q
  1. ;D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") INSURERX
  1. ; NOTE APSQDUR is set in APSQBRES (DUR pointer)
  1. ;SHOULD NOT BE ANY VALUE TO START WITH HERE BUT IF EDIT WILL SAVE PSODIR("INSURERS") IN APSQDUR
  1. S PSODIR("INSURER")=$$OVERRIDE^APSQBRES($G(PSODIR("INSURER")),$G(PSODIR("DUR")))
  1. S PSODIR("DUR")=APSQDUR ; set in APSQBRES- DUR pntr
  1. INSURERX Q
  1. ;
  1. TRIP(PSODIR) ; EP - Prompt for Triplicate Number for Schedule II drugs
  1. Q:'$$TRPDCLS($G(PSOTRIP),$G(PSODRUG("DEA"))) ; Check triplicate drug class ;IHS/MSC/PLS - 08/18/07
  1. N DIR,DIC,Y,DA
  1. S DIR(0)="52,9999999.14",X=""
  1. S:$G(PSODIR("TRIP"))]"" DIR("B")=PSODIR("TRIP")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") TRIPX
  1. I $L(X)>0 S PSODIR("TRIP")=X
  1. E K PSODIR("TRIP")
  1. TRIPX Q
  1. ; IHS/MSC/PLS - 08/18/07 - New API for patch 1006
  1. ; Return boolean flag indicating a match for triplicate to drug class for prescription
  1. TRPDCLS(PARAM,DCLS) ;EP
  1. Q $S('$G(PARAM):0,PARAM=1&("2"[+DCLS):1,PARAM=2&("2345"[+DCLS):1,PARAM=3:1,1:0)
  1. ;
  1. FILLDT(PSODIR) ; EP - Prompt for Fill Date
  1. N DIR,DIC,Y
  1. S:'$G(PSONEW("DAYS SUPPLY")) PSONEW("DAYS SUPPLY")=30,PSONEW("# OF REFILLS")=1
  1. S DIR("A")="FILL DATE",DIR("B")=$S($G(PSORX("FILL DATE"))]"":PSORX("FILL DATE"),1:"TODAY")
  1. S X2=PSONEW("DAYS SUPPLY")*(PSONEW("# OF REFILLS")+1)\1
  1. S X1=$S($G(PSOID):PSOID,1:DT)
  1. S X2=$S(PSONEW("DAYS SUPPLY")=X2:X2,+$G(PSODIR("CS")):184,1:366)
  1. I X2<30 D
  1. . N % S %=$P($G(PSORX("PATIENT STATUS")),"^"),X2=30
  1. . S:%?.N %=$P($G(^PS(53,+%,0)),"^") I %["AUTH ABS" S X2=5
  1. D C^%DTC S PSOFDMX=$P(X,".") I DT>X S Y=$S($G(PSOID):PSOID,1:PSORX("ISSUE DATE")) X ^DD("DD") S DIR("B")=Y
  1. S DIR(0)="D^"_$S($G(PSOID):PSOID,+$G(PSODIR("ISSUE DATE")):PSODIR("ISSUE DATE"),1:DT)_$S($G(DUZ("AG"))="I":":"_DT_":EX",1:":"_PSOFDMX_":EX")
  1. S Y=PSOFDMX X ^DD("DD")
  1. S DIR("?",1)="The earliest fill date allowed is determined by the ISSUE DATE,"
  1. S DIR("?",2)="the FILL DATE cannot be before the ISSUE DATE or AFTER the Expiration Date "
  1. S DIR("?")=Y_". Both the month and date are required."
  1. D DIR^PSODIR2 G:PSODIR("DFLG")!PSODIR("FIELD") FILLDTX
  1. S (APSEFDT,APSEDT)=Y
  1. S PSODIR("FILL DATE")=Y\1
  1. S PSORX("FILL DATE")=$$FMTE^XLFDT(Y)
  1. FILLDTX Q
  1. ;
  1. PTSTAT(PSODIR) ;
  1. PTSTATEN N DIC,DR,DIE,Y S PSODIR("FIELD")=0
  1. S:$G(PSORX("PATIENT STATUS"))]"" DIC("B")=PSORX("PATIENT STATUS")
  1. S:$G(PSODIR("PATIENT STATUS"))]"" DIC("B")=PSODIR("PATIENT STATUS")
  1. S DIC("A")="PATIENT STATUS: "
  1. S DIC(0)="QEAMZ",DIC=53 D ^DIC K DIC
  1. I X[U,$L(X)>1 D JUMP^PSODIR1 G PTSTATX
  1. I $D(DUOUT)!$D(DTOUT) S PSODIR("DFLG")=1 G PTSTATX
  1. I Y=-1 W *7," Required" G PTSTATEN
  1. S (PSODIR("PATIENT STATUS"),PSORX("PATIENT STATUS"))=+Y
  1. S (PSODIR("PTST NODE"),PSORX("PTST NODE"))=Y(0)
  1. PTSTATX K DTOUT,DUOUT,Y,DA
  1. Q
  1. ; Prompts for Substitution selection
  1. ; IHS/MSC/PLS - 03/13/08
  1. SUBS(PSODIR) ; EP - Substitution Enter/Edit
  1. N DIR,DIC,Y,DA
  1. S DIR(0)="52,9999999.25"
  1. ;IHS/MSC/PLS - 03/05/2013
  1. ;S DIR("B")=$S($L($G(PSODIR("DAW"))):$$EXTERNAL^DILFD(52,9999999.25,,PSODIR("DAW")),1:"")
  1. S DIR("B")=$S($L($G(PSODIR("DAW"))):$$EXTERNAL^DILFD(52,9999999.25,,PSODIR("DAW")),$G(PSODRUG("DAW")):PSODRUG("DAW"),1:"")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") SUBSX
  1. S PSODIR("DAW")=Y
  1. SUBSX Q
  1. ; Prompts for Cash Due
  1. CASHDUE(PSODIR) ; EP - Cash Due Enter/Edit
  1. N DIR,DIC,Y,DA
  1. S DIR(0)="52,9999999.26"
  1. S DIR("B")=$S($L($G(PSODIR("CASH DUE"))):$$EXTERNAL^DILFD(52,9999999.26,,PSODIR("CASH DUE")),1:"")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") CASHDUEX
  1. S PSODIR("CASH DUE")=Y
  1. CASHDUEX Q
  1. ; Prompts for Discharge Medication
  1. ; IHS/MSC/PLS - 06/05/13
  1. DSCMED(PSODIR) ; EP - Discharge Medication Enter/Edit
  1. Q:$$GET1^DIQ(9009033,PSOSITE,408,"I") ;P1018
  1. N DIR,DIC,Y,DA,OVAL,CFRM,DVAL
  1. S CFRM(1)="This field should be marked YES for all discharge medications"
  1. S CFRM(2)="from In-House Inpatient Unit or In-House Emergency Department."
  1. S CFRM="Are you sure you want to edit"
  1. S OVAL=$G(PSODIR("DSCMED"))
  1. S DIR(0)="52,9999999.28"
  1. S DIR("A")="DISCHARGE MEDICATION (In-House Inpatient/ER only)"
  1. S DIR("B")=$S($L($G(PSODIR("DSCMED"))):$$EXTERNAL^DILFD(52,9999999.28,,PSODIR("DSCMED")),$$INP^SDAM2(PSODFN,DT)="I":"Yes",1:"")
  1. S DIR("?")=" "
  1. S DIR("?",1)="Enter YES if this is a discharge medication from the In-House"
  1. S DIR("?",2)="Inpatient unit or In-House Emergency Department."
  1. S DIR("?",3)="This should ONLY be entered for In-House discharge medications"
  1. S DIR("?",4)="and not external discharge medications from other hospitals"
  1. S DIR("?",5)="or emergency departments."
  1. S DVAL=DIR("B")
  1. D DIR^PSODIR1 G:PSODIR("DFLG")!PSODIR("FIELD") DSCMEDX
  1. I DVAL="",Y="" D
  1. .S PSODIR("DSCMED")=Y
  1. E I DVAL="NO",Y=0 D
  1. .S PSODIR("DSCMED")=Y
  1. E I DVAL="YES",Y=1 D
  1. .S PSODIR("DSCMED")=Y
  1. E I DVAL="Yes",Y=1 D
  1. .S PSODIR("DSCMED")=Y
  1. ;I OVAL="",+Y D
  1. ;.I $$DIRYNR^APSPUTIL(.CFRM,"NO") D
  1. ;..S PSODIR("DSCMED")=Y
  1. ;.E S PSODIR("DSCMED")=0
  1. ;E I OVAL="" S PSODIR("DSCMED")=Y
  1. E D ;I (OVAL'=+Y) D
  1. .I $$DIRYNR^APSPUTIL(.CFRM,"NO") D
  1. ..S PSODIR("DSCMED")=Y
  1. DSCMEDX Q
  1. ; Allows editing of template
  1. EDIHSFLD(DA,IT,GLOBAL) ;EP
  1. ;N DA,DIR,DIRUT,DIROUT,DIE,DR
  1. ;S DA=PSODIR("IRXN")
  1. S DIE=GLOBAL,DR=IT
  1. D ^DIE
  1. Q
  1. ; EP - Field Prompt
  1. ; Input - PSONEW - Array of values for prescription
  1. ; SETFLD - Set "FLD" subnode array (default: No)
  1. IHSFLDS(PSONEW,SETFLD) ;EP
  1. S SETFLD=$G(SETFLD,0)
  1. W !!
  1. 1 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=1 D TRIP^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("TRIP"))) S PSONEW("FLD",9999999.14)=PSONEW("TRIP")
  1. 2 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=2 D NDC^APSPDIR(.PSONEW)
  1. .K PSONEW("AWP"),PSONEW("COST")
  1. .I SETFLD,$L($G(PSONEW("NDC"))) S PSONEW("FLD",27)=PSONEW("NDC")
  1. 3 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=3 D AWP^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("AWP"))) S PSONEW("FLD",9999999.06)=PSONEW("AWP")
  1. 4 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=4 D COST^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("COST"))) S PSONEW("FLD",17)=PSONEW("COST")
  1. 5 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=5 D MANUF^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("MANUFACTURER"))) S PSONEW("FLD",28)=PSONEW("MANUFACTURER")
  1. 6 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=6 D EXPDATE^APSPDIR(.PSONEW)
  1. .I SETFLD,$D(PSONEW("EXPIRATION DATE")) S PSONEW("FLD",29)=PSONEW("EXPIRATION DATE")
  1. 7 ;S PSONEW("FLD")=7 D INSURER^APSPDIR(.PSONEW)
  1. ;G:PSONEW("DFLG") END
  1. 8 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=8 D CM^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("CM"))) S PSONEW("FLD",9999999.02)=PSONEW("CM")
  1. 9 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=9 D BST^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("BST"))) S PSONEW("FLD",9999999.07)=PSONEW("BST")
  1. 10 ;D G:PSONEW("DFLG") END
  1. ;.S PSONEW("FLD")=10 D SUBS^APSPDIR(.PSONEW)
  1. ;.I SETFLD,$L($G(PSONEW("DAW"))) S PSONEW("FLD",9999999.25)=PSONEW("DAW")
  1. 11 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=11 D DSCMED^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("DSCMED"))) S PSONEW("FLD",9999999.28)=PSONEW("DSCMED")
  1. 12 D G:PSONEW("DFLG") END
  1. .S PSONEW("FLD")=12 D CASHDUE^APSPDIR(.PSONEW)
  1. .I SETFLD,$L($G(PSONEW("CASH DUE"))) S PSONEW("FLD",9999999.26)=PSONEW("CASH DUE")
  1. END Q