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

ACPTPOST.m

Go to the documentation of this file.
  1. ACPTPOST ; IHS/ASDST/DMJ,SDR - CPT POST INIT ; [ 02/03/2004 11:05 AM ]
  1. ;;2.08;CPT FILES;;DEC 17, 2007
  1. ;
  1. ;
  1. START ;START HERE
  1. I '$G(DT) D NOW^%DTC S DT=X
  1. S ACPTYR=3080000
  1. W $$EN^ACPTVDF("IOF")
  1. W !!,"CPT Version 2.08 Install",!
  1. D MSG
  1. K DIR S DIR(0)="E" D ^DIR K DIR Q:Y'=1
  1. D DIR
  1. S I=99,ACPTTO=99999 D INA
  1. S I=4848484969,ACPTTO=5248494971 D INA
  1. ;S I=9990002,ACPTTO=9990003 D INA ;inactivate erroneous code 0003T
  1. ;S I=9990007,ACPTTO=9990008 D INA ;inactivate erroneous code 0008T
  1. ;S I=9990017,ACPTTO=9990018 D INA ;inactivate erroneous code 0018T
  1. ;S I=9990020,ACPTTO=9990021 D INA ;inactivate erroneous code 0021T
  1. ;S I=9990043,ACPTTO=9990044 D INA ;inactivate erroneous code 0044T
  1. D SREAD ;short desc.
  1. D LREAD ;long desc.
  1. ;S I=99999,ACPTTO=999999 D INA ;HCPCS inactivation
  1. ;D HREAD ;hcpcs
  1. D MREAD ;mod
  1. D MOD^ACPTPST2 ;hcpc mod
  1. ;D GROUPS ;loads current group/ASC codes
  1. D XREF
  1. D XREFM
  1. ;D FIXCPT^ACPTPST2 ;acpt*2.06*1
  1. ;
  1. D:'$D(^XT(8984.4,81,0)) ADD81
  1. I ACPTYR>DT D QUE
  1. I ACPTYR<DT D
  1. .W !!,"Will now activate new codes, de-activate deleted codes.",!
  1. .D ^ACPTSINF
  1. D UPKG
  1. W !!,"INSTALL COMPLETE",!!
  1. S DIR(0)="E" D ^DIR
  1. K DIR,ACPT,ACPTYR
  1. Q
  1. INA ;set date deleted for all codes
  1. W !!,"Updating Year Deleted Field.",!
  1. F S I=$O(^ICPT(I)) Q:I>ACPTTO!('I) D
  1. .Q:$P($G(^ICPT(I,0)),"^",7)
  1. .S $P(^ICPT(I,0),"^",7)=ACPTYR
  1. .D DOTS(I)
  1. K ACPTTO
  1. Q
  1. DOTS(X) ;EP - WRITE OUT A DOT EVERY HUNDRED
  1. U IO(0)
  1. W:'(X#100) "."
  1. Q
  1. SREAD ;READ AND UPDATE SHORT DESC.
  1. S ACPTFL="acpt2008.s"
  1. W !!,"Reading SHORT description file, file name ",ACPTFL,!
  1. D OPEN^%ZISH("CPTSFILE",ACPTPTH,ACPTFL,"R")
  1. I POP U IO(0) W !,"Could not open short description file." Q
  1. F ACPTCNT=1:1 D Q:$$STATUS^%ZISH
  1. .U IO R X Q:$$STATUS^%ZISH
  1. .S ACPTCD=$P(X," ",1)
  1. .I ACPTCD?4N1"T"!(ACPTCD?4N1"F") D CAT2S Q
  1. .Q:ACPTCD'?5N
  1. .S A=$P(X," ",2,999) D DESC
  1. .I '$D(^ICPT(+ACPTCD)) D
  1. ..S ^ICPT(+ACPTCD,0)=ACPTCD
  1. ..S $P(^ICPT(+ACPTCD,0),"^",6)=ACPTYR
  1. ..S:ACPTYR>DT $P(^ICPT(+ACPTCD,0),"^",4)=1
  1. ..K DIC
  1. ..S DA(1)=ACPTCD
  1. ..S DIC="^ICPT("_DA(1)_",60,"
  1. ..S DIC(0)="L"
  1. ..S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. ..S X="01/01/2008"
  1. ..S DIC("DR")=".02////1"
  1. ..D ^DIC
  1. .S $P(^ICPT(+ACPTCD,0),"^",2)=ACPTDESC
  1. .S:$P(^ICPT(+ACPTCD,0),"^",6)<DT $P(^ICPT(+ACPTCD,0),"^",4)=""
  1. .S $P(^ICPT(+ACPTCD,0),"^",7)=""
  1. .D CAT(ACPTCD)
  1. .D DOTS(ACPTCNT)
  1. D ^%ZISC
  1. Q
  1. ;
  1. LREAD ;READ AND UPDATE LONG DESC.
  1. S ACPTFL="acpt2008.l"
  1. W !!,"Reading LONG description file, file name ",ACPTFL,!
  1. D OPEN^%ZISH("CPTLFILE",ACPTPTH,ACPTFL,"R")
  1. I POP U IO(0) W !,"Could not open long description file." Q
  1. F ACPTCNT=1:1 D Q:$$STATUS^%ZISH
  1. .U IO R X Q:$$STATUS^%ZISH
  1. .S ACPTCD=$E(X,1,5)
  1. .I ACPTCD?4N1"T"!(ACPTCD?4N1"F") D CAT2L Q
  1. .Q:ACPTCD'?5N
  1. .S ACPTLN=$E(X,6,7)
  1. .S A=$P(X," ",2,999) D DESC
  1. .I '$D(^ICPT(+ACPTCD)) D
  1. ..S ^ICPT(+ACPTCD,0)=ACPTCD
  1. ..S $P(^ICPT(+ACPTCD,0),"^",6)=ACPTYR
  1. ..S:ACPTYR>DT $P(^ICPT(+ACPTCD,0),"^",4)=1
  1. ..K DIC
  1. ..S DA(1)=ACPTCD
  1. ..S DIC="^ICPT("_DA(1)_",60,"
  1. ..S DIC(0)="L"
  1. ..S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. ..S X="01/01/2008"
  1. ..S DIC("DR")=".02////1"
  1. ..D ^DIC
  1. .I +ACPTLN=1 D
  1. ..K ^ICPT(+ACPTCD,"D")
  1. ..S ^ICPT(+ACPTCD,"D",0)="^81.01A^^"
  1. .S ^ICPT(+ACPTCD,"D",+ACPTLN,0)=ACPTDESC
  1. .S $P(^ICPT(+ACPTCD,"D",0),"^",3,4)=+ACPTLN_"^"_+ACPTLN
  1. .D DOTS(ACPTCNT)
  1. D ^%ZISC
  1. Q
  1. ;
  1. HREAD ;READ HCPCS FILE
  1. K ACPTCD,ACPTFLAG,ACPTIEN,ACPTDESC
  1. S ACPTCSV=""
  1. W !,"Installing ",$E(ACPTYR,1,3)+1700," HCPCS codes.",!
  1. ;S ACPTFL="acpt2006.h" ;acpt*2.07*1
  1. S ACPTFL="acpt2007.01h" ;acpt*2.07*1
  1. D OPEN^%ZISH("CPTHFILE",ACPTPTH,ACPTFL,"R")
  1. I POP U IO(0) W !,"Could not open HCPCS file." Q
  1. U IO(0) W !,"Reading HCPCS Codes File.",!
  1. F ACPTCNT=1:1 D Q:$$STATUS^%ZISH
  1. .U IO R X Q:$$STATUS^%ZISH
  1. .S ACPTCD=$E(X,1,5)
  1. .I ACPTCD=ACPTCSV S ACPTFLAG=1
  1. .Q:ACPTCD'?1U4N
  1. .;S ACPTLNE=$E(X,6,10) ;acpt*2.07*1
  1. .;S ACPTACDE=$E(X,293) ;action code ;acpt*2.07*1
  1. .S ACPTACDE=$E(X,6) ;action code ;acpt*2.07*1
  1. .Q:ACPTACDE="" ;no action code
  1. .;Q:ACPTACDE="N" ;no change to code ;acpt*2.07*1
  1. .;Q:ACPTACDE="P" ;payment change-not stored ;acpt*2.07*1
  1. .;I ACPTACDE="D" D Q ;delete code and quit ;acpt*2.07*1
  1. .;.S ACPTIEN=$A($E(ACPTCD))_$E(ACPTCD,2,5) ;acpt*2.07*1
  1. .;.I $G(^ICPT(ACPTIEN,0))="" S ACPTIEN=$O(^ICPT("B",ACPTCD,0)) ;acpt*2.07*1
  1. .;.Q:+ACPTIEN=0 ;acpt*2.07*1
  1. .;.Q:$P($G(^ICPT(ACPTIEN,0)),"^",7) ;acpt*2.07*1
  1. .;.S $P(^ICPT(ACPTIEN,0),"^",7)=ACPTYR ;acpt*2.07*1
  1. .;S A=$E(X,7,40) D DESC S ACPTSD=ACPTDESC ;acpt*2.06*1
  1. .;S A=$E(X,42,299) D DESC S ACPTLD=ACPTDESC ;acpt*2.06*1
  1. .;S A=$E(X,92,119) D DESC S ACPTSD=ACPTDESC ;acpt*2.06*1 ;acpt*2.07*1
  1. .S A=$E(X,7,41) D DESC S ACPTSD=ACPTDESC ;acpt*2.07*1
  1. .;S A=$E(X,12,91) D DESC S ACPTLD=ACPTDESC ;acpt*2.06*1 ;acpt*2.07*1
  1. .S A=$E(X,42,975) D DESC S ACPTLD=ACPTDESC ;acpt*2.07*1
  1. .;if no entry in CPT file
  1. .I '$D(^ICPT("B",ACPTCD)) D
  1. ..S ACPTIEN=$A($E(ACPTCD))_$E(ACPTCD,2,5)
  1. ..S ^ICPT(ACPTIEN,0)=ACPTCD
  1. ..S ^ICPT("B",ACPTCD,ACPTIEN)=""
  1. ..S $P(^ICPT(ACPTIEN,0),"^",6)=ACPTYR
  1. ..S:ACPTYR>DT $P(^ICPT(ACPTIEN,0),"^",4)=1
  1. ..K DIC
  1. ..S DA(1)=ACPTIEN
  1. ..S DIC="^ICPT("_DA(1)_",60,"
  1. ..S DIC(0)="L"
  1. ..S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. ..S X="01/01/2007"
  1. ..S DIC("DR")=".02////1"
  1. ..D ^DIC
  1. .;get IEN and edit existing entry
  1. .S ACPTIEN=$O(^ICPT("B",ACPTCD,0))
  1. .Q:ACPTIEN'>0
  1. .;start old code acpt*2.07*1
  1. .;I +ACPTLNE=100 D
  1. .;.K ^ICPT(ACPTIEN,"D")
  1. .;.S ^ICPT(ACPTIEN,"D",0)="^81.01A^^"
  1. .;S ACPTLN=$E(ACPTLNE,3)
  1. .;S ^ICPT(ACPTIEN,"D",+ACPTLN,0)=ACPTLD
  1. .;S $P(^ICPT(ACPTIEN,"D",0),"^",3,4)=+ACPTLN_"^"_+ACPTLN
  1. .;end old code acpt*2.07*1
  1. .;start new code acpt*2.07*1
  1. .S ^ICPT(ACPTIEN,"D",1,0)=ACPTLD
  1. .S $P(^ICPT(ACPTIEN,"D",0),"^",3,4)=1_"^"_1
  1. .;end new code acpt*2.07*1
  1. .S:ACPTSD'="" $P(^ICPT(ACPTIEN,0),"^",2)=ACPTSD
  1. .S $P(^ICPT(ACPTIEN,0),"^",7)=""
  1. .;start new code acpt*2.07*1
  1. .S ACPTEDT=$O(^ICPT(ACPTIEN,60,"B",9999999),-1)
  1. .I ACPTEDT'="" D
  1. ..S ACPTEIEN=$O(^ICPT(ACPTIEN,60,"B",ACPTEDT,0))
  1. ..I $P($G(^ICPT(ACPTIEN,60,ACPTEIEN,0)),U,2)'=1 D ;1=ACTIVE
  1. ...K DIC
  1. ...S DA(1)=ACPTIEN
  1. ...S DIC="^ICPT("_DA(1)_",60,"
  1. ...S DIC(0)="L"
  1. ...S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. ...S X="01/01/2007"
  1. ...S DIC("DR")=".02////1"
  1. ...D ^DIC
  1. .;end new code acpt*2.07*1
  1. .D DOTS(ACPTCNT)
  1. .S ACPTCSV=ACPTCD,ACPTFLAG=""
  1. D ^%ZISC
  1. K ACPTSD,ACPTLD
  1. K ACPTCSV,ACPTFLAG
  1. K ACPTLNE
  1. Q
  1. ;
  1. MREAD ;READ AND UPDATE MODIFIERS AND P-CODES
  1. S ACPTFL="acpt2008.m"
  1. W !!,"Reading MODIFIER file, file name ",ACPTFL,!
  1. D OPEN^%ZISH("CPTSFILE",ACPTPTH,ACPTFL,"R")
  1. I POP U IO(0) W !,"Could not open modifier and p-code file." Q
  1. F ACPTCNT=1:1 D Q:$$STATUS^%ZISH
  1. .U IO R X Q:$$STATUS^%ZISH
  1. .S ACPTCD=$E(X,1,2)
  1. .S DESC=$E($P(X,": ",1),4,$L(X))
  1. .S ACPTCDN=$S(ACPTCD=+ACPTCD:ACPTCD,1:$A($E(ACPTCD,1))_$A($E(ACPTCD,2)))
  1. .I '$D(^AUTTCMOD(ACPTCDN)) D
  1. ..S ^AUTTCMOD(ACPTCDN,0)=ACPTCD
  1. .S $P(^AUTTCMOD(ACPTCDN,0),"^",2)=DESC
  1. .D DOTS(ACPTCNT)
  1. D ^%ZISC
  1. Q
  1. ;
  1. GROUPS ;
  1. S ACPTFL="acpt2006.d"
  1. W !!,"Reading Group file, file name ",ACPTFL,!
  1. D OPEN^%ZISH("CPTSFILE",ACPTPTH,ACPTFL,"R")
  1. I POP U IO(0) W !,"Could not open group file." Q
  1. F ACPTCNT=1:1 D Q:$$STATUS^%ZISH
  1. .U IO R X Q:$$STATUS^%ZISH
  1. .S ACPTCD=$P(X,",")
  1. .Q:ACPTCD=""
  1. .S ACPTDA=$O(^ICPT("B",ACPTCD,""))
  1. .Q:ACPTDA=""
  1. .S ACPTGRP=$P(X,",",2)
  1. .S DR="6///"_ACPTGRP
  1. .S DIE="^ICPT("
  1. .S DA=ACPTDA
  1. .D ^DIE
  1. .D DOTS(ACPTCNT)
  1. D ^%ZISC
  1. Q
  1. DIR ;ASK DIRECTORY WHERE FILES WERE LOADED
  1. W !
  1. S DIR(0)="F",DIR("A")="Enter directory where CPT files are located."
  1. S DIR("B")="/usr/spool/uucppublic/"
  1. D ^DIR K DIR
  1. Q:$D(DUOUT)!$D(DTOUT)!$D(DIRUT)
  1. I ^%ZOSF("OS")["UNIX" D
  1. .S Y=$TR(Y,"\","/")
  1. .S:$E(Y)'="/" Y="/"_Y
  1. .S:$E(Y,$L(Y))'="/" Y=Y_"/"
  1. I ^%ZOSF("OS")'["UNIX" D
  1. .S Y=$TR(Y,"/","\")
  1. .I $E(Y)'="\",Y'[":" S Y="\"_Y
  1. .S:$E(Y,$L(Y))'="\" Y=Y_"\"
  1. S ACPTPTH=Y
  1. Q
  1. FILE ;ASK FOR FILE NAME
  1. W !
  1. S DIR(0)="F"
  1. D ^DIR K DIR
  1. S Y=$TR(Y,"/\")
  1. S ACPTFL=Y
  1. Q
  1. DESC ;STRIP TRAILING BLANKS FROM DESCRIPTION FIELD
  1. S ACPTDESC=""
  1. N I F I=0:1:31 S A=$TR(A,$C(I))
  1. N I F I=1:1:$L(A," ") D
  1. .S ACPTWORD=$P(A," ",I)
  1. .Q:ACPTWORD=""
  1. .S:I>1 ACPTDESC=ACPTDESC_" "
  1. .S ACPTDESC=ACPTDESC_ACPTWORD
  1. K ACPTWORD
  1. S ACPTDESC=$$UPC^ACPTPST2(ACPTDESC)
  1. Q
  1. CAT(Z) ;SET CPT CATEGORY
  1. S ACPTCAT=Z
  1. I '$D(^DIC(81.1,"ACPT",Z)) D
  1. .S ACPTCAT=$O(^DIC(81.1,"ACPT",ACPTCAT),-1)
  1. S ACPTCAT=$O(^DIC(81.1,"ACPT",ACPTCAT,0))
  1. S $P(^ICPT(Z,0),"^",3)=ACPTCAT
  1. K ACPTCAT
  1. Q
  1. ADD81 ;ADD FILE 81 TO LOCAL LOOKUP FILE
  1. S DLAYGO=8984.4
  1. W !!,"ADDING CPT FILE TO LOCAL LOOKUP FILE" D
  1. .I '$D(^DIC(8984.4)) W !,"LOCAL LOOKUP FILE (FILE 8984.4) MISSING.",! Q
  1. .S DIC="^XT(8984.4,",DIC(0)="LX",X=81 D ^DIC
  1. .Q:Y<0 S DA=+Y,DIE=DIC,DR=".03////C" D ^DIE
  1. .W !,"FILE 81 ADDED.",!
  1. K DLAYGO
  1. Q
  1. XREF ;RE-CROSS REFERENCE FILE
  1. W !,"WILL NOW RE-INDEX CPT FILE (this will take awhile).",!
  1. S DIK="^ICPT(" D IXALL^DIK
  1. D ^ACPTCXR
  1. Q
  1. XREFM ;RE-CROSS REFERENCE FILE
  1. W !,"WILL NOW RE-INDEX MODIFIER FILE.",!
  1. S DIK="^AUTTCMOD(" D IXALL^DIK
  1. Q
  1. QUE ;QUE JOB TO ACTIVATE/INACTIVATE CODES
  1. S ZTRTN="^ACPTSINF"
  1. S ZTIO=""
  1. S ZTDESC="Activate/inactivate CPT codes."
  1. S ZTDTH="60996,21600"
  1. S ACPTRDT=$$HTFM^XLFDT(ZTDTH)
  1. S ACPTRDT=$$FMTE^XLFDT(ACPTRDT,1)
  1. D ^%ZTLOAD
  1. I $G(ZTSK) D
  1. .W !,"I've taken the liberty to queue task # ",ZTSK," to run on ",ACPTRDT
  1. .W !,"This routine will inactivate deleted codes and activate new codes."
  1. .W !,"If this date and time is inconvenient, you may use the Taskman re-schedule"
  1. .W !,"option to run at a more suitable time."
  1. I '$G(ZTSK) D
  1. .W !,"Attempt to queue routine ACPTSINF was unsuccessful. This routine will"
  1. .W !,"need to be run to activate new codes and de-activate old codes."
  1. .W !,"and should be run January or February ",ACPTCV,"."
  1. K ACPTRDT,ACPTCV
  1. Q
  1. MSG ;display message
  1. F I=1:1 D Q:ACPTTXT["***end***"
  1. .S ACPTTXT=$P($T(TXT+I),";;",2)
  1. .Q:ACPTTXT["end"
  1. .I ACPTTXT="NOTE:" W $$EN^ACPTVDF("RVN")
  1. .W !,ACPTTXT
  1. .I ACPTTXT="NOTE:" W $$EN^ACPTVDF("RVF")
  1. K ACPTTXT
  1. Q
  1. TXT ;text lines
  1. ;;CPT version 2.08 contains CPT codes and Modifiers for 2008.
  1. ;;The install will attempt to read the short description file
  1. ;;(acpt2008.s), the long description file (acpt2008.l), the
  1. ;;HCPCS Modifiers file (acpt2008.c), and the Modifiers file
  1. ;;(acpt2008.m) from the directory you specify.
  1. ;;
  1. ;;***end***
  1. Q
  1. CAT2S ;
  1. S A=$P(X," ",2,999) D DESC
  1. S ACPTCDN=""
  1. F ACPTCDC=1:1:5 S ACPTCDN=ACPTCDN_$A($E(ACPTCD,ACPTCDC))
  1. I '$D(^ICPT(+ACPTCDN)) D
  1. .S ^ICPT(+ACPTCDN,0)=ACPTCD
  1. .S $P(^ICPT(+ACPTCDN,0),"^",6)=ACPTYR
  1. .S:ACPTYR>DT $P(^ICPT(+ACPTCDN,0),"^",4)=1
  1. .K DIC
  1. .S DA(1)=+ACPTCDN
  1. .S DIC="^ICPT("_DA(1)_",60,"
  1. .S DIC(0)="L"
  1. .S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. .S X="01/01/2008"
  1. .S DIC("DR")=".02////1"
  1. .D ^DIC
  1. S $P(^ICPT(+ACPTCDN,0),"^",2)=ACPTDESC
  1. S:$P(^ICPT(+ACPTCDN,0),"^",6)<DT $P(^ICPT(+ACPTCDN,0),"^",4)=""
  1. S $P(^ICPT(+ACPTCDN,0),"^",7)=""
  1. D CAT(ACPTCDN)
  1. Q
  1. CAT2L ;
  1. S ACPTLN=$E(X,6,7)
  1. S ACPTCDN=""
  1. F ACPTCDC=1:1:5 S ACPTCDN=ACPTCDN_$A($E(ACPTCD,ACPTCDC))
  1. S A=$P(X," ",2,999) D DESC
  1. I '$D(^ICPT(+ACPTCDN)) D
  1. .S ^ICPT(+ACPTCDN,0)=ACPTCD
  1. .S $P(^ICPT(+ACPTCDN,0),"^",6)=ACPTYR
  1. .S:ACPTYR>DT $P(^ICPT(+ACPTCDN,0),"^",4)=1
  1. .K DIC
  1. .S DA(1)=+ACPTCDN
  1. .S DIC="^ICPT("_DA(1)_",60,"
  1. .S DIC(0)="L"
  1. .S DIC("P")=$P(^DD(81,60,0),"^",2)
  1. .S X="01/01/2008"
  1. .S DIC("DR")=".02////1"
  1. .D ^DIC
  1. I +ACPTLN=1 D
  1. .K ^ICPT(+ACPTCDN,"D")
  1. .S ^ICPT(+ACPTCDN,"D",0)="^81.01A^^"
  1. S ^ICPT(+ACPTCDN,"D",+ACPTLN,0)=ACPTDESC
  1. S $P(^ICPT(+ACPTCDN,"D",0),"^",3,4)=+ACPTLN_"^"_+ACPTLN
  1. D DOTS(ACPTCNT)
  1. Q
  1. UPKG ;update package file
  1. I '$G(DUZ) D
  1. .S DUZ=1
  1. .S DUZ(0)="@"
  1. I '$G(DT) D
  1. .D NOW^%DTC
  1. .S DT=$P(%,".",1)
  1. S DA=$O(^DIC(9.4,"C","ACPT",0))
  1. Q:'DA
  1. S DIE="^DIC(9.4,"
  1. S DR="13///2.08" ;current version
  1. D ^DIE
  1. S DA(1)=DA
  1. S X=2.04
  1. S DIC="^DIC(9.4,DA(1),22,"
  1. S DIC(0)="LX"
  1. D ^DIC
  1. Q:+Y<0
  1. S DA=+Y
  1. S DIE=DIC
  1. S DR="1///3071231;2///"_DT_";3///`"_DUZ
  1. D ^DIE
  1. Q