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

BCQMAPI.m

Go to the documentation of this file.
  1. BCQMAPI ; IHS/OIT/FBD - MAGIC MAPPER API ;05/07/18 07:49;FS
  1. ;;1.0;IHS CODE MAPPING;;MAY 07, 2018;Build 21
  1. ;
  1. MM(BCQMF,LOOKUP,LKFORM,VALUE1,VALUE2,VALUE3,VALUE4,VALUE5,VALUE6,BCQMDATE,RETVAL) ;PEP; table oriented magic mapper
  1. ;this API will be called to obtained code values based
  1. ;on an entry in a that file that is passed
  1. ; input:
  1. ; 1 - File number in which the code lives
  1. ; NEW FILE INTRODUCTION: ICD OPERATION/PROCEDURE (80.1) for ICD10 Procedure codes.
  1. ; 2 - lookup value into the table in file
  1. ; the caller must pass a value that will not fail a DIC lookup into the table
  1. ; must be a unique lookup value
  1. ; EXAM - pass standard IHS code, e.g. 34
  1. ; ICD10 Procedures - pass standard IHS ICD10 code, e.g. 5A02210, F0636KZ, F003GZZ..
  1. ; NOTE: there is no unique lookup value in EDUCATION topics so caller must pass the IEN of the topic
  1. ; there are tons of dupes
  1. ; 3 - lookup value format, is this an I (internal value IEN) or E - External value DEFAULT IS "E"
  1. ; VALUE1 - VALUE6 - additional values to check (e.g exam result), these values
  1. ; will be used in the MUMPS code field as additional checks
  1. ; caller will have to be told what order to pass the values in for each table
  1. ; that will be in the technical documentation
  1. ; E.g. MEASUREMENT TYPE: VALUE1=RESULT, VALUE2=QUALIFIER;QUALIFIER;QUALIFIER, VALUE3=visit ien
  1. ; EXAM: VALUE1=RESULT, VALUE2=visit ien
  1. ; HEALTH FACTOR: == NO OTHER VALUES NEEDED
  1. ; EDUCATION: ==== NO OTHER VALUES NEEDED
  1. ; IMMUNIZATION: VALUE1=VISIT SERVICE CATEGORY
  1. ;
  1. ;SEE THE USER MANUAL FOR COMPLETE DESCRIPTION OF THIS API
  1. ;
  1. K @RETVAL
  1. ;I BCQMF'?.N1.".".N S BCQMF=$O(^DIC("B",BCQMF,0))
  1. I '$G(BCQMF) Q "-1^invalid file number" ;no valid file # passed
  1. I '$D(^DD(BCQMF,0)) Q "-1^invalid file number"
  1. I '$D(^DIC(BCQMF,0)) Q "-1^invalid file number"
  1. S LOOKUP=$G(LOOKUP)
  1. I $G(LOOKUP)="" Q "-1^no lookup valued passed"
  1. S LKFORM=$G(LKFORM)
  1. S BCQMDATE=$G(BCQMDATE)
  1. I BCQMDATE="" S BCQMDATE=DT
  1. S VALUE1=$G(VALUE1)
  1. S VALUE2=$G(VALUE2)
  1. S VALUE3=$G(VALUE3)
  1. S VALUE4=$G(VALUE4)
  1. S VALUE5=$G(VALUE5)
  1. S VALUE6=$G(VALUE6)
  1. ;NEW BCQMFIEL,BCQMFV,BCQMX,BCQMY,BCQMMAP,BCQMC,BCQMZ,S,BCQMS,D,C,X,Y
  1. S BCQMC=0
  1. S BCQMX=$O(^BCQM(9002023,"B",BCQMF,0))
  1. I 'BCQMX Q "-1^Table File not supported"
  1. ;do a DIC lookup of LOOKUP value into table BCQMF, then get the appropriate piece
  1. S DIC=BCQMF,DIC(0)="M",X=$S(LKFORM="I":"`"_LOOKUP,1:LOOKUP) D ^DIC
  1. I Y=-1 Q "-1^invalid lookup value"
  1. S BCQMFV=+Y
  1. S BCQMFIEL=$P(^BCQM(9002023,BCQMX,0),U,2)
  1. I BCQMFIEL]"" S BCQMFV=$$GET1^DIQ(BCQMF,BCQMFV,BCQMFIEL)
  1. I BCQMFV="" Q "-1^something went wrong"
  1. I $D(^BCQM(9002023,BCQMX,2)) X ^BCQM(9002023,BCQMX,2) ;CODE PUT IN FOR EDUCATION TOPIC BUT MIGHT BE ABLE TO BE USED FOR OTHER TABLES
  1. ;Now go through all entries in 9002023 for this file and execute M logic for value checks
  1. ;I BCQMF=9999999.09 S BCQMZ=VALUE1 D PROCESS S BCQMZ=VALUE2 D PROCESS S BCQMZ="*ANY*" D PROCESS Q BCQMC
  1. F BCQMZ=BCQMFV,"*ANY*" D PROCESS
  1. Q BCQMC
  1. PROCESS ;
  1. S BCQMY=0 F S BCQMY=$O(^BCQM(9002023,BCQMX,1,"B",BCQMZ,BCQMY)) Q:BCQMY'=+BCQMY D
  1. .S X=0 I $D(^BCQM(9002023,BCQMX,1,BCQMY,1)) X ^BCQM(9002023,BCQMX,1,BCQMY,1) I 'X Q ;doesn't match
  1. .;looks like we got a match so set up codes in retval arry
  1. .S BCQMS=0 F S BCQMS=$O(^BCQM(9002023,BCQMX,1,BCQMY,2,BCQMS)) Q:BCQMS'=+BCQMS D
  1. ..S D=$$GET1^DIQ(9002023.12,BCQMS_","_BCQMY_","_BCQMX,.03)
  1. ..I D]"",BCQMDATE'>D Q ;inactive
  1. ..S S=$$GET1^DIQ(9002023.12,BCQMS_","_BCQMY_","_BCQMX,.01)
  1. ..S C=$$GET1^DIQ(9002023.12,BCQMS_","_BCQMY_","_BCQMX,.02)
  1. ..I S]"",C]"" S BCQMC=BCQMC+1,@RETVAL@(BCQMC,S)=C
  1. Q
  1. MMMEAS ;test
  1. S X=$$MM(9999999.07,"BP","E","120/80",,,,,,DT,"OUT")
  1. W !,X,!
  1. ;ZW OUT
  1. Q
  1. MMEXAM ;test
  1. S X=$$MM("EXAM","09",,"RF",,,,,,DT,"OUT")
  1. W !,X,!
  1. ;ZW OUT
  1. Q
  1. MMEDUC ;test
  1. KILL OUT
  1. S X=$$MM(9999999.09,1109,"I",,,,,,,DT,"OUT")
  1. W !,X,!
  1. ;ZW OUT
  1. Q
  1. MMICD10 ;test
  1. KILL OUT
  1. S X=$$MM(80.1,"F02Z5ZZ",,,,,,,,DT,"OUT")
  1. W !,X,!
  1. ;ZW OUT
  1. Q
  1. ;
  1. PRIMPOV() ;PEP - return SNOMED to use for primary pov
  1. Q $$GET1^DIQ(9002022,1,.02)
  1. ;
  1. EMERPOV() ;PEP - return SNOMED to use for V EMERGENCY VISIT (In Future, for now eCQM module will map it locally)
  1. Q ;$$GET1^DIQ(9002022,2,.02)
  1. ;
  1. HANDED(V,D,RETVAL) ;PEP = get snomed handedness
  1. K @RETVAL
  1. NEW X,Y,BCQMC
  1. I $G(V)="" Q ""
  1. S BCQMC=0
  1. S X=$O(^BCQM(9002022,1,1,"B",V,0))
  1. I 'X Q ""
  1. S Y=0 F S Y=$O(^BCQM(9002022,1,1,X,1,Y)) Q:Y'=+Y D
  1. .S BCQMC=BCQMC+1,@RETVAL@(BCQMC,"SNOMED")=$P($G(^BCQM(9002022,1,1,X,1,Y,0)),U,1)
  1. Q BCQMC
  1. TESTIMM ;
  1. S X=$$MM^BCQMAPI(9002084.81,16,"I",10,,,,,,DT,"CODES")
  1. ;input :
  1. ; 1 - file number of BI TABLE CONTRA REASON
  1. ; 2 - ien of entry in BI TABLE CONTRA REASON
  1. ; 3 - "I" - this tells the mapper you are passing internal ien vs external value
  1. ; 4 - ien of entry in the BI TABLE VACCINE GROUP
  1. ; 5-9 ARE BLANK
  1. ; 10 - date contraindication documented
  1. ; 11 - array you want the snomed codes to be passed back in
  1. ; output:
  1. ; E.G. CODES(1,"SNOMED")=315640000
  1. ; CODES(2,"SNOMED")=1111111
  1. ; you will only get back 1 or more snomed codes e.g. for flu anaphylaxsis you will get back 2
  1. ; we have the second parameter to tell what coding system as some mappings also pass back "LOINC" codes
  1. ; although so far, imm contraindications will not pass back loinc codes.
  1. Q