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

BSTSDTS3.m

Go to the documentation of this file.
  1. BSTSDTS3 ;GDIT/HS/BEE-Standard Terminology DTS Calls/Processing ; 5 Nov 2012 9:53 AM
  1. ;;2.0;IHS STANDARD TERMINOLOGY;;Dec 01, 2016;Build 62
  1. ;
  1. Q
  1. ;
  1. ACODE(RET,BSTSWS) ;Get list of '36' entries having auto-codable ICD-10s
  1. ;
  1. NEW SLIST,DLIST,CNT,MFAIL,FWAIT,TRY,FCNT,STS,ABORT,ERSLT,LENTRY,TR
  1. ;
  1. S SLIST=$NA(^XTMP("BSTSLCMP")) ;Returned List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J))
  1. K @DLIST
  1. ;
  1. ;Retrieve Failover Variables
  1. S MFAIL=$$FPARMS^BSTSVOFL()
  1. S FWAIT=$P(MFAIL,U,2)
  1. S MFAIL=$P(MFAIL,U)
  1. ;
  1. ;BSTS*1.0*8;Extra error handling
  1. F TR=1:1:60 D I +STS Q
  1. . ;Get List of ICD10 Autocodeables - 32777
  1. . S (ABORT,FCNT,STS)=0 F TRY=1:1:(12*MFAIL) D I +STS!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$ACODE^BSTSCMCL(.BSTSWS,.ERSLT) I +STS!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL H FWAIT S FCNT=0 ;Fail handling
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"ACODE^BSTSDTS3 - Call to $$ACODE^BSTSCMCL")
  1. ... I ABORT=1 S STS="0^" S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SNOMED TO ICD10 MAPPING LOOKUP FAILED")
  1. ... S FCNT=0
  1. . I '+STS H TR
  1. ;
  1. ;Quit on failure
  1. I +STS=0 Q 0
  1. ;
  1. ;Move results to second scratch global
  1. S CNT=0 F S CNT=$O(@DLIST@(CNT)) Q:'CNT S @SLIST@(CNT)=@DLIST@(CNT)
  1. M @SLIST@("DTS")=@DLIST@("DTS")
  1. ;
  1. ;Get List of ICD10 Autocodeable Predicates - 32779
  1. K @DLIST
  1. ;BSTS*1.0*8;Extra error handling
  1. F TR=1:1:60 D I +STS Q
  1. .S (ABORT,FCNT,STS)=0 F TRY=1:1:(12*MFAIL) D I +STS!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$ACODEP^BSTSCMCL(.BSTSWS,.ERSLT) I +STS!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL H FWAIT S FCNT=0 ;Fail handling
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"ACODEP^BSTSDTS3 - Call to $$ACODEP^BSTSCMCL")
  1. ... I ABORT=1 S STS="0^" S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SNOMED TO ICD10 PREDICATE MAPPING LOOKUP FAILED")
  1. ... S FCNT=0
  1. . I '+STS H TR
  1. ;
  1. ;Quit on failure
  1. I +STS=0 Q 0
  1. ;
  1. ;Merge results to second scratch global
  1. S CNT=0 F S CNT=$O(@DLIST@(CNT)) Q:'CNT D
  1. . NEW DTSID,LAST
  1. . S DTSID=$P(@DLIST@(CNT),U) Q:DTSID=""
  1. . I $D(@SLIST@("DTS",DTSID)) Q
  1. . S LAST=$O(@SLIST@("A"),-1)+1
  1. . S @SLIST@(LAST)=@DLIST@(CNT)
  1. . S @SLIST@("DTS",DTSID)=LAST
  1. ;
  1. ;Get list of equivalency concepts
  1. S STS=$$EQLST^BSTSDTS4(DLIST,ABORT,FCNT,STS,TRY,MFAIL,.BSTSWS,.ERSLT,CNT,SLIST,FWAIT)
  1. ;
  1. ;Get the list of concepts in subsets
  1. S STS=$$SCODE^BSTSDTS4(.BSTSWS,1)
  1. ;
  1. ;Get last entry
  1. S LENTRY=$O(@SLIST@("A"),-1)
  1. ;
  1. ;Now process each entry
  1. S (ABORT,CNT)=0 F S CNT=$O(@SLIST@(CNT)) Q:'CNT D Q:$D(^XTMP("BSTSLCMP","QUIT"))
  1. . NEW DTSID,VAR,TRY,FCNT,CIEN,LMOD
  1. . ;
  1. . ;Get DTSId
  1. . S DTSID=$P(@SLIST@(CNT),U) Q:DTSID=""
  1. . ;
  1. . ;Check last modified - skip if today
  1. . S CIEN=$O(^BSTS(9002318.4,"D",36,DTSID,""))
  1. . ;BSTS*1.0*4;Do not do date check
  1. . I CIEN]"" S LMOD=$$GET1^DIQ(9002318.4,CIEN_",",.12,"I") ;I LMOD'<DT Q
  1. . ;
  1. . S ^XTMP("BSTSLCMP","STS")="Getting mapping details for DTSID: "_DTSID_" (Entry "_CNT_" of "_LENTRY_")"
  1. . ;Pull detail from DTS - Hang max of 12 times
  1. . S (ABORT,FCNT)=0 F TRY=1:1:(12*MFAIL) D I +STS=2!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$DTSLKP^BSTSAPI("VAR",DTSID_"^36^^^^1") I +STS=2!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"ACODE^BSTSDTS3 - Getting Update for entry: "_DTSID)
  1. ... I ABORT=1 S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SNOMED TO ICD10 MAPPING FAILED ON DETAIL LOOKUP: "_DTSID)
  1. ... S FCNT=0
  1. . ;
  1. . ;Remove entry
  1. . K @SLIST@(CNT)
  1. ;
  1. Q STS
  1. ;
  1. A9CODE(RET,BSTSWS) ;Get list of '36' entries having auto-codable ICD-9s
  1. ;
  1. NEW SLIST,DLIST,CNT,MFAIL,FWAIT,TRY,FCNT,STS,ABORT,ERSLT,LENTRY,TR
  1. ;
  1. S SLIST=$NA(^XTMP("BSTSLCMP")) ;Returned List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J))
  1. K @DLIST
  1. ;
  1. ;Retrieve Failover Variables
  1. S MFAIL=$$FPARMS^BSTSVOFL()
  1. S FWAIT=$P(MFAIL,U,2)
  1. S MFAIL=$P(MFAIL,U)
  1. ;
  1. F TR=1:1:60 D I +STS Q
  1. . S (FCNT,STS)=0 F TRY=1:1:(12*MFAIL) D I +STS!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$A9CODE^BSTSCMCL(.BSTSWS,.ERSLT) I +STS!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"A9CODE^BSTSDTS3 - Call to A9CODE^BSTSCMCL")
  1. ... I ABORT=1 S STS="0^" S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SNOMED TO ICD9 MAPPING LOOKUP FAILED")
  1. ... S FCNT=0
  1. . I '+STS H TR
  1. ;
  1. ;Quit on failure
  1. I +STS=0 Q 0
  1. ;
  1. ;Get last entry
  1. S LENTRY=$O(@DLIST@(""),-1)
  1. ;
  1. ;Move results to second scratch global
  1. S CNT=0 F S CNT=$O(@DLIST@(CNT)) Q:'CNT S @SLIST@(CNT)=@DLIST@(CNT)
  1. ;
  1. ;Now loop through and process each entry
  1. S (ABORT,CNT)=0 F S CNT=$O(@SLIST@(CNT)) Q:'CNT D Q:$D(^XTMP("BSTSLCMP","QUIT"))
  1. . NEW DTSID,VAR,TRY,FCNT,CIEN,LMOD
  1. . ;
  1. . ;Get DTSId
  1. . S DTSID=$P(@SLIST@(CNT),U) Q:DTSID=""
  1. . ;
  1. . ;Check last modified - skip if today
  1. . S CIEN=$O(^BSTS(9002318.4,"D",36,DTSID,""))
  1. . ;BSTS*1.0*4;Do not do date check
  1. . I CIEN]"" S LMOD=$$GET1^DIQ(9002318.4,CIEN_",",.12,"I") ;I LMOD'<DT Q
  1. . ;
  1. . S ^XTMP("BSTSLCMP","STS")="Getting mapping details for DTSID: "_DTSID_" (Entry "_CNT_" of "_LENTRY_")"
  1. . ;Pull detail from DTS - Hang max of 12 times
  1. . S FCNT=0 F TRY=1:1:(12*MFAIL) D I +STS=2!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$DTSLKP^BSTSAPI("VAR",DTSID_"^36^^^^1") I +STS=2!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"A9CODE^BSTSDTS3 - Getting Update for entry: "_DTSID)
  1. ... I ABORT=1 S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SNOMED TO ICD9 MAPPING FAILED ON DETAIL LOOKUP: "_DTSID)
  1. ... S FCNT=0
  1. . ;
  1. . ;Remove entry
  1. . K @SLIST@(CNT)
  1. ;
  1. ;Remove override
  1. K BSTSWS("ONLYLOAD")
  1. ;
  1. Q STS
  1. ;
  1. CSTMCDST(RET,BSTSWS) ;Get list of custom codeset entries
  1. ;
  1. NEW SLIST,DLIST,CNT,NMID,MFAIL,FWAIT,TRY,FCNT,STS,ABORT,ERSLT,LENTRY,TR
  1. ;
  1. S NMID=$G(BSTSWS("NAMESPACEID")) Q:NMID="" 0
  1. ;
  1. S SLIST=$NA(^XTMP("BSTSLCMP")) ;Returned List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J))
  1. K @DLIST
  1. ;
  1. ;Retrieve Failover Variables
  1. S MFAIL=$$FPARMS^BSTSVOFL()
  1. S FWAIT=$P(MFAIL,U,2)
  1. S MFAIL=$P(MFAIL,U)
  1. ;
  1. F TR=1:1:60 D I +STS Q
  1. . S (ABORT,FCNT,STS)=0 F TRY=1:1:(12*MFAIL) D I +STS!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$CSTMCDST^BSTSCMCL(.BSTSWS,.ERSLT) I +STS!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"CSTMCDST^BSTSDTS3 - Calling CSTMCDST^BSTSCMCL")
  1. ... I ABORT=1 S STS="0^" S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("CUSTOM CODESET "_NMID_" MAPPING LOOKUP FAILED")
  1. ... S FCNT=0
  1. . I '+STS H TR
  1. ;
  1. ;Quit on failure
  1. I +STS=0 Q 0
  1. ;
  1. ;Get last entry
  1. S LENTRY=$O(@DLIST@(""),-1)
  1. ;
  1. ;Move results to second scratch global
  1. S CNT=0 F S CNT=$O(@DLIST@(CNT)) Q:'CNT S @SLIST@(CNT)=@DLIST@(CNT)
  1. ;
  1. ;Now loop through and process each entry
  1. S (ABORT,CNT)=0 F S CNT=$O(@SLIST@(CNT)) Q:'CNT D Q:$D(^XTMP("BSTSLCMP","QUIT"))
  1. . NEW DTSID,VAR,TRY,FCNT
  1. . ;
  1. . ;Get the DTSId
  1. . S DTSID=$P($G(@SLIST@(CNT)),U) Q:DTSID=""
  1. . ;
  1. . S ^XTMP("BSTSLCMP","STS")="Getting mapping details for DTSID: "_DTSID_" (Entry "_CNT_" of "_LENTRY_")"
  1. . ;
  1. . ;Pull detail from DTS - Hang max of 12 times
  1. . S FCNT=0 F TRY=1:1:(12*MFAIL) D I +STS=2!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. .. S STS=$$DTSLKP^BSTSAPI("VAR",DTSID_"^"_NMID_"^^^^1") I +STS=2!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"CSTMCDST^BSTSDTS3 - Getting Update for entry: "_DTSID)
  1. ... I ABORT=1 S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("CUSTOM CODESET "_NMID_" MAPPING FAILED ON DETAIL LOOKUP: "_DTSID)
  1. ... S FCNT=0
  1. . ;
  1. . ;Remove entry
  1. . K @SLIST@(CNT)
  1. ;
  1. Q STS
  1. ;
  1. SUPDATE(NMID,ROUT) ;EP-Add/Update Special Codeset Entries
  1. ;
  1. ;Special Codesets Only
  1. I ($G(NMID)=5180)!($G(NMID)=1552)!($G(NMID)=36) Q 1
  1. ;
  1. N GL,CONCDA,BSTSC,INMID,ERROR,TCNT,I,CVRSN,ST,NROUT,TLIST,STYPE,RTR
  1. ;
  1. S GL=$NA(^TMP("BSTSCMCL",$J,1))
  1. S ROUT=$G(ROUT,"")
  1. ;
  1. ;Look for Concept Id
  1. I $P($G(@GL@("CONCEPTID")),U)="" Q 0
  1. ;
  1. ;Look for existing entry
  1. I $G(@GL@("DTSID"))="" Q 0
  1. S CONCDA=$O(^BSTS(9002318.4,"D",NMID,@GL@("DTSID"),""))
  1. ;
  1. ;Pull internal Code Set ID
  1. S INMID=$O(^BSTS(9002318.1,"B",NMID,"")) Q:INMID="" "0"
  1. ;
  1. ;Pull the current version
  1. S CVRSN=$$GET1^DIQ(9002318.1,INMID_",",.04,"I")
  1. ;
  1. ;Handle retired concepts
  1. I CONCDA]"",'$$RET(CONCDA,CVRSN,GL) Q 0
  1. ;
  1. ;None found - create new entry
  1. I CONCDA="" S CONCDA=$$NEWC^BSTSDTS0()
  1. ;
  1. ;Verify entry found/created
  1. I +CONCDA<0 Q 0
  1. ;
  1. ;Get Revision Out
  1. S NROUT=$P(@GL@("CONCEPTID"),U,3) S:NROUT="" NROUT=ROUT
  1. ;
  1. ;Set up top level concept fields
  1. S BSTSC(9002318.4,CONCDA_",",.02)=$P(@GL@("CONCEPTID"),U) ;Concept ID
  1. S BSTSC(9002318.4,CONCDA_",",.08)=@GL@("DTSID") ;DTS ID
  1. S BSTSC(9002318.4,CONCDA_",",.07)=INMID ;Code Set
  1. S BSTSC(9002318.4,CONCDA_",",.03)="N"
  1. S BSTSC(9002318.4,CONCDA_",",.05)=$$EP2FMDT^BSTSUTIL($P(@GL@("CONCEPTID"),U,2),1)
  1. S BSTSC(9002318.4,CONCDA_",",.06)=$$EP2FMDT^BSTSUTIL(NROUT,1)
  1. S BSTSC(9002318.4,CONCDA_",",.11)="N"
  1. S BSTSC(9002318.4,CONCDA_",",.04)=CVRSN
  1. S BSTSC(9002318.4,CONCDA_",",.12)=DT
  1. S BSTSC(9002318.4,CONCDA_",",1)=$G(@GL@("FSN",1))
  1. ;
  1. ;Need to interim save because subsets look at .07
  1. I $D(BSTSC) D FILE^DIE("","BSTSC","ERROR")
  1. ;
  1. ;Save Subsets
  1. ;
  1. ;Clear out existing entries
  1. D
  1. . NEW SB
  1. . S SB=0 F S SB=$O(^BSTS(9002318.4,CONCDA,4,SB)) Q:'SB D
  1. .. NEW DA,DIK
  1. .. S DA(1)=CONCDA,DA=SB
  1. .. S DIK="^BSTS(9002318.4,"_DA(1)_",4," D ^DIK
  1. I $D(@GL@("SUB"))>1 D
  1. . ;
  1. . NEW SB
  1. . S SB="" F S SB=$O(@GL@("SUB",SB)) Q:SB="" D
  1. .. ;
  1. .. NEW DIC,X,Y,DA,X,Y,IENS,DLAYGO
  1. .. S DA(1)=CONCDA
  1. .. S DIC(0)="L",DIC="^BSTS(9002318.4,"_DA(1)_",4,"
  1. .. S X=$P($G(@GL@("SUB",SB)),U) Q:X=""
  1. .. S DLAYGO=9002318.44 D ^DIC
  1. .. I +Y<0 Q
  1. .. S DA=+Y
  1. .. S IENS=$$IENS^DILF(.DA)
  1. .. S BSTSC(9002318.44,IENS,".02")=$$DTS2FMDT^BSTSUTIL($P($G(@GL@("SUB",SB)),U,2))
  1. ;
  1. ;Save Associations
  1. ;
  1. ;Clear out existing entries
  1. D
  1. . NEW AS
  1. . S AS=0 F S AS=$O(^BSTS(9002318.4,CONCDA,9,AS)) Q:'AS D
  1. .. NEW DA,DIK
  1. .. S DA(1)=CONCDA,DA=AS
  1. .. S DIK="^BSTS(9002318.4,"_DA(1)_",9," D ^DIK
  1. I $D(@GL@("ASC"))>1 D
  1. . ;
  1. . ;
  1. . NEW AS
  1. . S AS="" F S AS=$O(@GL@("ASC",AS)) Q:AS="" D
  1. .. ;
  1. .. NEW DIC,X,Y,DA,X,Y,IENS,DLAYGO
  1. .. S DA(1)=CONCDA
  1. .. S DIC(0)="L",DIC="^BSTS(9002318.4,"_DA(1)_",9,"
  1. .. S X=$P($G(@GL@("ASC",AS)),U) Q:X=""
  1. .. S DLAYGO=9002318.49 D ^DIC
  1. .. I +Y<0 Q
  1. .. S DA=+Y
  1. .. S IENS=$$IENS^DILF(.DA)
  1. .. S BSTSC(9002318.49,IENS,".02")=$P($G(@GL@("ASC",AS)),U,2)
  1. .. S BSTSC(9002318.49,IENS,".03")=$P($G(@GL@("ASC",AS)),U,3)
  1. ;
  1. I $D(BSTSC) D FILE^DIE("","BSTSC","ERROR")
  1. ;
  1. ;Now save Terminology entries
  1. ;
  1. ;Synonyms/Preferred/FSN
  1. ;
  1. S STYPE="" F S STYPE=$O(@GL@("SYN",STYPE)) Q:STYPE="" S TCNT="" F S TCNT=$O(@GL@("SYN",STYPE,TCNT)) Q:TCNT="" D
  1. . ;
  1. . N TERM,TYPE,DESC,BSTST,ERROR,TMIEN,AIN
  1. . ;
  1. . ;Pull values
  1. . S TERM=$G(@GL@("SYN",STYPE,TCNT,1)) Q:TERM=""
  1. . ;
  1. . ;Quit if already found
  1. . I $D(TLIST(TERM)) Q
  1. . S TLIST(TERM)=""
  1. . ;
  1. . S TYPE=$P($G(@GL@("SYN",STYPE,TCNT,0)),U,2)
  1. . S TYPE=$S(TYPE=1:"P",1:"S")
  1. . I TERM=$G(@GL@("FSN",1)) S TYPE="F"
  1. . S DESC=$P($G(@GL@("SYN",STYPE,TCNT,0)),U) Q:DESC=""
  1. . S AIN=$$EP2FMDT^BSTSUTIL($P($G(@GL@("SYN",STYPE,TCNT,0)),U,3))
  1. . ;
  1. . ;Look up entry
  1. . S TMIEN=$O(^BSTS(9002318.3,"D",INMID,DESC,""))
  1. . ;
  1. . ;Entry not found - create new one
  1. . I TMIEN="" S TMIEN=$$NEWT^BSTSDTS0()
  1. . I TMIEN<0 Q
  1. . ;
  1. . ;Save/update other fields
  1. . S BSTST(9002318.3,TMIEN_",",.02)=DESC
  1. . S BSTST(9002318.3,TMIEN_",",.09)=TYPE
  1. . S BSTST(9002318.3,TMIEN_",",1)=TERM
  1. . S BSTST(9002318.3,TMIEN_",",.04)="N"
  1. . S BSTST(9002318.3,TMIEN_",",.05)=CVRSN
  1. . S BSTST(9002318.3,TMIEN_",",.08)=INMID
  1. . S BSTST(9002318.3,TMIEN_",",.03)=CONCDA
  1. . S BSTST(9002318.3,TMIEN_",",.06)=AIN
  1. . S BSTST(9002318.3,TMIEN_",",.1)=DT
  1. . S BSTST(9002318.3,TMIEN_",",.11)="N"
  1. . D FILE^DIE("","BSTST","ERROR")
  1. . ;
  1. . ;Reindex - needed for custom indices
  1. . D
  1. .. NEW DIK,DA
  1. .. S DIK="^BSTS(9002318.3,",DA=TMIEN
  1. .. D IX^DIK
  1. ;
  1. ;Need to check for retired concepts again since it may have just been added
  1. S RTR=$$RET^BSTSDTS3(CONCDA,CVRSN,GL)
  1. ;
  1. Q $S($D(ERROR):"0^Update Failed",1:1)
  1. ;
  1. RET(CONCDA,CVRSN,GL) ;Handle retired concepts
  1. ;
  1. ;Input
  1. ; CONCDA - Pointer to concept file, if populated
  1. ; CVRSN - Current codeset version
  1. ; GL - Name of scratch global
  1. ;
  1. ;Output - 1 - Retired Concept
  1. ; 0 - Active Concept
  1. ;
  1. NEW CURRENT,STATUS
  1. ;
  1. S CURRENT=$G(@GL@("CURRENT"))
  1. S STATUS=$G(@GL@("STS"))
  1. ;
  1. I STATUS'="A" D Q 0
  1. . ;
  1. . ;Skip if not already defined
  1. . I CONCDA="" Q
  1. . ;
  1. . ;Entry is defined - Mark as out of date
  1. . NEW NROUT,BSTSC,ERR,NRIN,TIEN
  1. . S NRIN=$$DTS2FMDT^BSTSUTIL($P($G(@GL@("CONCEPTID")),U,2))
  1. . S NROUT=$$DTS2FMDT^BSTSUTIL($P(CURRENT,U))
  1. . ;
  1. . ;Update the concept
  1. . S BSTSC(9002318.4,CONCDA_",",.05)=NRIN
  1. . S BSTSC(9002318.4,CONCDA_",",.06)=NROUT
  1. . S BSTSC(9002318.4,CONCDA_",",.11)="N"
  1. . S BSTSC(9002318.4,CONCDA_",",.04)=CVRSN
  1. . S BSTSC(9002318.4,CONCDA_",",.12)=DT
  1. . D FILE^DIE("","BSTSC","ERR")
  1. . ;
  1. . ;Clear out existing subset entries
  1. . D
  1. .. NEW SB
  1. .. S SB=0 F S SB=$O(^BSTS(9002318.4,CONCDA,4,SB)) Q:'SB D
  1. ... NEW DA,DIK
  1. ... S DA(1)=CONCDA,DA=SB
  1. ... S DIK="^BSTS(9002318.4,"_DA(1)_",4," D ^DIK
  1. . ;
  1. . ;Now mark the terms as out of date
  1. . ;
  1. . ;Set up FSN, Synonyms, Preferred
  1. . S TIEN="" F S TIEN=$O(^BSTS(9002318.3,"C",NMID,CONCDA,TIEN),-1) Q:TIEN="" D
  1. .. ;
  1. .. ;Skip if not the same Concept Id
  1. .. I CONCDA'=$$GET1^DIQ(9002318.3,TIEN_",",".03","I") Q
  1. .. ;
  1. .. NEW BSTST,ERR
  1. .. ;
  1. .. ;Save/update other fields
  1. .. S BSTST(9002318.3,TIEN_",",.05)=CVRSN
  1. .. S BSTST(9002318.3,TIEN_",",.06)=NRIN
  1. .. S BSTST(9002318.3,TIEN_",",.07)=NROUT
  1. .. S BSTST(9002318.3,TIEN_",",.1)=DT
  1. .. S BSTST(9002318.3,TIEN_",",.11)="N"
  1. .. D FILE^DIE("","BSTST","ERROR")
  1. .. ;
  1. .. ;Reindex - needed for custom indices
  1. .. D
  1. ... NEW DIK,DA
  1. ... S DIK="^BSTS(9002318.3,",DA=TIEN
  1. ... D IX^DIK
  1. ;
  1. Q 1