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

LEXQC4.m

Go to the documentation of this file.
  1. LEXQC4 ;ISL/KER - Query - Changes - CPT/MOD ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^DIC(81.3, ICR 4492
  1. ; ^ICPT( ICR 4489
  1. ; ^TMP("LEXQC") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; None
  1. ;
  1. ; Local Variables NEWed in LEXQC
  1. ; LEXADT After Date
  1. ; LEXBDT Before Date
  1. ; LEXCDT Versioning Date
  1. ; LEXQLEN Length of Display
  1. ; LEXQSTR Length of String
  1. ; LEXQTOT Total Records
  1. ;
  1. CPT ; CPT Procedures Changes
  1. K ^TMP("LEXQC",$J,"CPT"),^TMP("LEXQC",$J,"CPC") N LEX1,LEX2,LEX3,LEX4
  1. N LEX5,LEX6,LEXAEF,LEXAST,LEXBEF,LEXBST,LEXCEF,LEXCNT,LEXCST,LEXH
  1. N LEXIDT,LEXIEN,LEXLC,LEXND,LEXPEF,LEXPST,LEXQL,LEXSO,LEXSTID
  1. S LEXQLEN=+($G(LEXQLEN)),LEXQTOT=+($G(LEXQTOT))
  1. S LEXQSTR=+($G(LEXQSTR)),LEXCNT=0,LEXLC=0
  1. S LEXIDT=$$IMPDATE^LEXU("CPT"),LEXCDT=$G(LEXCDT)
  1. Q:LEXCDT'?7N Q:LEXCDT'>LEXIDT S LEXIEN=0
  1. F S LEXIEN=$O(^ICPT(LEXIEN)) Q:+LEXIEN'>0 D
  1. . N LEX1,LEX2,LEX3,LEX4,LEX5,LEX6,LEX7,LEX7D,LEX8,LEX8D,LEXAEF
  1. . N LEXAST,LEXBEF,LEXBST,LEXCEF,LEXCST,LEXH,LEXND,LEXPEF,LEXPST
  1. . N LEXQL,LEXSO,LEXSTID,LEXSID
  1. . S LEXCNT=LEXCNT+1 I LEXCNT'<+($G(LEXQSTR)) S LEXLC=+($G(LEXLC))+1 D
  1. . . W:'$D(ZTQUEUED)&('$D(LEXQUIET))&(LEXLC'>+($G(LEXQLEN))) "." S LEXCNT=0
  1. . S LEXSID="CPT",LEXSO=$P($G(^ICPT(LEXIEN,0)),"^",1) Q:'$L(LEXSO)
  1. . S:$E(LEXSO,1)?1U LEXSID="CPC"
  1. . S LEXH=$O(^ICPT(+LEXIEN,60,"B",LEXCDT," "),-1)
  1. . S LEXND=$G(^ICPT(+LEXIEN,60,+LEXH,0))
  1. . S LEXCEF=$P(LEXND,"^",1),LEXCST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^ICPT(+LEXIEN,60,"B",LEXBDT," "),-1)
  1. . S LEXND=$G(^ICPT(+LEXIEN,60,+LEXH,0))
  1. . S LEXBEF=$P(LEXND,"^",1),LEXBST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^ICPT(+LEXIEN,60,"B",LEXADT," "),-1)
  1. . S LEXND=$G(^ICPT(+LEXIEN,60,+LEXH,0))
  1. . S LEXAEF=$P(LEXND,"^",1),LEXAST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^ICPT(+LEXIEN,60,"B",LEXCDT),-1)
  1. . S LEXH=$O(^ICPT(+LEXIEN,60,"B",+LEXH," "),-1)
  1. . S LEXND=$G(^ICPT(+LEXIEN,60,+LEXH,0))
  1. . S LEXPEF=$P(LEXND,"^",1),LEXPST=$P(LEXND,"^",2)
  1. . S LEX1=$D(^ICPT(+LEXIEN,61,"B",LEXCDT))>0
  1. . S LEX2=$D(^ICPT(+LEXIEN,62,"B",LEXCDT))>0
  1. . S LEX3=$O(^ICPT(+LEXIEN,61,"B",LEXCDT),-1)
  1. . S LEX4=$O(^ICPT(+LEXIEN,62,"B",LEXCDT),-1)
  1. . S LEX5=$D(^ICPT(+LEXIEN,61,"B",LEXCDT))
  1. . S LEX6=$D(^ICPT(+LEXIEN,62,"B",LEXCDT))
  1. . ; Short IEN Dupe
  1. . S LEX7=$O(^ICPT(+LEXIEN,61,"B",LEXCDT," "),-1),LEX7=$$DUPS^LEXQC5(81,LEXIEN,LEX7)
  1. . ; Long IEN Dupe
  1. . S LEX8=$O(^ICPT(+LEXIEN,62,"B",LEXCDT," "),-1),LEX8=$$DUPL^LEXQC5(81,LEXIEN,LEX8)
  1. . ; Activiation/Inactiviation/Re-Activation
  1. . ; Has a current status and effective date
  1. . ; Has a previous status and effective date
  1. . ; Current status not equal to previosu status
  1. . ; Has a short description
  1. . ; Has a long description
  1. . ; Activation - current status >0
  1. . ; Inactivatin - current status =0
  1. . ; Reactivation - current status >0 past status =0
  1. . S LEXQL=0 I $L(LEXCST),$L(LEXCEF) D Q:LEXQL
  1. . . Q:$L(LEXBEF)&($L(LEXBST))&(LEXBST'=LEXCST)
  1. . . Q:$L(LEXAEF)&($L(LEXAST))&(LEXAST'=LEXCST)
  1. . . Q:(LEX1>0&(LEX3?7N))!(LEX2>0&(LEX4?7N)) Q:'$L($G(LEXSO))
  1. . . N LEXCT,LEXO,LEXSTID S LEXSTID=$S(+LEXCST>0:"ACT",1:"INA")
  1. . . I LEXSTID="ACT",$G(LEXPEF)?7N,+($G(LEXPST))'>0 D
  1. . . . I +($G(LEX5))'>0,+($G(LEX6))'>0 S LEXSTID="REA"
  1. . . S LEXQL=1
  1. . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,LEXSTID,0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,LEXSTID,1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,LEXSTID,1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,LEXSTID,0)=LEXCT
  1. . ; Revision
  1. . ; I Previous status (LEXPST) >0 and
  1. . ; Short exist (LEX1) with a previous short (LEX3) and not a duplicate (LEX7) or
  1. . ; long exist (LEX2) with a previosu long (LEX4) and not a duplicate (LEX8)
  1. . S LEXQL=0 I +LEXPST>0,((LEX1>0&(LEX3?7N)&(LEX7'>0))!(LEX2>0&(LEX4?7N)&(LEX8'>0))) D Q:LEXQL
  1. . . N LEXCT,LEXO Q:'$L($G(LEXSO))
  1. . . S LEXQL=1,LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"REV",0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,"REV",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REV",1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REV",0)=LEXCT
  1. . ; Re-Use
  1. . ; Current status (LEXCST) exist and active
  1. . ; Previous Status (LEXPST) exist and is active
  1. . ; Short exist (LEX1) with a previous short (LEX3) and not a duplicate (LEX7) or
  1. . ; long exist (LEX2) with a previosu long (LEX4) and not a duplicate (LEX8)
  1. . S LEXQL=0 I ((LEXCEF?7N&(LEXCST>0))!(LEXPEF?7N&(LEXPST>0))),((LEX1>0&(LEX3?7N)&(LEX7'>0))!(LEX2>0&(LEX4?7N)&(LEX8'>0))) D
  1. . . N LEXCT,LEXO S LEXQL=1
  1. . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"REU",0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,"REU",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REU",1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REU",0)=LEXCT
  1. D:$D(^TMP("LEXQC",$J,"CPT")) UPC("CPT")
  1. D:$D(^TMP("LEXQC",$J,"CPC")) UPC("CPC")
  1. N LEXQUIET
  1. Q
  1. MOD ; CPT Modifier Changes
  1. K ^TMP("LEXQC",$J,"MOD") N LEX1,LEX2,LEX3,LEX4,LEX5,LEX6,LEXAEF
  1. N LEXAST,LEXBEF,LEXBST,LEXCEF,LEXCNT,LEXCST,LEXH,LEXIDT,LEXIEN
  1. N LEXLC,LEXND,LEXPEF,LEXPST,LEXQL,LEXSO,LEXSTID
  1. S LEXQLEN=+($G(LEXQLEN)) S LEXQTOT=+($G(LEXQTOT))
  1. S LEXQSTR=+($G(LEXQSTR)),LEXCNT=0,LEXLC=0
  1. S LEXIDT=$$IMPDATE^LEXU("CPT"),LEXCDT=$G(LEXCDT)
  1. Q:LEXCDT'?7N Q:LEXCDT'>LEXIDT S LEXIEN=0
  1. F S LEXIEN=$O(^DIC(81.3,LEXIEN)) Q:+LEXIEN'>0 D
  1. . Q:$O(^DIC(81.3,+LEXIEN,60,0))'>0 N LEX1,LEX2,LEX3,LEX4,LEX5
  1. . N LEX6,LEX7,LEX8,LEXAEF,LEXAF,LEXAST,LEXACT,LEXBEF,LEXBST,LEXCEF
  1. . N LEXCST,LEXH,LEXIF,LEXINA,LEXND,LEXPEF,LEXPST,LEXQL,LEXR,LEXRI
  1. . N LEXSO,LEXSTID,LEXSID S LEXCNT=LEXCNT+1
  1. . I LEXCNT'<+($G(LEXQSTR)) S LEXLC=+($G(LEXLC))+1 D
  1. . . W:'$D(ZTQUEUED)&('$D(LEXQUIET))&(LEXLC'>+($G(LEXQLEN))) "." S LEXCNT=0
  1. . S LEXSID="MOD" S LEXSO=$P($G(^DIC(81.3,LEXIEN,0)),"^",1)
  1. . Q:'$L(LEXSO) S LEXH=$O(^DIC(81.3,+LEXIEN,60,"B",LEXCDT," "),-1)
  1. . S LEXND=$G(^DIC(81.3,+LEXIEN,60,+LEXH,0))
  1. . S LEXCEF=$P(LEXND,"^",1),LEXCST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^DIC(81.3,+LEXIEN,60,"B",LEXBDT," "),-1)
  1. . S LEXND=$G(^DIC(81.3,+LEXIEN,60,+LEXH,0))
  1. . S LEXBEF=$P(LEXND,"^",1),LEXBST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^DIC(81.3,+LEXIEN,60,"B",LEXADT," "),-1)
  1. . S LEXND=$G(^DIC(81.3,+LEXIEN,60,+LEXH,0))
  1. . S LEXAEF=$P(LEXND,"^",1),LEXAST=$P(LEXND,"^",2)
  1. . S LEXH=$O(^DIC(81.3,+LEXIEN,60,"B",LEXCDT),-1)
  1. . S LEXH=$O(^DIC(81.3,+LEXIEN,60,"B",+LEXH," "),-1)
  1. . S LEXND=$G(^DIC(81.3,+LEXIEN,60,+LEXH,0))
  1. . S LEXPEF=$P(LEXND,"^",1),LEXPST=$P(LEXND,"^",2)
  1. . S LEX1=$D(^DIC(81.3,+LEXIEN,61,"B",LEXCDT))>0
  1. . S LEX2=$D(^DIC(81.3,+LEXIEN,62,"B",LEXCDT))>0
  1. . S LEX3=$O(^DIC(81.3,+LEXIEN,61,"B",LEXCDT),-1)
  1. . S LEX4=$O(^DIC(81.3,+LEXIEN,62,"B",LEXCDT),-1)
  1. . S LEX5=$D(^DIC(81.3,+LEXIEN,61,"B",LEXCDT))
  1. . S LEX6=$D(^DIC(81.3,+LEXIEN,62,"B",LEXCDT))
  1. . ; Short IEN Dupe
  1. . S LEX7=$O(^DIC(81.3,+LEXIEN,61,"B",LEXCDT," "),-1),LEX7=$$DUPS^LEXQC5(81.3,LEXIEN,LEX7)
  1. . ; Long IEN Dupe
  1. . S LEX8=$O(^DIC(81.3,+LEXIEN,62,"B",LEXCDT," "),-1),LEX8=$$DUPL^LEXQC5(81.3,LEXIEN,LEX8)
  1. . ; Activiation/Inactiviation/Re-Activation
  1. . ; Has a current status and effective date
  1. . ; Has a previous status and effective date
  1. . ; Current status not equal to previosu status
  1. . ; Has a short description
  1. . ; Has a long description
  1. . ; Activation - current status >0
  1. . ; Inactivatin - current status =0
  1. . ; Reactivation - current status >0 past status =0
  1. . S LEXQL=0 I $L(LEXCST),$L(LEXCEF) D
  1. . . Q:$L(LEXBEF)&($L(LEXBST))&(LEXBST'=LEXCST)
  1. . . Q:$L(LEXAEF)&($L(LEXAST))&(LEXAST'=LEXCST)
  1. . . Q:(LEX1>0&(LEX3?7N))!(LEX2>0&(LEX4?7N))
  1. . . N LEXSTID Q:'$L($G(LEXSO))
  1. . . N LEXCT,LEXO S LEXSTID=$S(+LEXCST>0:"ACT",1:"INA")
  1. . . I LEXSTID="ACT",$G(LEXPEF)?7N,+($G(LEXPST))'>0 D
  1. . . . I +($G(LEX5))'>0,+($G(LEX6))'>0 S LEXSTID="REA"
  1. . . S LEXQL=1,LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,LEXSTID,0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,LEXSTID,1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,LEXSTID,1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,LEXSTID,0)=LEXCT
  1. . ; Revision
  1. . ; I Previous status (LEXPST) >0 and
  1. . ; Short exist (LEX1) with a previous short (LEX3) and not a duplicate (LEX7) or
  1. . ; Long exist (LEX2) with a previosu long (LEX4) and not a duplicate (LEX8)
  1. . I 'LEXQL I +LEXPST>0,((LEX1>0&(LEX3?7N)&(LEX7'>0))!(LEX2>0&(LEX4?7N)&(LEX8'>0))) D Q:LEXQL
  1. . . N LEXCT,LEXO Q:'$L($G(LEXSO)) S LEXQL=1
  1. . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"REV",0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,"REV",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REV",1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REV",0)=LEXCT
  1. . ; Re-Used
  1. . ; Current status (LEXCST) exist and active
  1. . ; Previous Status (LEXPST) exist and is active
  1. . ; Short exist (LEX1) with a previous short (LEX3) and not a duplicate (LEX7) or
  1. . ; Long exist (LEX2) with a previosu long (LEX4) and not a duplicate (LEX8)
  1. . I 'LEXQL S LEXQL=0 I ((LEXCEF?7N&(LEXCST>0))!(LEXPEF?7N&(LEXPST>0))),((LEX1>0&(LEX3?7N)&(LEX7'>0))!(LEX2>0&(LEX4?7N)&(LEX8'>0))) D
  1. . . N LEXCT,LEXO S LEXQL=1
  1. . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"REU",0)))
  1. . . S:'$D(^TMP("LEXQC",$J,LEXSID,"REU",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REU",1,(LEXSO_" "))=LEXO
  1. . . S ^TMP("LEXQC",$J,LEXSID,"REU",0)=LEXCT
  1. . S (LEXAF,LEXIF,LEXRI)=0,LEXSID="RAN",LEXR=0
  1. . F S LEXRI=$O(^DIC(81.3,+LEXIEN,10,LEXRI)) Q:+LEXRI'>0 D Q:LEXR>1
  1. . . S LEXND=$G(^DIC(81.3,+LEXIEN,10,LEXRI,0))
  1. . . S LEXACT=$P(LEXND,"^",3),LEXINA=$P(LEXND,"^",4)
  1. . . I LEXACT=LEXCDT,'$L(LEXINA) D
  1. . . . N LEXCT,LEXO Q:$D(^TMP("LEXQC",$J,LEXSID,"ACT",1,(LEXSO_" ")))
  1. . . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"ACT",0)))
  1. . . . S:'$D(^TMP("LEXQC",$J,LEXSID,"ACT",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . . S ^TMP("LEXQC",$J,LEXSID,"ACT",1,(LEXSO_" "))=LEXO
  1. . . . S ^TMP("LEXQC",$J,LEXSID,"ACT",0)=LEXCT,LEXAF=1
  1. . . I LEXINA=LEXCDT,$L(LEXACT),LEXINA>LEXACT,(LEXINA-LEXACT)>1 D
  1. . . . N LEXCT,LEXO Q:$D(^TMP("LEXQC",$J,LEXSID,"INA",1,(LEXSO_" ")))
  1. . . . S LEXO=LEXIEN_"^"_LEXSO_"^"_LEXCDT
  1. . . . S LEXCT=+($G(^TMP("LEXQC",$J,LEXSID,"INA",0)))
  1. . . . S:'$D(^TMP("LEXQC",$J,LEXSID,"INA",1,(LEXSO_" "))) LEXCT=LEXCT+1
  1. . . . S ^TMP("LEXQC",$J,LEXSID,"INA",1,(LEXSO_" "))=LEXO
  1. . . . S ^TMP("LEXQC",$J,LEXSID,"INA",0)=LEXCT,LEXIF=1
  1. . . S LEXR=+LEXAF+LEXIF
  1. D:$D(^TMP("LEXQC",$J,"MOD")) UPC("MOD")
  1. N LEXQUIET
  1. Q
  1. UPC(X) ; Update Counters
  1. N LEXSID,LEXACT,LEXORD,LEXCT S LEXSID=$G(X) Q:'$L(LEXSID)
  1. S LEXACT="" F S LEXACT=$O(^TMP("LEXQC",$J,LEXSID,LEXACT)) Q:'$L(LEXACT) D
  1. . S LEXCT=0,LEXORD="" F S LEXORD=$O(^TMP("LEXQC",$J,LEXSID,LEXACT,1,LEXORD)) Q:'$L(LEXORD) S LEXCT=LEXCT+1
  1. . S ^TMP("LEXQC",$J,LEXSID,LEXACT,0)=LEXCT
  1. Q