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

BSTSVRSN.m

Go to the documentation of this file.
  1. BSTSVRSN ;GDIT/HS/BEE-Standard Terminology - Local File Handling ; 5 Nov 2012 9:53 AM
  1. ;;2.0;IHS STANDARD TERMINOLOGY;**1**;Dec 01, 2016;Build 36
  1. ;
  1. Q
  1. ;
  1. CHECK ;EP - Check for new codeset versions and '36' subsets/custom codeset refreshes
  1. ;
  1. NEW SITE,BSTS,ERROR,ZTRTN,ZTDESC,ZTIO,ZTDTH
  1. ;
  1. ;Get Site Parameter IEN
  1. S SITE=$O(^BSTS(9002318,0)) I 'SITE G XCHECK
  1. ;
  1. ;Quit if all checks have been completed for the day
  1. I $$GET1^DIQ(9002318,SITE_",",".03","I")=DT G XCHECK
  1. ;
  1. ;Do not perform check if another process is already checking
  1. L +^BSTS("VERSION CHECK"):0 E G XCHECK
  1. ;
  1. ;Do not perform check if background process is running
  1. L +^BSTS(9002318.1,0):0 E G XCHECK
  1. L -^BSTS(9002318.1,0)
  1. ;
  1. ;Make sure ICD9 to SNOMED background process isn't running
  1. L +^TMP("BSTSICD2SMD"):0 E G XCHECK
  1. L -^TMP("BSTSICD2SMD")
  1. ;
  1. ;Job off daily checks
  1. S ZTRTN="DAYCHK^BSTSVOF1"
  1. S ZTDESC="BSTS - Performing daily update checks"
  1. S ZTIO=""
  1. S ZTDTH=$$FMADD^XLFDT($$NOW^XLFDT(),,,2)
  1. D ^%ZTLOAD
  1. ;
  1. ;Completed checks for day - mark parameter
  1. S BSTS(9002318,SITE_",",.03)=DT
  1. D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. XCHECK L -^BSTS("VERSION CHECK")
  1. ;
  1. Q
  1. ;
  1. ;BSTS*2.0*1;Added override checking
  1. VCHK(NMID,OVRRID) ;EP - Daily check for new version
  1. ;
  1. S OVRRID=+$G(OVRRID)
  1. ;
  1. NEW NMIEN,LVCKDT,STS,BSTS,ERROR,VAR,CVLCL,NVLCL,NVIEN,TRY,TR
  1. S NMID=$G(NMID,"") S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. S NMIEN=$O(^BSTS(9002318.1,"B",NMID,"")) I NMIEN="" Q 0
  1. ;
  1. ;Pull last version check date
  1. S LVCKDT=$$GET1^DIQ(9002318.1,NMIEN_",",.05,"I")
  1. I 'OVRRID,LVCKDT'<DT Q 0
  1. ;
  1. ;Pull the current version on file
  1. S CVLCL=$$GET1^DIQ(9002318.1,NMIEN_",",".04","I")
  1. ;
  1. ;Perform version check
  1. S STS="" F TR=1:1:60 D I +STS=2 Q
  1. . D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. . S STS=$$VERSIONS^BSTSAPI("VAR",NMID)
  1. . I +STS'=2 H TR
  1. ;
  1. ;Check for successful remote call - If failure, don't check again today
  1. I +STS'=2 D Q 2
  1. . NEW BSTS,ERROR,SITE
  1. . S SITE=$O(^BSTS(9002318,0)) Q:SITE=""
  1. . S BSTS(9002318,SITE_",",.03)=DT
  1. . D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. ;Get the current version from the codeset multiple
  1. S NVIEN=$O(^BSTS(9002318.1,NMIEN,1,"A"),-1)
  1. S NVLCL="" I +NVIEN>0 D
  1. . NEW DA,IENS
  1. . S DA(1)=NMIEN,DA=+NVIEN,IENS=$$IENS^DILF(.DA)
  1. . S NVLCL=$$GET1^DIQ(9002318.11,IENS,".01","I")
  1. ;
  1. ;If the current version value isn't equal to the latest in the multiple need to process
  1. I NVLCL]"",CVLCL'=NVLCL D Q 1
  1. . ;
  1. . ;For codesets 36, 5180, 1552
  1. . I (NMID=36)!(NMID=5180)!(NMID=1552) D QUEUE^BSTSVOFL(NMID) Q
  1. . ;
  1. . ;For '36' ICD-10 autocodables
  1. . I NMID=32777 D QUEUE^BSTSVOFL(NMID) Q
  1. . ;
  1. . ;For '36' ICD-9 autocodables
  1. . I NMID=32778 D QUEUE^BSTSVOFL(NMID) Q
  1. . ;
  1. . ;For '36' ICD-10 conditionals
  1. . I NMID=32779 D QUEUE^BSTSVOFL(NMID) Q
  1. . ;
  1. . ;For '36' ICD-10 conditionals
  1. . I NMID=32780 D QUEUE^BSTSVOFL(NMID) Q
  1. . ;
  1. . ;For remaining custom codesets
  1. . I NMID'=32777,NMID'=32778,NMID'=32779,NMID'=36,NMID'=5180,NMID'=1552 D QUEUE^BSTSVOFL(NMID) Q
  1. ;
  1. ;Update LAST VERSION CHECK
  1. S BSTS(9002318.1,NMIEN_",",.05)=DT
  1. D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. Q 1
  1. ;
  1. RES ;EP - Mark Local Codeset Entries As Out of Date
  1. ;
  1. ;Perform lock so only one process is allowed
  1. L +^BSTS(9002318.1,0):0 E Q
  1. ;
  1. NEW NMID,VDTS,STS,NVIEN,NVLCL,CIEN,BSTS,ERROR,VAR,X1,X2,X,TR,CVRSN
  1. ;
  1. ;Passed in variable
  1. S NMIEN=$G(NMIEN) Q:NMIEN=""
  1. ;
  1. ;Get NMID
  1. S NMID=$$GET1^DIQ(9002318.1,NMIEN_",",.01,"I") I NMID="" G XRES
  1. ;
  1. ;Perform version check
  1. S STS="" F TR=1:1:60 D I +STS=2 Q
  1. . D RESET^BSTSWSV1 ;Make sure link is turned on
  1. . S STS=$$VERSIONS^BSTSAPI("VAR",NMID)
  1. . I +STS'=2 H TR
  1. ;
  1. ;Check for successful remote call - If offline quit
  1. I +STS'=2 G XRES
  1. ;
  1. ;Reset Monitoring Global
  1. K ^XTMP("BSTSLCMP")
  1. ;
  1. ;Get a later date
  1. S X1=DT,X2=60 D C^%DTC
  1. ;
  1. ;Get current version
  1. S CVRSN=$$GET1^DIQ(9002318.1,NMIEN_",",.04,"I")
  1. ;
  1. ;Make a log entry
  1. D LOG^BSTSAPIL("UPDS",NMID,"CURRENT",CVRSN)
  1. ;
  1. ;Set up Monitoring Global
  1. S ^XTMP("BSTSLCMP","STS")=X_U_DT_U_"Cache Codeset refresh running for "_NMID
  1. ;
  1. ;Loop through each concept in the codeset and make it Out of Date
  1. S VDTS="" F S VDTS=$O(^BSTS(9002318.4,"D",NMID,VDTS)) Q:VDTS="" S CIEN=0 F S CIEN=$O(^BSTS(9002318.4,"D",NMID,VDTS,CIEN)) Q:'CIEN D
  1. . ;
  1. . ;Update status
  1. . S ^XTMP("BSTSLCMP","STS")="Marking entry "_CIEN_" as out of date"
  1. . ;
  1. . NEW BSTSUPD,ERR,TIEN
  1. . ;
  1. . ;Mark Entry as Out of Date
  1. . S BSTSUPD(9002318.4,CIEN_",",".11")="Y"
  1. . ;
  1. . ;Process the Associated Terms
  1. . S TIEN="" F S TIEN=$O(^BSTS(9002318.3,"C",NMID,CIEN,TIEN)) Q:TIEN="" D
  1. .. ;
  1. .. NEW BSTSTUPD,ERR
  1. .. ;
  1. .. ;Mark Entry as Out of Date
  1. .. S BSTSTUPD(9002318.3,TIEN_",",".11")="Y"
  1. .. D FILE^DIE("","BSTSTUPD","ERR")
  1. . ;
  1. . ;File entry
  1. . I $D(BSTSUPD) D FILE^DIE("","BSTSUPD","ERR")
  1. ;
  1. ;Update the current version
  1. ;
  1. ;Get the current version from the codeset multiple
  1. S NVIEN=$O(^BSTS(9002318.1,NMIEN,1,"A"),-1)
  1. S NVLCL="" I +NVIEN>0 D
  1. . NEW DA,IENS
  1. . S DA(1)=NMIEN,DA=+NVIEN,IENS=$$IENS^DILF(.DA)
  1. . S NVLCL=$$GET1^DIQ(9002318.11,IENS,".01","I")
  1. ;
  1. ;Now save it in the CURRENT VERSION field
  1. I NVLCL]"" D
  1. . NEW BSTS,ERROR
  1. . S BSTS(9002318.1,NMIEN_",",.04)=NVLCL
  1. . D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. I NMID=36 S BSTS(9002318.1,NMIEN_",",.1)="@"
  1. E S BSTS(9002318.1,NMIEN_",",.05)="@"
  1. D FILE^DIE("","BSTS","ERR")
  1. ;
  1. K ^XTMP("BSTSLCMP")
  1. ;
  1. ;Queue subset refresh - only if a total refresh isn't also scheduled
  1. I '$D(^XTMP("BSTSPROCQ","B","ACODE^BSTSVRSC")),NMID=36 D QENTRY^BSTSVOFL("SUB^BSTSVRSN",NMIEN,"S36")
  1. ;
  1. ;
  1. ;Get current version
  1. S CVRSN=$$GET1^DIQ(9002318.1,NMIEN_",",.04,"I")
  1. ;
  1. ;Make a log entry
  1. D LOG^BSTSAPIL("UPDE",NMID,"CURRENT",CVRSN)
  1. ;
  1. ;Unlock entry
  1. XRES L -^BSTS(9002318.1,0)
  1. ;
  1. Q
  1. ;
  1. SCHK(NMID,BKGND) ;EP - Check for periodic subset updates
  1. ;
  1. NEW LMDT,STS,BSTS,ERROR,ZTRTN,ZTSAVE,ZTDESC,ZTDTH,NMIEN
  1. NEW VAR,SITE,SDAYS,ZTIO,SUBLST,X1,X2,X,%H,TR
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BSTSVRSN D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. ;Only one SNOMED background process can be running at a time
  1. I '$G(BKGND) L +^BSTS(9002318.1,0):0 E W !!,"A Local Cache Refresh is Already Running. Please Try Later" H 3 Q
  1. L -^BSTS(9002318.1,0)
  1. ;
  1. ;Make sure ICD9 to SNOMED background process isn't running
  1. I '$G(BKGND) L +^TMP("BSTSICD2SMD"):0 E W !!,"An ICD9 to SNOMED Background Process is Already Running. Please Try Later" H 3 Q
  1. L -^TMP("BSTSICD2SMD")
  1. ;
  1. S NMID=$G(NMID,"") S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. ;
  1. ;Only run it for codeset 36
  1. I NMID'=36 Q
  1. ;
  1. ;Get Site Parameter IEN
  1. S SITE=$O(^BSTS(9002318,0)) Q:'SITE
  1. ;
  1. ;Get subset update days
  1. S SDAYS=$$GET1^DIQ(9002318,SITE_",",.02,"I") S:SDAYS="" SDAYS=60
  1. ;
  1. ;Make sure we have a codeset (namespace)
  1. S NMIEN=$O(^BSTS(9002318.1,"B",NMID,"")) Q:NMIEN=""
  1. ;
  1. ;Update LAST SUBSET CHECK as completed today
  1. D
  1. . NEW BSTS,ERROR
  1. . S BSTS(9002318.1,NMIEN_",",.06)=DT
  1. . D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. ;Check if refresh needs run
  1. S LMDT=$$GET1^DIQ(9002318.1,NMIEN,".1","I")
  1. I LMDT>0 S X1=LMDT,X2=SDAYS D C^%DTC S LMDT=X
  1. I LMDT>DT Q
  1. ;
  1. ;Only run if server set up
  1. S STS="" F TR=1:1:60 D I +STS=2 Q
  1. . D RESET^BSTSWSV1 ;Reset the DTS link to on
  1. . S STS=$$VERSIONS^BSTSAPI("VAR") ;Try a quick call to see if call works
  1. . I +STS'=2 H TR
  1. I +STS'=2 G XSCHK
  1. ;
  1. ;Queue the process off in the background
  1. I +$G(BKGND) D QUEUE^BSTSVOFL("S36") Q ;Daily check - queue
  1. D CDJOB^BSTSUTIL(NMIEN,"S","") ;Manual - run now
  1. ;
  1. XSCHK Q
  1. ;
  1. SUB ;EP - Update IHS Standard Terminology Subsets
  1. ;
  1. ;Perform lock so only one process is allowed
  1. L +^BSTS(9002318.1,0):1 E Q
  1. ;
  1. NEW NMID,SDAYS,SITE
  1. ;
  1. ;Retrieve passed in variable
  1. S NMIEN=$G(NMIEN) I NMIEN="" Q
  1. ;
  1. ;Get NMID
  1. S NMID=$$GET1^DIQ(9002318.1,NMIEN_",",.01,"I") I NMID="" Q
  1. ;
  1. ;Get Site Parameter IEN
  1. S SITE=$O(^BSTS(9002318,0)) Q:'SITE
  1. ;
  1. ;Get subset update days
  1. S SDAYS=$$GET1^DIQ(9002318,SITE_",",.02,"I") S:SDAYS="" SDAYS=60
  1. ;
  1. NEW BSTS,ERROR,CIEN,BSTSSB,STS,CNC,SUBLST,SSCIEN,ICONC,X,X1,X2,ITEM,%H
  1. NEW MFAIL,FWAIT,FCNT,ABORT,RUNSTRT,TR
  1. ;
  1. ;Note the run date
  1. S RUNSTRT=DT
  1. ;
  1. ;Only run if server up
  1. S STS="" F TR=1:1:60 D I +STS=2 Q
  1. . D RESET^BSTSWSV1 ;Reset DTS to on
  1. . S STS=$$VERSIONS^BSTSAPI("VRSN") ;Try quick call
  1. . I +STS'=2 H TR
  1. I +STS'=2 G XSUB
  1. ;
  1. ;Reset Monitoring Global
  1. K ^XTMP("BSTSLCMP")
  1. ;
  1. ;Get a later date
  1. S X1=DT,X2=60 D C^%DTC
  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. ;Update SUBSET TASK NUMBER
  1. I +$G(ZTSK)>0 D
  1. . NEW BSTS,ERROR
  1. . S BSTS(9002318.1,NMIEN_",",.08)=ZTSK
  1. . D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. ;Make a log entry
  1. D LOG^BSTSAPIL("UPDS",NMID,"SUBSET","")
  1. ;
  1. ;Set up Monitoring Global
  1. S ^XTMP("BSTSLCMP",0)=X_U_DT_U_"Cache subset refresh running for "_NMID
  1. ;
  1. ;Loop through concepts and clear out modified date for codes in codeset
  1. S ^XTMP("BSTSLCMP","STS")="Marking entries as out of date"
  1. S ICONC="" F S ICONC=$O(^BSTS(9002318.4,"C",NMID,ICONC)) Q:ICONC="" D
  1. . S CIEN="" F S CIEN=$O(^BSTS(9002318.4,"C",NMID,ICONC,CIEN)) Q:CIEN="" D
  1. .. NEW CDSET,BSTS,ERR,LMOD
  1. .. ;
  1. .. ;Skip partial entries
  1. .. I $$GET1^DIQ(9002318.4,CIEN_",",.03,"I")="P" Q
  1. .. ;
  1. .. ;Check last modified - skip if toda
  1. .. S LMOD=$$GET1^DIQ(9002318.4,CIEN_",",.12,"I") I LMOD'<RUNSTRT Q
  1. .. ;
  1. .. ;Mark as out of date
  1. .. S BSTS(9002318.4,CIEN_",",".12")="@"
  1. .. D FILE^DIE("","BSTS","ERR")
  1. ;
  1. ;
  1. ;Make the call to update the subset entries
  1. S STS=$$SCODE^BSTSWSV1()
  1. ;
  1. ;Quit on failure
  1. I +STS=0 S ^XTMP("BSTSLCMP","QUIT")=1 G XSUB
  1. I $D(^XTMP("BSTSLCMP","QUIT")) G XSUB
  1. ;
  1. ;Need to loop through list again to catch any deletes
  1. S ^XTMP("BSTSLCMP","STS")="Looking for entries removed from subsets"
  1. S ABORT=0,ICONC="" F S ICONC=$O(^BSTS(9002318.4,"C",NMID,ICONC)) Q:ICONC="" Q:$D(^XTMP("BSTSLCMP","QUIT")) S SSCIEN="" F S SSCIEN=$O(^BSTS(9002318.4,"C",NMID,ICONC,SSCIEN)) Q:SSCIEN="" D Q:$D(^XTMP("BSTSLCMP","QUIT"))
  1. . ;
  1. . NEW LMOD,DTSID,SBVAR,CDSET,X1,X2,X,%H,FCNT,TRY
  1. . ;
  1. . ;Skip partial entries
  1. . I $$GET1^DIQ(9002318.4,SSCIEN_",",.03,"I")="P" Q
  1. . ;
  1. . ;Get last modified date for concept
  1. . S LMOD=$$GET1^DIQ(9002318.4,SSCIEN_",",".12","I")
  1. . ;
  1. . ;Skip if not out of date
  1. . I LMOD'<RUNSTRT Q
  1. . ;
  1. . ;Get DTSId
  1. . S DTSID=$$GET1^DIQ(9002318.4,SSCIEN_",",".08","I") Q:DTSID=""
  1. . S ^XTMP("BSTSLCMP","STS")="Refreshing removed entry: "_SSCIEN_" DTSID: "_DTSID
  1. . ;
  1. . ;If Out of Date, retrieve detail from server - Hang max of 12 times
  1. . S (FCNT,STS)=0 F TRY=1:1:(12*MFAIL) D I +STS=2!(STS="0^") Q
  1. .. D RESET^BSTSWSV1 ;Make sure the link is on
  1. .. S STS=$$DTSLKP^BSTSAPI("SBVAR",DTSID) 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,"SUB^BSTSVRSN - Refreshing entry: "_DTSID)
  1. ... I ABORT=1 S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("SUBSET REFRESH FAILED ON DETAIL ENTRY: "_DTSID)
  1. ... S FCNT=0
  1. ;
  1. ;Check for failure
  1. I $D(^XTMP("BSTSLCMP","QUIT")) G XSUB
  1. ;
  1. ;Process VUID and NDC
  1. S STS=$$NVLKP^BSTSVOFL(MFAIL,FWAIT)
  1. ;
  1. ;Update LAST SUBSET RUN as completed today
  1. D
  1. . NEW BSTS,ERROR
  1. . S BSTS(9002318.1,NMIEN_",",.1)=DT
  1. . D FILE^DIE("","BSTS","ERROR")
  1. ;
  1. ;Make a log entry
  1. D LOG^BSTSAPIL("UPDE",NMID,"SUBSET","")
  1. ;
  1. XSUB NEW FAIL
  1. S FAIL=$S($D(^XTMP("BSTSLCMP","QUIT")):1,1:0)
  1. K ^XTMP("BSTSLCMP")
  1. S:FAIL ^XTMP("BSTSLCMP","QUIT")=1
  1. ;
  1. ;Unlock entry
  1. L -^BSTS(9002318.1,0)
  1. ;
  1. Q
  1. ;
  1. SBRSET ;EP - BSTS REFRESH SUBSETS option
  1. ;
  1. ;Moved to overflow routine because of size issues
  1. D SBRSET^BSTSVOFL Q
  1. ;
  1. ERR ;
  1. D ^%ZTER
  1. Q