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

BSTSDTS2.m

Go to the documentation of this file.
  1. BSTSDTS2 ;GDIT/HS/BEE-Standard Terminology DTS Calls/Processing ; 5 Nov 2012 9:53 AM
  1. ;;2.0;IHS STANDARD TERMINOLOGY;**1**;Dec 01, 2016;Build 36
  1. ;
  1. Q
  1. ;
  1. ;
  1. N II,STS,SEARCH,STYPE,WORD,MAX,DTSID,NMID
  1. N BSTRT,BSCNT,SLIST,DLIST,RES,RCNT,CNT,DUPLST
  1. ;
  1. S SEARCH=$G(BSTSWS("SEARCH"))
  1. S STYPE=$G(BSTSWS("STYPE"))
  1. S SLIST=$NA(^TMP("BSTSSLST",$J)) ;Sorted List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J)) ;DTS Return List
  1. K @SLIST,@DLIST,@OUT
  1. ;
  1. ;Determine maximum to return
  1. S MAX=$G(BSTSWS("MAXRECS")) S:MAX="" MAX=25
  1. S BSTRT=+$G(BSTSWS("BCTCHRC")) S:BSTRT=0 BSTRT=1
  1. S BSCNT=+$G(BSTSWS("BCTCHCT")) S:BSCNT=0 BSCNT=MAX
  1. S NMID=$G(BSTSWS("NAMESPACEID")) S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. ;
  1. ;Loop through each word
  1. S BSTSWS("SEARCH")=SEARCH
  1. ;
  1. ;Perform DTS Search
  1. I STYPE="S" S STS=$$TRMSRCH^BSTSCMCL(.BSTSWS,.RES) I $G(BSTSWS("DEBUG")) W !!,STS
  1. ;
  1. ;Perform DTS concept search
  1. I STYPE="F" S STS=$$CONSRCH^BSTSCMCL(.BSTSWS,.RES) I $G(BSTSWS("DEBUG")) W !!,STS
  1. ;
  1. ;Loop through results and retrieve detail
  1. M @SLIST=@DLIST
  1. ;
  1. I $O(@SLIST@(""))]"" S II="",CNT=0 F S II=$O(@SLIST@(II)) Q:II="" D
  1. . NEW STATUS,CONC,ROUT,ERSLT,DSCID
  1. . ;
  1. . S DTSID=$P(@SLIST@(II),U) Q:DTSID=""
  1. . S DSCID=$P(@SLIST@(II),U,2) I STYPE="S",DSCID="" Q
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !,"DTSID: ",DTSID
  1. . ;
  1. . ;Check for batch count
  1. . I $G(RCNT)'<BSCNT Q
  1. . ;
  1. . ;Check for maximum
  1. . I $G(RCNT)'<MAX Q
  1. . ;
  1. . ;Look for detail stored locally
  1. . ;
  1. . S CONC=$$CONC^BSTSDTS0(DTSID,.BSTSWS)
  1. . I CONC]"" D Q
  1. .. S CNT=CNT+1 I CNT<BSTRT Q ;Check for starting point
  1. .. S RCNT=$G(RCNT)+1,@OUT@(RCNT)=CONC_U_DTSID_U_DSCID
  1. . ;
  1. . ;Not Found or in need of update
  1. . S BSTSWS("DTSID")=DTSID
  1. . ;
  1. . ;Clear result file
  1. . K @DLIST
  1. . ;
  1. . ;Get Detail for concept
  1. . S STATUS=$$DETAIL^BSTSCMCL(.BSTSWS,.ERSLT)
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !!,"DETAIL STATUS: ",STATUS
  1. . ;
  1. . ;File the Detail
  1. . S STATUS=$$UPDATE^BSTSDTS0(NMID)
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !!,"UPDATE STATUS: ",STATUS
  1. . ;
  1. . ;Look again to see if concept now logged
  1. . S CONC=$$CONC^BSTSDTS0(DTSID,.BSTSWS)
  1. . I $G(BSTSWS("DEBUG")) W !!,"CONC: ",CONC
  1. . I CONC]"" D Q
  1. .. S CNT=CNT+1 I CNT<BSTRT Q ;Check for start point
  1. .. S RCNT=$G(RCNT)+1,@OUT@(RCNT)=CONC_U_DTSID_U_DSCID
  1. K @DLIST,@SLIST
  1. ;
  1. Q STS
  1. ;
  1. ICD2SMD(OUT,BSTSWS) ;EP - DTS4 ICD9 to SNOMED mapping retrieval
  1. ;
  1. N II,STS,SEARCH,STYPE,WORD,MAX,DTSID,NMID
  1. N BSTRT,BSCNT,SLIST,DLIST,RES,RCNT,CNT,DUPLST
  1. ;
  1. S SEARCH=$G(BSTSWS("SEARCH"))
  1. S STYPE=$G(BSTSWS("STYPE"))
  1. S SLIST=$NA(^TMP("BSTSPDET",$J)) ;Sorted List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J)) ;DTS Return List
  1. K @SLIST,@DLIST,@OUT
  1. ;
  1. ;Determine maximum to return
  1. S MAX=$G(BSTSWS("MAXRECS")) S:MAX="" MAX=25
  1. S BSTRT=+$G(BSTSWS("BCTCHRC")) S:BSTRT=0 BSTRT=1
  1. S BSCNT=+$G(BSTSWS("BCTCHCT")) S:BSCNT=0 BSCNT=MAX
  1. S NMID=$G(BSTSWS("NAMESPACEID")) S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. ;
  1. ;Loop through each word
  1. S BSTSWS("SEARCH")=SEARCH
  1. ;
  1. ;Perform DTS Call
  1. S STS=$$ICD2SMD^BSTSCMCL(.BSTSWS,.RES) I $G(BSTSWS("DEBUG")) W !!,STS
  1. ;
  1. ;Loop through results and retrieve detail
  1. M @SLIST=@DLIST
  1. I $O(@SLIST@(""))]"" S II="",CNT=0 F S II=$O(@SLIST@(II)) Q:II="" D
  1. . NEW STATUS,CONC,ROUT,ERSLT,DSCID
  1. . S DTSID=$P(@SLIST@(II),U) Q:DTSID=""
  1. . S DSCID=$P(@SLIST@(II),U,2) I STYPE="S",DSCID="" Q
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !,"DTSID: ",DTSID
  1. . ;
  1. . ;Check for maximum
  1. . I $G(RCNT)'<MAX Q
  1. . ;
  1. . ;Look for detail stored locally
  1. . ;
  1. . S CONC=$$CONC^BSTSDTS0(DTSID,.BSTSWS)
  1. . I CONC]"" D Q
  1. .. S CNT=CNT+1 I CNT<BSTRT Q ;Check for starting point
  1. .. S RCNT=$G(RCNT)+1,@OUT@(RCNT)=CONC_U_DTSID_U_DSCID
  1. . ;
  1. . ;Not Found or in need of update
  1. . S BSTSWS("DTSID")=DTSID
  1. . ;
  1. . ;Clear result file
  1. . K @DLIST
  1. . ;
  1. . ;Get Detail for concept
  1. . S STATUS=$$DETAIL^BSTSCMCL(.BSTSWS,.ERSLT)
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !!,"DETAIL STATUS: ",STATUS
  1. . ;
  1. . ;File the Detail
  1. . S STATUS=$$UPDATE^BSTSDTS0(NMID)
  1. . ;
  1. . I $G(BSTSWS("DEBUG")) W !!,"UPDATE STATUS: ",STATUS
  1. . ;
  1. . ;Look again to see if concept now logged
  1. . S CONC=$$CONC^BSTSDTS0(DTSID,.BSTSWS)
  1. . I $G(BSTSWS("DEBUG")) W !!,"CONC: ",CONC
  1. . I CONC]"" D Q
  1. .. S CNT=CNT+1 I CNT<BSTRT Q ;Check for start point
  1. .. S RCNT=$G(RCNT)+1,@OUT@(RCNT)=CONC_U_DTSID_U_DSCID
  1. K @DLIST,@SLIST
  1. ;
  1. Q STS
  1. ;
  1. ICDMAP(CONCDA,GL) ;EP - Save ICD Mapping information
  1. ;
  1. ;BSTS*2.0*1;Switched from using ICD9 mapping advice to ICD10
  1. NEW DA,DIK,II
  1. ;
  1. ;Clear existing entries
  1. S DA(1)=CONCDA
  1. S II=0 F S II=$O(^BSTS(9002318.4,DA(1),2,II)) Q:'II S DA=II,DIK="^BSTS(9002318.4,"_DA(1)_",2," D ^DIK
  1. ;
  1. ;Save ICD Mapping Information
  1. I $D(@GL@("ICD10A"))>1 D
  1. . NEW IMCNT
  1. . S IMCNT="" F S IMCNT=$O(@GL@("ICD10A",IMCNT)) Q:IMCNT="" D
  1. .. NEW DA,IENS,MATND,MAT,MATRIN,MATROUT,BSTSICD
  1. .. NEW MAND,MA,MARIN,MAROUT
  1. .. NEW MCVND,MCV,MCVRIN,MCVROUT
  1. .. NEW MGND,MG,MGRIN,MGROUT
  1. .. NEW MRND,MR,MRRIN,MRROUT
  1. .. NEW MTND,MT,MTRIN,MTROUT
  1. .. NEW MTNND,MTN,MTNRIN,MTNROUT
  1. .. NEW MPND,MP,MPRIN,MPROUT,VR
  1. .. ;
  1. .. ;Get new entry
  1. .. S DA=$$NEWM(CONCDA) I 'DA Q
  1. .. S DA(1)=CONCDA
  1. .. S IENS=$$IENS^DILF(.DA)
  1. .. ;
  1. .. ;Map Group
  1. .. S MGND=$G(@GL@("ICD10A",IMCNT,"mapGroup"))
  1. .. S MG=$P(MGND,U)
  1. .. S MGRIN=$P(MGND,U,2)
  1. .. S MGROUT=$P(MGND,U,3)
  1. .. I MG]"" D
  1. ... S BSTSICD(9002318.42,IENS,.02)=MG
  1. ... S BSTSICD(9002318.42,IENS,.03)=$$EP2FMDT^BSTSUTIL(MGRIN)
  1. ... S BSTSICD(9002318.42,IENS,.04)=$$EP2FMDT^BSTSUTIL(MGROUT)
  1. .. ;
  1. .. ;Map Priority
  1. .. S MPND=$G(@GL@("ICD10A",IMCNT,"mapPriority"))
  1. .. S MP=$P(MPND,U)
  1. .. S MPRIN=$P(MPND,U,2)
  1. .. S MPROUT=$P(MPND,U,3)
  1. .. I MP]"" D
  1. ... S BSTSICD(9002318.42,IENS,.05)=MP
  1. ... S BSTSICD(9002318.42,IENS,.06)=$$EP2FMDT^BSTSUTIL(MPRIN)
  1. ... S BSTSICD(9002318.42,IENS,.07)=$$EP2FMDT^BSTSUTIL(MPROUT)
  1. .. ;
  1. .. ;Map Target
  1. .. S MTND=$G(@GL@("ICD10A",IMCNT,"mapTarget"))
  1. .. S MT=$P(MTND,U)
  1. .. S MTRIN=$P(MTND,U,2)
  1. .. S MTROUT=$P(MTND,U,3)
  1. .. I MTND]"" D
  1. ... S BSTSICD(9002318.42,IENS,.08)=MT
  1. ... S BSTSICD(9002318.42,IENS,.09)=$$EP2FMDT^BSTSUTIL(MTRIN)
  1. ... S BSTSICD(9002318.42,IENS,.1)=$$EP2FMDT^BSTSUTIL(MTROUT)
  1. .. ;
  1. .. ;Map Target Name
  1. .. S MTN="" I $P(MTND,U)]"" D
  1. ... ;
  1. ... NEW CIEN,NIEN,DA,MIENS
  1. ... S CIEN=$O(^ICD9("AB",$P(MTND,U)_" ","")) Q:CIEN=""
  1. ... S MTNRIN=$O(^ICD9(CIEN,67,"B",""),-1) Q:MTNRIN=""
  1. ... S NIEN=$O(^ICD9(CIEN,67,"B",MTNRIN,""),-1) Q:NIEN=""
  1. ... S DA(1)=CIEN,DA=NIEN S MIENS=$$IENS^DILF(.DA)
  1. ... S MTN=$$GET1^DIQ(80.067,MIENS,1,"E")
  1. ... I MTN]"" D
  1. .... N TXT,VAR
  1. .... D WRAP^BSTSUTIL(.TXT,MTN,220)
  1. .... S VAR="TXT"
  1. .... D WP^DIE(9002318.42,IENS,2,"",VAR)
  1. .... S BSTSICD(9002318.42,IENS,5.05)=MTNRIN
  1. .... S BSTSICD(9002318.42,IENS,5.06)="@"
  1. .. ;
  1. .. ;Map Advice
  1. .. S MAND=$G(@GL@("ICD10A",IMCNT,"mapAdvice"))
  1. .. S MA=$P(MAND,U)
  1. .. ;
  1. .. ;Special variable handling/conversion
  1. .. F VR="Initial;First/New episode","Subsequent;Ongoing episode" I MA[$P(VR,";") D
  1. ... NEW PC,NMA
  1. ... S NMA="" F PC=1:1:$L(MA,$P(VR,";")) S NMA=NMA_$P(MA,$P(VR,";"),PC)_$S(PC=$L(MA,$P(VR,";")):"",1:$P(VR,";",2))
  1. ... S MA=NMA
  1. .. ;
  1. .. S MATRIN=$P(MAND,U,2)
  1. .. S MATROUT=$P(MAND,U,3)
  1. .. I MA]"" D
  1. ... ;
  1. ... ;Append ICD Description
  1. ... I MTN]"" S MA=MA_" ["_MTN_"]"
  1. ... N TXT,VAR
  1. ... D WRAP^BSTSUTIL(.TXT,MA,220)
  1. ... S VAR="TXT"
  1. ... D WP^DIE(9002318.42,IENS,1,"",VAR)
  1. ... S BSTSICD(9002318.42,IENS,5.01)=$$EP2FMDT^BSTSUTIL(MATRIN)
  1. ... S BSTSICD(9002318.42,IENS,5.02)=$$EP2FMDT^BSTSUTIL(MATROUT)
  1. .. ;
  1. .. ;Map Rule
  1. .. S MRND=$G(@GL@("ICD10A",IMCNT,"mapRule"))
  1. .. S MR=$P(MRND,U)
  1. .. S MRRIN=$P(MRND,U,2)
  1. .. S MRROUT=$P(MRND,U,3)
  1. .. I MR]"" D
  1. ... N TXT,VAR
  1. ... D WRAP^BSTSUTIL(.TXT,MR,220)
  1. ... S VAR="TXT"
  1. ... D WP^DIE(9002318.42,IENS,3,"",VAR)
  1. ... S BSTSICD(9002318.42,IENS,5.03)=$$EP2FMDT^BSTSUTIL(MRRIN)
  1. ... S BSTSICD(9002318.42,IENS,5.04)=$$EP2FMDT^BSTSUTIL(MRROUT)
  1. .. ;
  1. .. ;Map Category Value
  1. .. S MCVND=$G(@GL@("ICD10A",IMCNT,"mapCategoryValue"))
  1. .. S MCV=$P(MCVND,U)
  1. .. S MCVRIN=$P(MCVND,U,2)
  1. .. S MCVROUT=$P(MCVND,U,3)
  1. .. I MCV]"" D
  1. ... N TXT,VAR
  1. ... D WRAP^BSTSUTIL(.TXT,MCV,220)
  1. ... S VAR="TXT"
  1. ... D WP^DIE(9002318.42,IENS,4,"",VAR)
  1. ... S BSTSICD(9002318.42,IENS,5.07)=$$EP2FMDT^BSTSUTIL(MCVRIN)
  1. ... S BSTSICD(9002318.42,IENS,5.08)=$$EP2FMDT^BSTSUTIL(MCVROUT)
  1. .. ;
  1. .. ;File information
  1. .. I $D(BSTSICD) D FILE^DIE("","BSTSICD","ERROR")
  1. ;
  1. Q 1
  1. ;
  1. NEWM(CIEN) ;Create new ICD Mapping entry
  1. N DIC,X,Y,DA,DLAYGO
  1. S DIC(0)="L",DA(1)=CIEN
  1. S DIC="^BSTS(9002318.4,"_DA(1)_",2,"
  1. L +^BSTS(9002318.4,CIEN,2,0):1 E Q ""
  1. S X=$P($G(^BSTS(9002318.4,CIEN,2,0)),U,3)+1
  1. S DLAYGO=9002318.42 D ^DIC
  1. L -^BSTS(9002318.4,CIEN,2,0)
  1. Q +Y
  1. ;
  1. ;
  1. SUBLST(DLIST,BSTSWS) ;EP - Perform a Web Service Subset Listing
  1. ;
  1. N II,STS,SEARCH,STYPE,MAX,DTSID,NMID
  1. N BSTRT,BSCNT,SLIST,DLIST,RES,RCNT,CNT,ST,ABORT
  1. ;
  1. S SEARCH=$G(BSTSWS("SEARCH"))
  1. S STYPE=$G(BSTSWS("STYPE"))
  1. ;
  1. ;Determine maximum to return
  1. S MAX=$G(BSTSWS("MAXRECS")) S:MAX="" MAX=25
  1. S BSTRT=+$G(BSTSWS("BCTCHRC")) S:BSTRT=0 BSTRT=1
  1. S BSCNT=+$G(BSTSWS("BCTCHCT")) S:BSCNT=0 BSCNT=MAX
  1. S NMID=$G(BSTSWS("NAMESPACEID")) S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. ;
  1. ;Perform Lookup on Subset
  1. ;
  1. ;Foreground call
  1. I $G(BSTSWS("BSTSBPRC"))="" D
  1. . S STS=$$SUBLST^BSTSCMCL(.BSTSWS,.RES) I $G(BSTSWS("DEBUG")) W !!,STS
  1. ;
  1. ;Background call try until completed - Hang max of 12 times
  1. I $G(BSTSWS("BSTSBPRC"))=1 D
  1. . NEW FCNT,MFAIL,FWAIT,TRY
  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 FCNT=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=$$SUBLST^BSTSCMCL(.BSTSWS,.RES) I +STS!(STS="0^") Q
  1. .. S FCNT=FCNT+1 I FCNT'<MFAIL D ;Fail handling
  1. ... S ABORT=$$FAIL^BSTSVOFL(MFAIL,FWAIT,TRY,"SUBLST^BSTSDTS2 - Retrieving subset: "_$G(BSTSWS("SUBSET")))
  1. ... I ABORT=1 S STS="0^" D ELOG^BSTSVOFL("SUBSET REFRESH FAILED ON SUBSET LOOKUP: "_$G(BSTSWS("SUBSET")))
  1. ... S FCNT=0
  1. ;
  1. Q STS
  1. ;
  1. DSCSRCH(OUT,BSTSWS) ;EP - DTS4 Search Call - Description Id Lookup
  1. ;
  1. N II,STS,SEARCH,STYPE,MAX,DTSID,NMID
  1. N BSTRT,BSCNT,SLIST,DLIST,RES,RCNT,CNT,ST
  1. ;
  1. S SEARCH=$G(BSTSWS("SEARCH"))
  1. S STYPE=$G(BSTSWS("STYPE"))
  1. S SLIST=$NA(^TMP("BSTSPDET",$J)) ;Sorted List
  1. S DLIST=$NA(^TMP("BSTSCMCL",$J)) ;DTS Return List
  1. K @DLIST,@OUT
  1. ;
  1. ;Determine maximum to return
  1. S MAX=$G(BSTSWS("MAXRECS")) S:MAX="" MAX=25
  1. S BSTRT=+$G(BSTSWS("BCTCHRC")) S:BSTRT=0 BSTRT=1
  1. S BSCNT=+$G(BSTSWS("BCTCHCT")) S:BSCNT=0 BSCNT=MAX
  1. S NMID=$G(BSTSWS("NAMESPACEID")) S:NMID="" NMID=36 S:NMID=30 NMID=36
  1. ;
  1. ;Perform Lookup on Concept Id
  1. S STS=$$DSCSRCH^BSTSCMCL(.BSTSWS,.RES) I $G(BSTSWS("DEBUG")) W !!,STS
  1. ;
  1. S DTSID=$P($G(@DLIST@(1)),U) I DTSID D
  1. . ;
  1. . ;Loop through results and retrieve detail
  1. . ;
  1. . N STATUS,CONC,ERSLT
  1. . ;
  1. . ;Update entry
  1. . S BSTSWS("DTSID")=DTSID
  1. . ;
  1. . ;Clear result file
  1. . K @DLIST
  1. . ;
  1. . ;Get Detail for concept
  1. . S STATUS=$$DETAIL^BSTSCMCL(.BSTSWS,.ERSLT)
  1. . I $G(BSTSWS("DEBUG")) W !!,"Detail Call Status: ",STATUS
  1. . ;
  1. . ;File the Detail
  1. . S STATUS=$$UPDATE^BSTSDTS0(NMID)
  1. . I $G(BSTSWS("DEBUG")) W !!,"Update Call Status: ",STATUS
  1. . ;
  1. . ;Look to see if concept now logged
  1. . S CONC=$$CONC^BSTSDTS0(DTSID,.BSTSWS,1,1)
  1. . I CONC]"" D Q
  1. .. S RCNT=$G(RCNT)+1,@OUT@(RCNT)=CONC_U_DTSID_U_SEARCH
  1. ;
  1. Q STS
  1. ;
  1. SUBSET(OUT,BSTSWS) ;EP - DTS4 Get subset list
  1. ;
  1. NEW PRESULT,STS,II,SLIST
  1. ;
  1. ;Set up scratch global
  1. S SLIST=$NA(^TMP("BSTSCMCL",$J)) K @SLIST
  1. ;
  1. ;Call DTS
  1. S STS=$$SUBSET^BSTSCMCL(.BSTSWS,.PRESULT)
  1. ;
  1. S II="" F S II=$O(@SLIST@(II)) Q:II="" S @OUT@(II)=@SLIST@(II)
  1. K @SLIST
  1. ;
  1. Q STS