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

BSTSUTIL.m

Go to the documentation of this file.
  1. BSTSUTIL ;GDIT/HS/BEE-Standard Terminology Utility Program ; 5 Nov 2012 9:53 AM
  1. ;;2.0;IHS STANDARD TERMINOLOGY;**1**;Dec 01, 2016;Build 36
  1. ;
  1. Q
  1. ;
  1. DTCHG(X1,X2) ;EP - ADD/SUBTRACT FROM DATE
  1. ;
  1. NEW X,%H
  1. I $G(X1)="" Q ""
  1. I $G(X2)="" Q ""
  1. ;
  1. D C^%DTC
  1. Q X
  1. ;
  1. EP2FMDT(MSECS,DTONLY) ;EP - Convert UNIX (EPOCH) Date to FileMan Date (and Time)
  1. ;
  1. ;Input
  1. ; MSECS - UNIX (EPOCH) date - Milliseconds since Jan 1, 1970
  1. ; DTONLY (Optional) - If 1, return only date portion
  1. ;
  1. ;Output
  1. ; FDT - FileMan Date format
  1. ;
  1. NEW MDATE,MTIME
  1. S DTONLY=$G(DTONLY),DTONLY=$S(DTONLY="1":"1",1:"")
  1. Q:MSECS'?12.13N "" ; Do not convert date beyond 11/19/2280
  1. S MSECS=MSECS\1000
  1. S MDATE=(MSECS\86400+47117)
  1. S MTIME=+(MSECS#86400)
  1. ;
  1. Q $$HTFM^XLFDT(MDATE_","_MTIME,DTONLY)
  1. ;
  1. EP2EXDT(MSECS,FORMAT) ;EP - Convert UNIX (EPOCH) Date to External Date (and Time)
  1. ;
  1. ;Input
  1. ; MSECS - UNIX (EPOCH) date - Milliseconds since Jan 1, 1970
  1. ; FORMAT - XLFDT format field (optional) - default is "5DZ"
  1. ;
  1. ;Output
  1. ; FDT - External Date (Time) format
  1. ;
  1. NEW MDATE,MTIME
  1. S FORMAT=$G(FORMAT,"") S:FORMAT="" FORMAT="5DZ"
  1. Q:MSECS'?12.13N "" ; Do not convert date beyond 11/19/2280
  1. S MSECS=MSECS\1000
  1. S MDATE=(MSECS\86400+47117)
  1. S MTIME=+(MSECS#86400)
  1. ;
  1. Q $$HTE^XLFDT(MDATE_","_MTIME,FORMAT)
  1. ;
  1. FMDT2EP(FDT) ;EP - FileMan Date (and Time) to UNIX (EPOCH) Date
  1. ;
  1. ;Input
  1. ; FDT - FileMan Date (and Time)
  1. ;
  1. ;Output
  1. ; MSECS - UNIX (EPOCH) date - Milliseconds since Jan 1, 1970
  1. ;
  1. NEW DOLH,DOLD,DOLT,EPOCH
  1. S DOLH=$$FMTH^XLFDT(FDT)
  1. S DOLD=+$P(DOLH,",")
  1. S DOLT=+$P(DOLH,",",2)
  1. S EPOCH=((DOLD-47117)*86400)+DOLT
  1. ;
  1. Q (EPOCH*1000)
  1. ;
  1. EXDT2EP(EXDT) ;EP - External Date (and Time) to UNIX (EPOCH) Date
  1. ;
  1. ;Input
  1. ; EXDT - External Date (and Time)
  1. ;
  1. ;Output
  1. ; MSECS - UNIX (EPOCH) date - Milliseconds since Jan 1, 1970
  1. ;
  1. NEW DOLH,DOLD,DOLT,EPOCH,X,Y,%DT
  1. S X=EXDT,%DT="TS"
  1. D ^%DT
  1. I Y="-1" Q Y ;Invalid date
  1. ;
  1. S DOLH=$$FMTH^XLFDT(Y)
  1. S DOLD=+$P(DOLH,",")
  1. S DOLT=+$P(DOLH,",",2)
  1. S EPOCH=((DOLD-47117)*86400)+DOLT
  1. ;
  1. Q (EPOCH*1000)
  1. ;
  1. DATE(DATE) ;EP - Convert standard date/time to a FileMan date/time
  1. ;Input
  1. ; DATE - In a standard format
  1. ;Output
  1. ; -1 is if it couldn't convert to a FileMan date
  1. ; otherwise a standard FileMan date
  1. NEW %DT,X,Y
  1. I DATE[":" D
  1. . I DATE["/",$L(DATE," ")=3 S DATE=$P(DATE," ",1)_"@"_$P(DATE," ",2)_$P(DATE," ",3) Q
  1. . I $L(DATE," ")=3 S DATE=$P(DATE," ",1,2)_"@"_$P(DATE," ",3)
  1. . I $L(DATE," ")>3 S DATE=$P(DATE," ",1,3)_"@"_$P(DATE," ",4,99)
  1. S %DT="TS",X=DATE D ^%DT
  1. I Y=-1 S Y=""
  1. ;
  1. Q Y
  1. ;
  1. DTS2FMDT(DATE,FORMAT) ;EP - Convert Date/Time from DTS to a FileMan date/time
  1. ;Input
  1. ; DATE - In a standard format - 'CCYY-MM-DD HH:MM:SS'
  1. ; FORMAT - 1 - Return Date only
  1. ;
  1. ;Output
  1. ; -1 is if it couldn't convert to a FileMan date - 'CYYMMDD'
  1. ; otherwise a standard FileMan date
  1. NEW %DT,X,Y
  1. ;
  1. S %DT="T"
  1. S X=$P(DATE,"-",2)_"/"_$P($P(DATE,"-",3)," ")_"/"_$P(DATE,"-")
  1. ;
  1. I $G(FORMAT)'=1 D
  1. . I $P(DATE," ",2)[":" S X=X_"@"_$P($P(DATE,".")," ",2,99)
  1. . S %DT="ST"
  1. D ^%DT
  1. ;
  1. I Y=-1 S Y=""
  1. ;
  1. Q Y
  1. ;
  1. FMDT2XML(DATE) ;EP - Convert Date/Time from FileMan to XML
  1. ;Input
  1. ; DATE - In a standard FileMan format
  1. ;
  1. ;Output
  1. ; Convert to a XML date - 'CCYY-MM-DD HH:MM:SS'
  1. ;
  1. NEW X
  1. S X=$S($E(DATE,1)="2":"19",1:"20")_$E(DATE,2,3)_"-"_$E(DATE,4,5)_"-"_$E(DATE,6,7)_"T00:00:00"
  1. ;
  1. Q X
  1. ;
  1. SQL2XML(DATE) ;EP - Convert date from SQL to XML formats
  1. ;Input
  1. ; DATE - In SQL format - 'JUN 13, 2013'
  1. ;
  1. ;Output
  1. ; "" is if it couldn't convert to a XML date - '2013-06-13T00:00:00'
  1. ;
  1. ;NEW %DT,X,Y,FMDT,M,D
  1. ;
  1. ;S %DT="TS",X=DATE D ^%DT
  1. ;I Y=-1 Q ""
  1. NEW %DT,X,Y,FMDT,M,D
  1. I DATE[":" D
  1. . I DATE["/",$L(DATE," ")=3 S DATE=$P(DATE," ",1)_"@"_$P(DATE," ",2)_$P(DATE," ",3) Q
  1. . I $L(DATE," ")=3 S DATE=$P(DATE," ",1,2)_"@"_$P(DATE," ",3)
  1. . I $L(DATE," ")>3 S DATE=$P(DATE," ",1,3)_"@"_$P(DATE," ",4,99)
  1. S %DT="TS",X=DATE D ^%DT
  1. I Y=-1 Q ""
  1. ;
  1. S Y=$$FMTE^XLFDT($P(Y,"."),"7")
  1. S M=$P(Y,"/",2) S:$L(M)=1 M="0"_M
  1. S D=$P(Y,"/",3) S:$L(D)=1 D="0"_D
  1. S Y=$P(Y,"/")
  1. S Y=Y_"-"_M_"-"_D_"T00:00:01"
  1. Q Y
  1. ;
  1. FMTE(Y) ;EP - Convert Fileman Date/Time to 'MMM DD, CCYY HH:MM:SS' format.
  1. ;Description
  1. ; Receives Date (Y) in FileMan format and returns formatted date.
  1. ;
  1. ;Input
  1. ; Y - FileMan date/time (i.e. 3051024.123456).
  1. ;
  1. ;Output
  1. ; Date/Time in External format (i.e. OCT 24,2005 12:34:56).
  1. ;
  1. NEW DATM,XX,I,V,DA
  1. S DATM=$TR($$FMTE^DILIBF(Y,"5U"),"@"," ")
  1. I DATM["24:00" S DATM=$P(DATM," ",1,2)_" 00:00"
  1. S XX="" F I=1:1:$L(DATM) S V=$E(DATM,I,I),XX=XX_V I V="," S XX=XX_" "
  1. S DATM=XX
  1. Q DATM
  1. ;
  1. WRAP(OUT,TEXT,RM,IND) ;EP - Wrap the text and insert in array
  1. ;
  1. NEW SP
  1. ;
  1. I $G(TEXT)="" S OUT(1)="" Q
  1. I $G(RM)="" Q
  1. I $G(IND)="" S IND=0
  1. S $P(SP," ",80)=" "
  1. ;
  1. ;Strip out $c(10)
  1. S TEXT=$TR(TEXT,$C(10))
  1. ;
  1. F I $L(TEXT)>0 D Q:$L(TEXT)=0
  1. . NEW PIECE,SPACE,LINE
  1. . S PIECE=$E(TEXT,1,RM)
  1. . ;
  1. . ;Handle Line feeds
  1. . I PIECE[$C(13) D Q
  1. .. NEW LINE,I
  1. .. S LINE=$P(PIECE,$C(13)) S:LINE="" LINE=" "
  1. .. S OUT=$G(OUT)+1,OUT(OUT)=LINE
  1. .. F I=1:1:$L(PIECE) I $E(PIECE,I)=$C(13) Q
  1. .. S TEXT=$E(SP,1,IND)_$$STZ($E(TEXT,I+1,9999999999))
  1. . ;
  1. . ;Check if line is less than right margin
  1. . I $L(PIECE)<RM S OUT=$G(OUT)+1,OUT(OUT)=PIECE,TEXT="" Q
  1. . ;
  1. . ;Locate last space in line and handle if no space
  1. . F SPACE=$L(PIECE):-1:(IND+1) I $E(PIECE,SPACE)=" " Q
  1. . I (SPACE=(IND+1)) D S:TEXT]"" TEXT=$E(SP,1,IND)_TEXT Q
  1. .. S LINE=PIECE,OUT=$G(OUT)+1,OUT(OUT)=LINE,TEXT=$$STZ($E(TEXT,RM+1,999999999))
  1. . ;
  1. . ;Handle line with space
  1. . S LINE=$E(PIECE,1,SPACE-1),OUT=$G(OUT)+1,OUT(OUT)=LINE,TEXT=$$STZ($E(TEXT,SPACE+1,999999999))
  1. . S:TEXT]"" TEXT=$E(SP,1,IND)_TEXT
  1. ;
  1. Q
  1. ;
  1. STZ(TEXT) ;EP - Strip Leading Spaces
  1. NEW START
  1. F START=1:1:$L(TEXT) I $E(TEXT,START)'=" " Q
  1. Q $E(TEXT,START,9999999999)
  1. ;
  1. ICDSX ;EP - Set cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. S ^BSTS(9002318.4,"F",CSET,X,DA(1))=""
  1. Q
  1. ;
  1. ICDKX ;EP - Kill cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. K ^BSTS(9002318.4,"F",CSET,X,DA(1))
  1. Q
  1. ;
  1. SBSX ;EP - Set cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. S ^BSTS(9002318.4,"E",CSET,X,DA(1),DA)=""
  1. Q
  1. ;
  1. SBKX ;EP - Kill cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. K ^BSTS(9002318.4,"E",CSET,X,DA(1),DA)
  1. Q
  1. ;
  1. NDSX ;EP - Set cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. S ^BSTS(9002318.4,"G",CSET,X,DA(1),DA)=""
  1. Q
  1. ;
  1. NDKX ;EP - Kill cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. K ^BSTS(9002318.4,"G",CSET,X,DA(1),DA)
  1. Q
  1. ;
  1. VUSX ;EP - Set cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. S ^BSTS(9002318.4,"H",CSET,X,DA(1),DA)=""
  1. Q
  1. ;
  1. VUKX ;EP - Kill cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. K ^BSTS(9002318.4,"H",CSET,X,DA(1),DA)
  1. Q
  1. ;
  1. I2SSX ;EP - Set cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. S ^BSTS(9002318.4,"I",CSET,X,DA(1))=""
  1. Q
  1. ;
  1. I2SKX ;EP - Kill cross-reference
  1. NEW CSET
  1. S CSET=$$CSET() I CSET="" Q
  1. K ^BSTS(9002318.4,"I",CSET,X,DA(1))
  1. Q
  1. ;
  1. CSET() ;EP - Get the codeset
  1. Q $P($G(^BSTS(9002318.4,DA(1),0)),U,7)
  1. ;
  1. DEL ;EP - Delete a codeset from cache
  1. ;
  1. NEW NMID,C,DIR,X,Y
  1. ;
  1. S DIR(0)="F"
  1. S DIR("A")="Enter codeset IEN to clear out: "
  1. D ^DIR
  1. I +Y<1 Q
  1. S NMID=+Y
  1. ;
  1. I '$D(^BSTS(9002318.3,"C",NMID)) W !!,"No entries defined for codeset" H 2 Q
  1. ;
  1. ;Loop through index and clear out each entry
  1. W !!,"DELETING TERMS"
  1. S C="" F S C=$O(^BSTS(9002318.3,"C",NMID,C)) Q:C="" D
  1. . NEW TIEN,DA,DIK
  1. . S TIEN="" F S TIEN=$O(^BSTS(9002318.3,"C",NMID,C,TIEN)) Q:TIEN="" D
  1. .. W !,"TIEN: ",TIEN,?10,$G(^BSTS(9002318.3,TIEN,0))
  1. .. S DA=TIEN,DIK="^BSTS(9002318.3,"
  1. .. D ^DIK
  1. ;
  1. W !!,"DELETING CONCEPTS"
  1. S C="" F S C=$O(^BSTS(9002318.4,"C",NMID,C)) Q:C="" D
  1. . NEW CIEN,DA,DIK
  1. . S CIEN="" F S CIEN=$O(^BSTS(9002318.4,"C",NMID,C,CIEN)) Q:CIEN="" D
  1. .. W !,"CIEN: ",CIEN,?10,$G(^BSTS(9002318.4,CIEN,0))
  1. .. S DA=CIEN,DIK="^BSTS(9002318.4,"
  1. .. D ^DIK
  1. Q
  1. ;
  1. ICD10(VDT) ;EP - Determine to return ICD9 or ICD10
  1. ;
  1. ;Input value
  1. ; VDT - Date to check on
  1. ;
  1. ;Output value
  1. ; 1 - Use ICD10
  1. ; 0 - Use ICD9
  1. ;
  1. S:$G(VDT)="" VDT=DT
  1. ;
  1. I $$VERSION^XPDUTL("AICD")>3.51,$$IMP^ICDEXA(30)'>VDT Q 1
  1. Q 0
  1. ;
  1. COUNT ;Return totals of codesets and subsets
  1. NEW SB,CD,S,I,C
  1. ;
  1. ;Get subsets first
  1. S S="" F S S=$O(^BSTS(9002318.4,"E",9,S)) Q:S="" S I="" F S I=$O(^BSTS(9002318.4,"E",9,S,I)) Q:I="" S SB(S)=$G(SB(S))+1
  1. ;
  1. ;Now get codesets
  1. S C="" F S C=$O(^BSTS(9002318.4,"C",C)) Q:C="" S I="" F S I=$O(^BSTS(9002318.4,"C",C,I)) Q:I="" S CD(C)=$G(CD(C))+1
  1. ;
  1. W !,"Subsets: "
  1. S S="" F S S=$O(SB(S)) Q:S="" W !,S,"=",SB(S)
  1. W !!,"Codesets: "
  1. S C="" F S C=$O(CD(C)) Q:C="" W !,C,"=",CD(C)
  1. Q
  1. ;
  1. TKO(STR,VAL) ;EP - Take off ending character
  1. ;
  1. ;Description
  1. ; This will take off the ending character at the end of
  1. ; a string
  1. ;Input
  1. ; STR - String of data
  1. ; VAL - Delimiter character
  1. ;Output
  1. ; same STR without the ending character
  1. ;
  1. I $G(STR)="" Q ""
  1. I $G(VAL)="" Q ""
  1. ;
  1. NEW LV
  1. S LV=$L(VAL)
  1. I $E(STR,$L(STR)-(LV-1),$L(STR))=VAL S STR=$E(STR,1,$L(STR)-LV)
  1. ;
  1. Q STR
  1. ;
  1. CKJOB(ZTSK) ;Check the status of a job
  1. ;
  1. NEW ST
  1. ;
  1. ;Check on current job
  1. D STAT^%ZTLOAD
  1. S ST=$G(ZTSK(2))
  1. ;
  1. ;Pending - Don't start
  1. I ST["Pending" Q 1
  1. ;
  1. ;Running - Don't start
  1. I ST["Running" Q 1
  1. ;
  1. ;Finished/Inactive/Interrupted/Undefined - clear and allow start
  1. Q 0
  1. ;
  1. CDJOB(NMIEN,TYPE,JTIME) ;EP - Kick off BSTS Background Process
  1. ;
  1. NEW TJOB,ZTDTH,ZTDESC,ZTRTN,ZTIO,ZTSAVE,BSTSUPD,ERROR,FIELD,ZTSK
  1. ;
  1. ;Determine field to pull
  1. I TYPE="C" S FIELD=".07" ;Regular Codeset
  1. I TYPE="I10" S FIELD=".07" ;ICD10 Autocodeable
  1. I TYPE="I9" S FIELD=".07" ;ICD9 Autocodeable
  1. I TYPE="CCD" S FIELD=".07" ;Custom Codesets
  1. I (TYPE="S")!(TYPE="S1552") S FIELD=".08" ;Subset
  1. I TYPE="I" S FIELD=".09" ;ICD9 TO SNOMED
  1. ;
  1. ;Get the previous task number
  1. S TJOB=$$GET1^DIQ(9002318.1,NMIEN_",",FIELD,"I")
  1. ;
  1. ;Running or pending - Do not start
  1. I TJOB]"",$$CKJOB(TJOB) Q
  1. ;
  1. ;Other status - clear task
  1. I TJOB]"" D
  1. . NEW BSTSUPD,ERR
  1. . S BSTSUPD(9002318.1,NMIEN_",",FIELD)="@"
  1. . D FILE^DIE("","BSTSUPD","ERR")
  1. ;
  1. ;Queue the process off in the background
  1. K IO("Q")
  1. ;
  1. ;Regular codeset refresh
  1. I TYPE="C" D
  1. . S ZTRTN="RES^BSTSVRSN",ZTDESC="BSTS - Refresh Codeset"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;Subset refresh
  1. I TYPE="S" D
  1. . S ZTRTN="SUB^BSTSVRSN",ZTDESC="BSTS - Update IHS Standard Terminology Subsets"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;Subset refresh
  1. I TYPE="S1552" D
  1. . S ZTRTN="SUB^BSTSVRXN",ZTDESC="BSTS - Update IHS Standard Terminology RxNorm Subsets"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;ICD9 to SNOMED process
  1. I TYPE="I" D
  1. . S ZTRTN="JOB^BSTSUTIL",ZTDESC="BSTS - Preload SNOMED Concepts"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;ICD10 Autocodeable
  1. I TYPE="I10" D
  1. . S ZTRTN="ACODE^BSTSVRSC",ZTDESC="BSTS - Refresh ICD-10 Autocodeable Codeset"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;Custom Codesets
  1. I TYPE="CCD" D
  1. . S ZTRTN="CDST^BSTSVRSC",ZTDESC="BSTS - Update IHS Standard Terminology Local Cache Refresh"
  1. . S ZTSAVE("NMIEN")=""
  1. ;
  1. ;ICD9 Autocodeable
  1. I TYPE="I9" D
  1. . S ZTRTN="A9CODE^BSTSVRSC",ZTDESC="BSTS - Refresh ICD-9 Autocodeable Codeset"
  1. ;
  1. S ZTIO=""
  1. I +$G(JTIME) S ZTDTH=$$JBTIME^BSTSVOFL()
  1. E S ZTDTH=$$FMADD^XLFDT($$NOW^XLFDT(),,,2)
  1. D ^%ZTLOAD
  1. ;
  1. ;Save task to file
  1. S BSTSUPD(9002318.1,NMIEN_",",FIELD)=$G(ZTSK)
  1. D FILE^DIE("","BSTSUPD","ERR")
  1. ;
  1. Q
  1. ;
  1. PLOAD(NMIEN) ;Job off process to pre-load SNOMED concepts at site
  1. ;
  1. ;Quit if process has run before
  1. I $$GET1^DIQ(9002318.1,NMIEN_",",".09","I")]"" Q 0
  1. ;
  1. ;Do not perform check if background process is running
  1. L +^BSTS(9002318.1,0):0 E Q 1
  1. L -^BSTS(9002318.1,0)
  1. ;
  1. ;Make sure ICD9 to SNOMED background process isn't already running
  1. L +^TMP("BSTSICD2SMD"):0 E Q 1
  1. L -^TMP("BSTSICD2SMD")
  1. ;
  1. ;Queue the process off in the background
  1. D CDJOB^BSTSUTIL(NMIEN,"I")
  1. ;
  1. Q 0
  1. ;
  1. JOB ;Background process to preload SNOMED concepts corresponding to ICD9 values
  1. ;
  1. ;Lock process
  1. L +^TMP("BSTSICD2SMD"):0 E Q
  1. ;
  1. NEW AUPNPROB,JTMP,UID,JTMP,SVAR,MFAIL,FWAIT,ABORT
  1. ;
  1. S UID=$S($G(ZTSK):"Z"_ZTSK,1:$J)
  1. S JTMP=$NA(^TMP("BSTS1POS",UID))
  1. S SVAR=$NA(^TMP("BSTSRPC1",UID))
  1. K @JTMP,^XTMP("BSTSLCMP","QUIT")
  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. S AUPNPROB=0 F S AUPNPROB=$O(^AUPNPROB(AUPNPROB)) Q:'AUPNPROB D Q:$D(^XTMP("BSTSLCMP","QUIT"))
  1. . NEW ICD9,STS,TRY,FCNT
  1. . ;
  1. . ;Reset scratch global
  1. . K @SVAR
  1. . ;
  1. . ;Get the ICD9 code
  1. . S ICD9=$$GET1^DIQ(9000011,AUPNPROB,.01,"E") Q:ICD9=""
  1. . ;
  1. . ;Strip off trailing "."
  1. . S ICD9=$$TKO^BSTSUTIL(ICD9,".")
  1. . ;
  1. . ;Skip if that ICD9 already processed
  1. . I $D(@JTMP@(ICD9)) Q
  1. . ;
  1. . ;Pre-load the SNOMED for that ICD9 - Try call maximum of 12 times
  1. . S (ABORT,FCNT,STS)=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=$$ICD2SMD^BSTSAPI(SVAR,ICD9_"^BCIX^2") 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,"JOB^BSTSUTIL - Looking up ICD9: "_ICD9)
  1. ... I ABORT=1 S ^XTMP("BSTSLCMP","QUIT")=1 D ELOG^BSTSVOFL("ICD9 TO SNOMED LOOKUP FAILED ON ICD9: "_ICD9)
  1. ... S FCNT=0
  1. . ;
  1. . ;Mark the entry processed
  1. . S @JTMP@(ICD9)=""
  1. ;
  1. ;Remove entry when done
  1. K @JTMP
  1. ;
  1. ;Unlock process
  1. L -^TMP("BSTSICD2SMD")
  1. ;
  1. 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. Q