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

PSUUD6.m

Go to the documentation of this file.
  1. PSUUD6 ;BIR/DAM - UD AMIS Summary Message I;23 MAR 2004
  1. ;;4.0;PHARMACY BENEFITS MANAGEMENT;;MARCH, 2005
  1. ;
  1. ;Reference to file #42.6 supported by DBIA 4597
  1. ;Reference to file #42.7 supported by DBIA 4598
  1. ;Reference to file #40.8 supported by DBIA 2438
  1. ;
  1. EN ;Entry point to construct globals for AMIS summary message
  1. ;Called from PSUUD3
  1. ;
  1. K UDAM ;array to hold tabulated data
  1. K SPEC ;array to hold specialty data
  1. ;
  1. S PSUDV=0
  1. F S PSUDV=$O(^XTMP(PSUUDSUB,"DIS",PSUDV)) Q:PSUDV="" D
  1. .D DISP
  1. .D RET
  1. .D TCOST
  1. .D NET
  1. .D AVG
  1. .D TRUNC
  1. .D SPEC
  1. .D DIVT
  1. .D GRAND
  1. ;
  1. D TOTAL
  1. ;
  1. Q
  1. ;
  1. DISP ;Add doses dispensed of all drugs for each division
  1. ;
  1. N DSP,A
  1. S DSP=^XTMP(PSUUDSUB,"DISP",PSUDV)
  1. S $P(UDAM(PSUDV),U,1)=DSP
  1. ;
  1. I $P(UDAM(PSUDV),U,1)["." D
  1. .S A=$F($P(UDAM(PSUDV),U,1),".") ;Find 1st position after decimal
  1. .S $P(UDAM(PSUDV),U,1)=$E($P(UDAM(PSUDV),U,1),1,(A-2)) ;Truncate
  1. ;
  1. Q
  1. ;
  1. RET ;Add doses returned of all drugs for each division
  1. ;
  1. N RET,A
  1. S RET=^XTMP(PSUUDSUB,"RET",PSUDV)
  1. S $P(UDAM(PSUDV),U,2)=RET
  1. ;
  1. I $P(UDAM(PSUDV),U,2)["." D
  1. .S A=$F($P(UDAM(PSUDV),U,2),".") ;Find 1st position after decimal
  1. .S $P(UDAM(PSUDV),U,2)=$E($P(UDAM(PSUDV),U,2),1,(A-2)) ;Truncate
  1. Q
  1. ;
  1. NET ;Calculate Net doses dispensed of all drugs
  1. ;
  1. S $P(UDAM(PSUDV),U,3)=$P(UDAM(PSUDV),U,1)-$P(UDAM(PSUDV),U,2)
  1. ;
  1. Q
  1. ;
  1. TCOST ;Find total cost per drug
  1. ;
  1. N CST,DP,RT,NT
  1. ;
  1. S CST=^XTMP(PSUUDSUB,"CST",PSUDV) ;Price per dispensed unit
  1. ;
  1. S $P(UDAM(PSUDV),U,4)=CST
  1. ;
  1. Q
  1. ;
  1. AVG ;Calculate average cost per dose
  1. ;
  1. N TCST,NET
  1. ;
  1. S NET=$P(UDAM(PSUDV),U,3) ;Net doses dispensed
  1. ;
  1. I $G(NET)'>0 S NET=1
  1. ;
  1. S TCST=$P(UDAM(PSUDV),U,4) ;Total cost
  1. ;
  1. S $P(UDAM(PSUDV),U,5)=$P($G(UDAM(PSUDV)),U,5)+(TCST/NET)
  1. ;
  1. Q
  1. ;
  1. TRUNC ;Truncate pieces with dollar values to 2 decimal places
  1. ;
  1. F I=4:1:5 D
  1. .N A,B,C
  1. .;
  1. .I $P(UDAM(PSUDV),U,I)'["." D Q
  1. ..S $P(UDAM(PSUDV),U,I)=$P(UDAM(PSUDV),U,4)_".00"
  1. .;
  1. .S A=$F($P(UDAM(PSUDV),U,I),".") ;Find 1st position after decimal
  1. .;
  1. .S B=$E($P(UDAM(PSUDV),U,I),1,(A-1)) ;Extract dollars and decimal
  1. .;
  1. .S C=$E($P(UDAM(PSUDV),U,I),A,(A+1)) ;Extract cents after decimal
  1. .;
  1. .I $L(C)'=2 S C=$E(C,1)_0
  1. .;
  1. .S $P(UDAM(PSUDV),U,I)=B_C
  1. ;
  1. M ^XTMP(PSUUDSUB,"DOSES",PSUDV)=UDAM(PSUDV)
  1. Q
  1. ;
  1. TOTAL ;Add dose totals of all divisions
  1. ;
  1. N DTOT,RTOT,NETOT,TCST,ACST
  1. ;
  1. S PSUD=0
  1. F S PSUD=$O(UDAM(PSUD)) Q:PSUD="" D
  1. .S DTOT=$G(DTOT)+$P(UDAM(PSUD),U,1) ;Total of doses dispensed
  1. .S RTOT=$G(RTOT)+$P(UDAM(PSUD),U,2) ;Total of returned doses
  1. .S NETOT=$G(NETOT)+$P(UDAM(PSUD),U,3) ;Total of net doses disp
  1. .S TCST=$G(TCST)+$P(UDAM(PSUD),U,4) ;Total of total cost
  1. .;S ACST=$G(ACST)+$P(UDAM(PSUD),U,5) ;Total of average cost
  1. .I $G(NETOT) S ACST=$G(TCST)/$G(NETOT) D
  1. ..I ACST'["." S ACST=ACST_".00" Q
  1. ..N A,B,C
  1. ..S A=$F(ACST,".") ;Find 1st position after decimal
  1. ..S B=$E(ACST,1,(A-1)) ;Extract dollars and decimal
  1. ..S C=$E(ACST,A,(A+1)) ;Extract cents after decimal
  1. ..I $L(C)'=2 S C=$E(C,1)_0
  1. ..S ACST=B_C
  1. ;
  1. S ^XTMP(PSUUDSUB,"DOSTOT")=DTOT_U_RTOT_U_NETOT_U_TCST_U_ACST
  1. ;
  1. Q
  1. ;
  1. SPEC ;Find out if a monthly extract is being run
  1. ;
  1. N PSUMT,PSUMTH
  1. I $D(PSUMON) D
  1. .S PSUMT=PSUMON_"00"
  1. .I $D(^DGAM(334,"B",PSUMT)) D SPEC1
  1. .;
  1. .S PSUMTH=PSUMT
  1. .I $D(^DGAM(345,"B",PSUMTH)) D SPEC2
  1. ;
  1. Q
  1. ;
  1. SPEC1 ;Find division names from File (#42.6) records within
  1. ;the month of the extract
  1. ;
  1. N PSUDNM
  1. ;
  1. M SPEC(334,PSUMT)=^DGAM(334,PSUMT) ;set node into array
  1. ;
  1. S PSUD1=0
  1. F S PSUD1=$O(SPEC(334,PSUMT,"SE",PSUD1)) Q:PSUD1="" D
  1. .S PSUD2=0
  1. .F S PSUD2=$O(SPEC(334,PSUMT,"SE",PSUD1,"D",PSUD2)) Q:PSUD2="" D
  1. ..;find division and match to DIVNM
  1. ..S X=PSUD2
  1. ..S PSUNM=$$VAL^PSUTL(40.8,X,.01)
  1. ..S X=PSUDV,DIC=40.8,DIC(0)="X",D="C" D IX^DIC
  1. ..S X=+Y S PSUDNM=$$VAL^PSUTL(40.8,X,.01)
  1. ..I PSUNM=PSUDNM D REC1
  1. Q
  1. ;
  1. REC1 ;Create a record of specialties and days of patient care for File #42.6
  1. ;for each division within the month of the extract
  1. ;
  1. N SPC,DAYA,DAYB,SPCE
  1. ;
  1. S SPC=$P(SPEC(334,PSUMT,"SE",PSUD1,0),U,1) ;Specialty code
  1. ;
  1. S DAYA=$P(SPEC(334,PSUMT,"SE",PSUD1,"D",PSUD2,0),U,12) ;Days of care
  1. ;
  1. S DAYB=$P(SPEC(334,PSUMT,"SE",PSUD1,"D",PSUD2,0),U,24) ;Days of care >45
  1. ;
  1. ;
  1. ;Find external form of specialty
  1. S:SPC=334 SPCE="PSYCHIATRY"
  1. S:SPC=335 SPCE="INTERMEDIATE"
  1. S:SPC=336 SPCE="MEDICINE"
  1. S:SPC=337 SPCE="NEUROLOGY"
  1. S:SPC=338 SPCE="REHAB MEDICINE"
  1. S:SPC=339 SPCE="BLIND REHAB"
  1. S:SPC=340 SPCE="SPINAL CORD INJURY"
  1. S:SPC=341 SPCE="SURGERY"
  1. ;
  1. S ^XTMP(PSUUDSUB,"SPEC",PSUDV,SPC)=SPCE_U_(DAYA+DAYB) ;Record created
  1. ;
  1. Q
  1. ;
  1. SPEC2 ;Find division names from File (#42.7) records within
  1. ;the month of the extract
  1. ;
  1. N PSUDNAM
  1. M SPEC(345,PSUMTH)=^DGAM(345,PSUMTH) ;set node into array
  1. ;
  1. S PSUD1=0
  1. F S PSUD1=$O(SPEC(345,PSUMTH,"SE",PSUD1)) Q:PSUD1="" D
  1. .S PSUD2=0
  1. .F S PSUD2=$O(SPEC(345,PSUMTH,"SE",PSUD1,"D",PSUD2)) Q:PSUD2="" D
  1. ..;find division and match to DIVNM
  1. ..S X=PSUD2
  1. ..S PSUNM=$$VAL^PSUTL(40.8,X,.01)
  1. ..S X=PSUDV,DIC=40.8,DIC(0)="X",D="C" D IX^DIC
  1. ..S X=+Y S PSUDNAM=$$VAL^PSUTL(40.8,X,.01)
  1. ..I PSUNM=PSUDNAM D REC2
  1. ;
  1. Q
  1. ;
  1. REC2 ;Create a record of specialties and days of patient care for File #42.7
  1. ;for each division within the month of the extract
  1. ;
  1. N SPC,DAY,SPCE
  1. ;
  1. S SPC=$P($G(SPEC(345,PSUMTH,"SE",PSUD1,0)),U,1) ;Specialty code
  1. ;
  1. S DAY=$P($G(SPEC(345,PSUMTH,"SE",PSUD1,"D",PSUD2,0)),U,16) ;Days of care
  1. ;
  1. ;Find external form of specialty
  1. S:SPC=345 SPCE="VA NURSING HOME"
  1. ;
  1. I $D(SPCE) D
  1. .S ^XTMP(PSUUDSUB,"SPEC",PSUDV,SPC)=SPCE_U_DAY ;Record created
  1. Q
  1. ;
  1. DIVT ;Calculate division totals
  1. ;
  1. N TOT
  1. S PSUSP=0
  1. F S PSUSP=$O(^XTMP(PSUUDSUB,"SPEC",PSUDV,PSUSP)) Q:PSUSP="" D
  1. .S TOT=$G(TOT)+$P(^XTMP(PSUUDSUB,"SPEC",PSUDV,PSUSP),U,2)
  1. .S ^XTMP(PSUUDSUB,"DIVTOT",PSUDV)=TOT
  1. Q
  1. ;
  1. GRAND ;Calculate grand total of all divisions
  1. ;
  1. ;
  1. S ^XTMP(PSUUDSUB,"GTOT")=$G(^XTMP(PSUUDSUB,"GTOT"))+$G(^XTMP(PSUUDSUB,"DIVTOT",PSUDV))
  1. ;
  1. Q