PSAAOP ;BIR/DB - Price Conversion Routine;4/3/00
;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**21,64**; 10/24/97;Build 4
;PSA*3*21 : 14145837
;References to ^PSDRUG( are covered by IA #2095
Q K DA,DIE,DIR,DR,PSALOC,PSALOCN,PSAOP,PSAOSITN
W !!,"PSA*3*21 corrects errors in the way pricing was done in the past. The new",!,"process correctly calculates the price per dispense unit by dividing"
W !,"the Price per Order Unit by the Dispense Units per Order Unit.",!!,"It loops through each entry in the DRUG file (#50) and corrects any problems"
W !,"found in the synonym data."
W !!,"Please note - Because this process checks each NDC in the DRUG file (#50),"
W !,"it is suggested that you queue the option to run during low usage times."
PRICE R !!,"Fix synonym entries? YES // ",AN:DTIME G NOQ:AN["^" I AN="" S AN="Y"
S AN=$E(AN,1) I "yYNn"'[AN W !!,"Answer 'Y' for YES, or 'N' for NO." K AN G PRICE
I "nN"[AN G NOQ
S PSADUZ=DUZ,ZTSAVE("PSADUZ")=""
S ZTIO=""
S ZTRTN="PSANDC^PSAAOP",ZTDESC="Drug Accountability Price Correction" D ^%ZTLOAD,HOME^%ZIS G EXITQ
;
PSANDC ;Entry point for price correction
;
K PSADRG,PSACNT,PSADRG1,PSASUB,PSADATA,DRGCNT,FIXCNT
PSADRG S PSADRG1=$S('$D(PSADRG1):$O(^PSDRUG("B",0)),1:$O(^PSDRUG("B",PSADRG1))) G QQ:PSADRG1="" K PSASUB S DRGCNT=$G(DRGCNT)+1,PSADRG=$O(^PSDRUG("B",PSADRG1,0)) I $G(^PSDRUG(PSADRG,0))="" G PSADRG
S PSANDC=$P($G(^PSDRUG(PSADRG,2)),"^",4) G PSADRG:$G(PSANDC)=""
;
PSASUB S PSASUB=$S('$D(PSASUB):$O(^PSDRUG(PSADRG,1,0)),1:$O(^PSDRUG(PSADRG,1,PSASUB))) G PSADRG:PSASUB'>0 S PSADATA=$G(^PSDRUG(PSADRG,1,PSASUB,0)) I $P(PSADATA,"^",2)=PSANDC G DONESUB
G PSASUB
DONESUB S PSAOU=$P($G(PSADATA),"^",6),PSADUOU=$P($G(PSADATA),"^",7),PSAPDUOU=$J($P($G(PSADATA),"^",8),0,3) I $G(PSAOU)=""!($G(PSADUOU)="") G PSADRG
;
S XX=PSAOU/PSADUOU,NEWPRICE=$J(XX,0,3) I NEWPRICE'=PSAPDUOU D
.S PSACNT=$S('$D(PSACNT):4,1:$G(PSACNT)+1),^TMP("PSAAOP",$J,PSACNT,0)="NDC : "_PSANDC_" Drug Name : "_$E($P($G(^PSDRUG(PSADRG,0)),"^"),1,35)
.S PSACNT=$S('$D(PSACNT):4,1:$G(PSACNT)+1),^TMP("PSAAOP",$J,PSACNT,0)="Old Price : "_$J(PSAPDUOU,8,3)_" New Price : "_$J(NEWPRICE,8,3),PSACNT=PSACNT+1,^TMP("PSAAOP",$J,PSACNT,0)=" "
.S DIE="^PSDRUG(",DA=PSADRG,DR="16///^S X=NEWPRICE" D
..F L +^PSDRUG(PSADRG,0):$S($G(DILOCKTM)>0:DILOCKTM,1:3) I Q
..D ^DIE K DIE,DA,DR
..S DA(1)=PSADRG,DIE="^PSDRUG("_DA(1)_",1,",DA=PSASUB,DR="404////^S X=NEWPRICE" D ^DIE
..L -^PSDRUG(PSADRG,0)
.S FIXCNT=$G(FIXCNT)+1
G PSADRG
QQ S ^TMP("PSAAOP",$J,2,0)=$G(DRGCNT)_" items checked, and "_$S($G(FIXCNT)="":0,1:$G(FIXCNT))_" items corrected." K PSADRG,PSAOU,PSADUOU,NEWPRICE,PSAPDUOU,DATA,PSADATA
S ^TMP("PSAAOP",$J,1,0)="Price correction process results"
S XMDUZ="Patch: PSA*3*21 price Corrector",XMSUB="Drug Accountability Synonym Fix",XMTEXT="^TMP(""PSAAOP"",$J,"
S XMY(PSADUZ)=""
G:'$D(XMY) QQ D ^XMD
K ^TMP("PSAAOP",$J)
Q
NOQ W !,"Nothing corrected." Q
EXITQ Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSAAOP 2963 printed Nov 22, 2024@16:59:02 Page 2
PSAAOP ;BIR/DB - Price Conversion Routine;4/3/00
+1 ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**21,64**; 10/24/97;Build 4
+2 ;PSA*3*21 : 14145837
+3 ;References to ^PSDRUG( are covered by IA #2095
Q KILL DA,DIE,DIR,DR,PSALOC,PSALOCN,PSAOP,PSAOSITN
+1 WRITE !!,"PSA*3*21 corrects errors in the way pricing was done in the past. The new",!,"process correctly calculates the price per dispense unit by dividing"
+2 WRITE !,"the Price per Order Unit by the Dispense Units per Order Unit.",!!,"It loops through each entry in the DRUG file (#50) and corrects any problems"
+3 WRITE !,"found in the synonym data."
+4 WRITE !!,"Please note - Because this process checks each NDC in the DRUG file (#50),"
+5 WRITE !,"it is suggested that you queue the option to run during low usage times."
PRICE READ !!,"Fix synonym entries? YES // ",AN:DTIME
if AN["^"
GOTO NOQ
IF AN=""
SET AN="Y"
+1 SET AN=$EXTRACT(AN,1)
IF "yYNn"'[AN
WRITE !!,"Answer 'Y' for YES, or 'N' for NO."
KILL AN
GOTO PRICE
+2 IF "nN"[AN
GOTO NOQ
+3 SET PSADUZ=DUZ
SET ZTSAVE("PSADUZ")=""
+4 SET ZTIO=""
+5 SET ZTRTN="PSANDC^PSAAOP"
SET ZTDESC="Drug Accountability Price Correction"
DO ^%ZTLOAD
DO HOME^%ZIS
GOTO EXITQ
+6 ;
PSANDC ;Entry point for price correction
+1 ;
+2 KILL PSADRG,PSACNT,PSADRG1,PSASUB,PSADATA,DRGCNT,FIXCNT
PSADRG SET PSADRG1=$SELECT('$DATA(PSADRG1):$ORDER(^PSDRUG("B",0)),1:$ORDER(^PSDRUG("B",PSADRG1)))
if PSADRG1=""
GOTO QQ
KILL PSASUB
SET DRGCNT=$GET(DRGCNT)+1
SET PSADRG=$ORDER(^PSDRUG("B",PSADRG1,0))
IF $GET(^PSDRUG(PSADRG,0))=""
GOTO PSADRG
+1 SET PSANDC=$PIECE($GET(^PSDRUG(PSADRG,2)),"^",4)
if $GET(PSANDC)=""
GOTO PSADRG
+2 ;
PSASUB SET PSASUB=$SELECT('$DATA(PSASUB):$ORDER(^PSDRUG(PSADRG,1,0)),1:$ORDER(^PSDRUG(PSADRG,1,PSASUB)))
if PSASUB'>0
GOTO PSADRG
SET PSADATA=$GET(^PSDRUG(PSADRG,1,PSASUB,0))
IF $PIECE(PSADATA,"^",2)=PSANDC
GOTO DONESUB
+1 GOTO PSASUB
DONESUB SET PSAOU=$PIECE($GET(PSADATA),"^",6)
SET PSADUOU=$PIECE($GET(PSADATA),"^",7)
SET PSAPDUOU=$JUSTIFY($PIECE($GET(PSADATA),"^",8),0,3)
IF $GET(PSAOU)=""!($GET(PSADUOU)="")
GOTO PSADRG
+1 ;
+2 SET XX=PSAOU/PSADUOU
SET NEWPRICE=$JUSTIFY(XX,0,3)
IF NEWPRICE'=PSAPDUOU
Begin DoDot:1
+3 SET PSACNT=$SELECT('$DATA(PSACNT):4,1:$GET(PSACNT)+1)
SET ^TMP("PSAAOP",$JOB,PSACNT,0)="NDC : "_PSANDC_" Drug Name : "_$EXTRACT($PIECE($GET(^PSDRUG(PSADRG,0)),"^"),1,35)
+4 SET PSACNT=$SELECT('$DATA(PSACNT):4,1:$GET(PSACNT)+1)
SET ^TMP("PSAAOP",$JOB,PSACNT,0)="Old Price : "_$JUSTIFY(PSAPDUOU,8,3)_" New Price : "_$JUSTIFY(NEWPRICE,8,3)
SET PSACNT=PSACNT+1
SET ^TMP("PSAAOP",$JOB,PSACNT,0)=" "
+5 SET DIE="^PSDRUG("
SET DA=PSADRG
SET DR="16///^S X=NEWPRICE"
Begin DoDot:2
+6 FOR
LOCK +^PSDRUG(PSADRG,0):$SELECT($GET(DILOCKTM)>0:DILOCKTM,1:3)
IF $TEST
QUIT
+7 DO ^DIE
KILL DIE,DA,DR
+8 SET DA(1)=PSADRG
SET DIE="^PSDRUG("_DA(1)_",1,"
SET DA=PSASUB
SET DR="404////^S X=NEWPRICE"
DO ^DIE
+9 LOCK -^PSDRUG(PSADRG,0)
End DoDot:2
+10 SET FIXCNT=$GET(FIXCNT)+1
End DoDot:1
+11 GOTO PSADRG
QQ SET ^TMP("PSAAOP",$JOB,2,0)=$GET(DRGCNT)_" items checked, and "_$SELECT($GET(FIXCNT)="":0,1:$GET(FIXCNT))_" items corrected."
KILL PSADRG,PSAOU,PSADUOU,NEWPRICE,PSAPDUOU,DATA,PSADATA
+1 SET ^TMP("PSAAOP",$JOB,1,0)="Price correction process results"
+2 SET XMDUZ="Patch: PSA*3*21 price Corrector"
SET XMSUB="Drug Accountability Synonym Fix"
SET XMTEXT="^TMP(""PSAAOP"",$J,"
+3 SET XMY(PSADUZ)=""
+4 if '$DATA(XMY)
GOTO QQ
DO ^XMD
+5 KILL ^TMP("PSAAOP",$JOB)
+6 QUIT
NOQ WRITE !,"Nothing corrected."
QUIT
EXITQ QUIT