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

PSJDSS.m

Go to the documentation of this file.
  1. PSJDSS ;ALB/JRC-REGENERATE DSS EXTRACT DATA FILE (#728.113) & (728.904) ; 10/8/08 1:53pm
  1. ;;5.0; INPATIENT MEDICATIONS ;**210**;16 DEC 97;Build 27
  1. Q
  1. ;
  1. ;This routine was written to regenerate lost IV or UD data that is
  1. ;normally stored in DSS intermediate files (#728.113) and (#728.904).
  1. ;When this routine is invoked the users are prompted for a date range
  1. ;The routine then loops thru the "AIV" xref in the case of IV or the
  1. ;"AUS" xref in the case of UD, validates the orders and regenerates
  1. ;the records.
  1. ;
  1. ;Important Note: If the entries for a given range are not cleared the
  1. ; file is going to end with duplicates, so a check is
  1. ; done on file (#728.113) or (#728.904) to see if any
  1. ; entries exist, if they do, the program quits.
  1. ;
  1. ; Input: EXTRACT = "IV" or "UD"
  1. ;
  1. EN ;Entry Point
  1. ;Check input
  1. Q:'$G(EXTRACT)=""
  1. N STDATE,ENDDATE
  1. ;Get start and stop dates
  1. Q:'$$DATE()
  1. Q:'$$CHECK(EXTRACT)
  1. S ZTDESC=EXTRACT_" EXTRACT DATA FILE: "_STDATE_" TO "_ENDDATE_" RECOMPILE",ZTRTN="START^PSJDSS",ZTIO=""
  1. F I="EXTRACT","STDATE","ENDDATE" S ZTSAVE(I)=""
  1. D ^%ZTLOAD
  1. I $D(ZTSK) D
  1. .W !,"Request queued as Task #",ZTSK,".",!
  1. Q
  1. START ;Start recompile after queue
  1. N COUNT
  1. ;Process records and update intermediate file
  1. D @EXTRACT
  1. ;Send completion message
  1. D MSG
  1. ;verify ^tmp global is deleted
  1. K ^TMP($J)
  1. Q
  1. ;
  1. DATE() ;Prompt user for start date
  1. N DIR,X,Y,DIRUT
  1. S DIR(0)="D"
  1. S DIR("A")="Enter Start Date"
  1. D ^DIR
  1. I $D(DIRUT) Q 0
  1. S STDATE=Y
  1. ;Prompt user for end date
  1. K DIR,X,Y
  1. S DIR(0)="D"
  1. S DIR("A")="Enter Stop Date"
  1. D ^DIR
  1. I $D(DIRUT) Q 0
  1. S ENDDATE=Y
  1. Q 1
  1. ;
  1. CHECK(X) ;Check intermediate file for existing entries in selected time frame
  1. ;if entries exist quit.
  1. N FILE S FILE=""
  1. S FILE=$S(X="IV":728.113,1:728.904)
  1. I $O(^ECX(FILE,"A",STDATE-.001))&($O(^(STDATE-.001))'>ENDDATE) D Q 0
  1. .W !!!,?3,"******* Entries in file "_$S(X="IV":"(#728.113)",1:"(#728.904)")_" exist for selected time frame ****** "
  1. .W !,?10,"****** Please purge entries before proceeding!!!! ***** "
  1. Q 1
  1. ;
  1. IV ;Process iv records to be recreated for intermediate file
  1. ;init variables
  1. N DATE,DFN,ON,PSIVNOW,PSIVI,PSIVQTY,PSIVC,LABN
  1. ;$order thru ^PS(55,"AIV",dtorder,dfn,on) to regenerate data
  1. S DATE=STDATE-.001,ENDDATE=ENDDATE_.9999
  1. S DATE=0 F S DATE=$O(^PS(55,"AIV",DATE)) Q:'DATE D
  1. .S DFN=0 F S DFN=$O(^PS(55,"AIV",DATE,DFN)) Q:'DFN D
  1. ..S ON=0 F S ON=$O(^PS(55,"AIV",DATE,DFN,ON)) Q:'ON D
  1. ...S LABN=0 F S LABN=$O(^PS(55,DFN,"IV",ON,"LAB",LABN)) Q:'LABN D
  1. ....S PSIVC=$P($G(^PS(55,DFN,"IV",ON,"LAB",LABN,0)),U,3)
  1. ....S PSIVNOW=$P($G(^PS(55,DFN,"IV",ON,"LAB",LABN,0)),U,2)
  1. ....Q:PSIVNOW<STDATE!(PSIVNOW>ENDDATE)
  1. ....S PSIVQTY=$P($G(^PS(55,DFN,"IV",ON,"LAB",LABN,0)),U,5) I +PSIVQTY=0 S PSIVQTY=1
  1. ....F PSIVI=1:1:PSIVQTY D IVUPDATE
  1. Q
  1. ;
  1. UD ;Process ud records to be recreated for intermediate file
  1. ;init variables
  1. N DATE,DFN,ON,DISP,NODE,DRUG,QTY,COST,WARD,PROVIDER,HOW,PSGSTRT,DDATE
  1. ;$order thru ^PS(55,5,"AUS",stop date/time,on) to regenerate data
  1. S DATE=STDATE-.001,ENDDATE=ENDDATE_.9999,(DFN,COUNT)=0
  1. F S DFN=$O(^PS(55,DFN)) Q:'DFN D
  1. .S DATE=0
  1. .F S DATE=$O(^PS(55,DFN,5,"AUS",DATE)) Q:'DATE D
  1. ..S ON=0 F S ON=$O(^PS(55,DFN,5,"AUS",DATE,ON)) Q:ON'>0 D
  1. ...;Look at dispense log multiple 55.0611 check disp field (#.01)
  1. ...S DISP=0 F S DISP=$O(^PS(55,DFN,5,ON,11,DISP)) Q:DISP'>0 D
  1. ....S NODE=$G(^PS(55,DFN,5,ON,11,DISP,0)) Q:NODE=""
  1. ....S PSGSTRT=$P($G(^PS(55,DFN,5,ON,2)),"^",2)
  1. ....S DDATE=$P(NODE,U),DRUG=+$P(NODE,U,2),QTY=$P(NODE,U,3),COST=$P(NODE,U,4),WARD=$P(NODE,U,7),PROVIDER=$P(NODE,U,8),HOW=$P(NODE,5)
  1. ....Q:DDATE<STDATE!(DDATE>ENDDATE)
  1. ....D UDUPDATE
  1. Q
  1. ;
  1. IVUPDATE ;Update dss intermediate file (#728.113)
  1. S X="ECXPIV1" X ^%ZOSF("TEST") Q:'$T
  1. N X,PROV,TYP,START,A,IVROOM,B,DSDATE,DRGTYP,DRG,ND,ADSTR,ADUNITS,SOLSTR,DDRG,DCST,Y,ECUD
  1. K ^TMP($J)
  1. S X=$G(^PS(55,DFN,"IV",+ON,0)),PROV=$P(X,U,6),TYP=$P(X,U,4),START=$P(X,U,2)
  1. S A=$G(^PS(55,DFN,"IV",+ON,2)),IVROOM=$P(A,"^",2),B=$G(^PS(55,DFN,"IV",+ON,4)),DSDATE=$S($P(B,"^",2)]"":$P(B,"^",2),1:$P(A,"^"))
  1. F DRGTYP="AD","SOL" F DRG=0:0 S DRG=$O(^PS(55,DFN,"IV",+ON,DRGTYP,DRG)) Q:'DRG D
  1. .S ND=$G(^PS(55,DFN,"IV",+ON,DRGTYP,DRG,0)),(ADSTR,ADUNITS,SOLSTR)=""
  1. .S @(DRGTYP_"STR")=$P(ND,U,2),ND=$G(^PS($S(DRGTYP="AD":52.6,1:52.7),+ND,0)),DDRG=$P(ND,U,2),DCST=$P(ND,U,7)
  1. .I DRGTYP="AD" S Y=$P(ND,U,3) I Y S Y=$$CODES^PSIVUTL(Y,52.6,2) S ADUNITS=Y
  1. .S ECUD=DFN_U_+ON_U_DDRG_U_PSIVNOW_U_PSIVC_U_ADSTR_U_ADUNITS_U_+SOLSTR_U_PROV_U_TYP_U_DCST
  1. .S ECUD=ECUD_U_$P($G(^PS(55,DFN,"IV",+ON,"DSS")),"^")_U_START_U_IVROOM_U_DSDATE S ^TMP($J,DFN,ON,DDRG)=ECUD D ^ECXPIV1 S COUNT=$G(COUNT)+1
  1. Q
  1. ;
  1. UDUPDATE ;Update unit dose extract data file (#728.904)
  1. S X="ECXUD1" X ^%ZOSF("TEST") Q:'$T
  1. S ECUD=DFN_"^"_DDATE_"^"_DRUG_"^"_QTY_"^"_WARD_"^"_PROVIDER_";200^"_COST_"^"_PSGSTRT_"^"_ON D ^ECXUD1 S COUNT=$G(COUNT)+1
  1. Q
  1. ;
  1. MSG ; send message to mail group 'DSS-ECGRP'
  1. N XMSUB,XMDUZ,XMY,ECMSG,XMTEXT,ECGRP
  1. S XMSUB=EXTRACT_" INTERMEDIATE DATA FOR DSS"
  1. S XMDUZ="DSS SYSTEM",ECGRP=$S(EXTRACT="IV":"IV",1:"UD")
  1. K XMY S XMY("G.DSS-"_ECGRP)=""
  1. S ECMSG(1,0)="The "_EXTRACT_" information has been successfully regenerated"
  1. S ECMSG(2,0)="from "_$$FMTE^XLFDT(STDATE)_" to "_$$FMTE^XLFDT(ENDDATE)
  1. S ECMSG(3,0)=" "
  1. S ECMSG(4,0)="A total of "_COUNT_" records were written."
  1. S ECMSG(5,0)=" "
  1. S XMTEXT="ECMSG("
  1. D ^XMD
  1. Q