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

BIUTLFIX.m

Go to the documentation of this file.
  1. BIUTLFIX ;IHS/CMI/MWR - UTIL: FIX STUFF.; AUG 10, 2010
  1. ;;8.5;IMMUNIZATION;**14**;AUG 01,2017
  1. ;;* MICHAEL REMILLARD, DDS * CIMARRON MEDICAL INFORMATICS, FOR IHS *
  1. ;; UTILITY: FIXES: LISTMAN HIDDEN MENUS.
  1. ;; PATCH 1: UPDATE VACCINE TABLE: ADD "INFLUENZA, 1203" CVX=123
  1. ;; PATCH 5: Back-populate SNOMED Codes to all Contraindications. SNOMED+0
  1. ;; PATCH 14: Update NOTE at BUILD+5 and date at BUILD+29
  1. ;; New rtn BITN3 to accommodate larger Vaccine Table BUILD+81
  1. ;
  1. ;
  1. ;----------
  1. BUILD ;EP
  1. ;---> STEPS TO ADD NEW VACCINE TO VACCINE TABLE/IMMUNIZATION FILE:
  1. ;
  1. ;---> 1) Use Fileman to add new vaccine to the BI IMMUNIZATION TABLE
  1. ;---> HL7/CVX STANDARD File #9002084.94.
  1. ;---> NOTE: ^BITN nodes must have a 1 node (e.g., ^BITN(IEN,1)),
  1. ;---> easily done by populating the FULL NAME 1.14 field per CDC.
  1. ;
  1. ;---> 2) Execute line listed below to update ^BITN routine.
  1. ;---> (At programmer prompt, D BUILD^BIUTLFIX ZR X BIX0.)
  1. ;
  1. ;---> 3) Load BITN2 into an editor and trim the entire BITN routine
  1. ;---> that gets tacked onto the end of BITN2 during compilation.
  1. ;
  1. ;---> 4) Restandardize the Vaccine Table D RESTAND^BIRESTD().
  1. ;---> (Or under Manager Menu do MGR-->RES.)
  1. ;
  1. ;---> Build routine ^BITN.
  1. ;---> Not called by any option or User action. Used by package
  1. ;---> programmer to create routine BITN, which in turn is used
  1. ;---> to build ^BITN global during installation.
  1. ;---> To use: At programmer prompt, D BUILD^BIUTLFIX ZR X BIX0.
  1. ;
  1. D SETVARS^BIUTL5
  1. K BIXDT S BIXDT=$$TXDT^BIUTL5(DT)
  1. S BIX0="N I F I=1:1 Q:'$D(@(""BIX""_I)) X @(""BIX""_I)"
  1. ;
  1. ;---> build first routine for nodes <200.
  1. S BIX1="ZI ""BITN ;IHS/CMI/MWR - BUILD ^BITN GLOBAL."""
  1. S BIX2="ZI "" ;;8.5;IMMUNIZATION;**14**;AUG 01,2017"""
  1. S BIX3="ZI "" ;;* MICHAEL REMILLARD, DDS"
  1. S BIX3=BIX3_" * CIMARRON MEDICAL INFORMATICS, FOR IHS *"""
  1. S BIX4="ZI "" ;; UTILITY: BUILD STANDARD ^BITN GLOBAL."""
  1. S BIX5="ZI "" ;"","" ;"","" ;----------"",""START ;EP"""
  1. S BIX6="ZI "" D KGBL^BIUTL8(""""^BITN"""")"""
  1. S BIX7="ZI "" S ^BITN(0)=""""BI IMMUNIZATION TABLE HL7 STANDARD"
  1. S BIX7=BIX7_"^9002084.94I"""""""
  1. ;
  1. S BIX8="ZI "" N I,X,Y,Z"""
  1. S BIX9="ZI "" F I=1:2 S X=$T(@""""TABLE""""+I) Q:X'["""";;"""" D"""
  1. S BIX10="ZI "" .S Y=$P(X,"""";;"""",2),Z=$P(X,"""";;"""",3)"""
  1. S BIX11="ZI "" .S ^BITN(Y,0)=Z"" ZI "" .S X=$T(@""""TABLE""""+(I+1))"
  1. S BIX11=BIX11_",Z=$P(X,"""";;"""",3),^BITN(Y,1)=Z"","" ;"""
  1. ;
  1. ;---> Next node for future inserts.
  1. S BIX12=""
  1. ;
  1. S BIX13="ZI "" F I=1:2 S X=$T(@""""TABLE""""+I^BITN2) Q:X'["""";;"""" D"""
  1. S BIX14="ZI "" .S Y=$P(X,"""";;"""",2),Z=$P(X,"""";;"""",3)"""
  1. S BIX15="ZI "" .S ^BITN(Y,0)=Z"" ZI "" .S X=$T(@""""TABLE""""+(I+1)^BITN2)"
  1. S BIX15=BIX15_",Z=$P(X,"""";;"""",3),^BITN(Y,1)=Z"","" ;"""
  1. ;
  1. S BIX16="ZI "" F I=1:2 S X=$T(@""""TABLE""""+I^BITN3) Q:X'["""";;"""" D"""
  1. S BIX17="ZI "" .S Y=$P(X,"""";;"""",2),Z=$P(X,"""";;"""",3)"""
  1. S BIX18="ZI "" .S ^BITN(Y,0)=Z"" ZI "" .S X=$T(@""""TABLE""""+(I+1)^BITN3)"
  1. S BIX18=BIX18_",Z=$P(X,"""";;"""",3),^BITN(Y,1)=Z"","" ;"""
  1. ;
  1. S BIX19="ZI "" N DIK S DIK=""""^BITN("""" D IXALL^DIK"""
  1. S BIX20="ZI "" Q"","" ;"","" ;"","" ;----------"",""TABLE ; EP"""
  1. S BIX21="N N S N=0 F S N=$O(^BITN(N)) Q:'N Q:(N>189) "
  1. ;S BIX18="N N S N=0 F S N=$O(^AUTTIMM(N)) Q:'N "
  1. S BIX21=BIX21_"ZI "" ;;""_N_"";;""_^BITN(N,0)"
  1. S BIX21=BIX21_" ZI "" ;;""_N_""a;;""_^BITN(N,1)"
  1. S BIX22="ZS BITN ZR "
  1. ;
  1. ;---> Now build second routine for nodes >189.
  1. S BIX23="ZI ""BITN2 ;IHS/CMI/MWR - BUILD ^BITN GLOBAL SECOND PART."""
  1. S BIX24="ZI "" ;;8.5;IMMUNIZATION;**14**;AUG 01,2017"""
  1. S BIX25="ZI "" ;;* MICHAEL REMILLARD, DDS"
  1. S BIX25=BIX25_" * CIMARRON MEDICAL INFORMATICS, FOR IHS *"""
  1. S BIX26="ZI "" ;; UTILITY: BUILD STANDARD ^BITN GLOBAL."""
  1. S BIX27="ZI "" ;"","" ;"","" ;----------"",""TABLE ; EP"""
  1. ;S BIX25="N N S N=199 F S N=$O(^BITN(N)) Q:'N "
  1. S BIX28="N N S N=189 F S N=$O(^BITN(N)) Q:'N Q:(N>259) "
  1. S BIX28=BIX28_"ZI "" ;;""_N_"";;""_^BITN(N,0)"
  1. S BIX28=BIX28_" ZI "" ;;""_N_""a;;""_^BITN(N,1)"
  1. S BIX29="ZI "" Q"""
  1. ;S BIX27="ZS BITN2"
  1. ;S BIX28="W !,""DONE. Load and trim BITN2"""
  1. S BIX30="ZS BITN2 ZR "
  1. ;
  1. ;********** PATCH 14, v8.5, AUG 01,2017, IHS/CMI/MWR
  1. ;---> New rtn BITN3 to accommodate larger Vaccine Table.
  1. ;---> Now build third routine for nodes >260.
  1. S BIX31="ZI ""BITN3 ;IHS/CMI/MWR - BUILD ^BITN GLOBAL THIRD PART."""
  1. S BIX32="ZI "" ;;8.5;IMMUNIZATION;**14**;AUG 01,2017"""
  1. S BIX33="ZI "" ;;* MICHAEL REMILLARD, DDS"
  1. S BIX33=BIX33_" * CIMARRON MEDICAL INFORMATICS, FOR IHS *"""
  1. S BIX34="ZI "" ;; UTILITY: BUILD STANDARD ^BITN GLOBAL."""
  1. S BIX35="ZI "" ;"","" ;"","" ;----------"",""TABLE ; EP"""
  1. S BIX36="N N S N=259 F S N=$O(^BITN(N)) Q:'N "
  1. S BIX36=BIX36_"ZI "" ;;""_N_"";;""_^BITN(N,0)"
  1. S BIX36=BIX36_" ZI "" ;;""_N_""a;;""_^BITN(N,1)"
  1. S BIX37="ZI "" Q"""
  1. S BIX38="ZS BITN3 ZR "
  1. S BIX39="W !,""DONE. Load and trim BITN2 and BITN3"""
  1. Q
  1. ;
  1. ;
  1. ;********** PATCH 5, v8.5, JUL 01,2013, IHS/CMI/MWR
  1. SNOMED ;PEP - Back-populate SNOMED Codes to all Contraindications.
  1. ;
  1. N BIIEN S BIIEN=0 F S BIIEN=$O(^BIPC(BIIEN)) Q:'BIIEN D
  1. .Q:'$D(^BIPC(BIIEN,0))
  1. .N BICRIEN,BIVIEN,BIY
  1. .S BIY=^BIPC(BIIEN,0)
  1. .S BIVIEN=$P(BIY,U,2) ;Vaccine IEN.
  1. .S BICRIEN=$P(BIY,U,3) ;Contraindication Reason IEN.
  1. .N I,X,Y
  1. .;---> Get string of Vaccine Component IEN's.
  1. .S X=$$VCOMPS^BIUTL2(BIVIEN)
  1. .;---> If no components process the vaccine itself.
  1. .S:('+X) X=BIVIEN
  1. .;
  1. .F I=1:1:6 S Y=$P(X,";",I) Q:'Y D
  1. ..;---> Get Vaccine Group IEN of this vaccine.
  1. ..N BIVGRP S BIVGRP=$$IMMVG^BIUTL2(Y)
  1. ..;---> Quit if Vaccine Group is Other, Skin Test, or Combo.
  1. ..Q:((BIVGRP=12)!(BIVGRP=13)!(BIVGRP=14)!(BIVGRP<1))
  1. ..;---> Call Lori's Magic Mapper to get SNOMED Code.
  1. ..D SNOMED^BIRPC4(BIVGRP,BICRIEN,BIIEN)
  1. Q
  1. ;**********
  1. ;
  1. ;
  1. ;----------
  1. LISTMENU ;EP
  1. ;---> Fix/update Listmanager hidden menus.
  1. ;---> This will go through all of the BI PROTOCOLS and update
  1. ;---> any hidden menus.
  1. ;
  1. D ^XBKVAR
  1. D LISTQUIT
  1. N N S N="BI"
  1. F S N=$O(^ORD(101,"B",N)) Q:N="" Q:N]"BIZZZ" D
  1. .Q:N'["HIDDEN"
  1. .N BIIEN S BIIEN=$O(^ORD(101,"B",N,0))
  1. .D:BIIEN FIX(BIIEN)
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. FIX(BIIEN) ;EP
  1. Q:'BIIEN Q:'$D(^ORD(101,+BIIEN,0))
  1. S XQORM=+BIIEN_";ORD(101,"
  1. D XREF^XQORM
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. LISTQUIT ;EP
  1. ;---> Set Quit synonym to "Q" on VALM HIDDEN ACTIONS Protocol.
  1. ;---> Get IEN of VALM HIDDEN ACTIONS Protocol.
  1. N BIN S BIN=$O(^ORD(101,"B","VALM HIDDEN ACTIONS",0))
  1. Q:'BIN
  1. Q:$P(^ORD(101,BIN,0),U)'="VALM HIDDEN ACTIONS"
  1. ;
  1. ;---> Find "VALM QUIT" Item.
  1. N N S N=0
  1. F S N=$O(^ORD(101,BIN,10,N)) Q:'N D
  1. .N X,Y
  1. .S X=$P(^ORD(101,BIN,10,N,0),U)
  1. .S Y=$P($G(^ORD(101,X,0)),U)
  1. .Q:Y'="VALM QUIT"
  1. .S $P(^ORD(101,BIN,10,N,0),U,2)="Q"
  1. D FIX(BIN)
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. ONE ;EP
  1. ;---> Individual Hidden Menu lookup.
  1. W !!,"Select the Protocol you wish to fix.",!
  1. D DIC^BIFMAN(101,"QEMA",.Y)
  1. Q:Y<0
  1. D FIX(+Y)
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. BADPATS ;EP
  1. ;---> Look for BI PATIENTS with no data in ^BIP(BIDFN,0) node.
  1. ;
  1. S N=0
  1. F S N=$O(^BIP(N)) Q:'N D
  1. .W:'$P(^BIP(N,0),"^") !,N,": ",^(0)
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. ACTIVE ;EP
  1. ;---> Fix patients whose "Date Inactive" was erroneously converted.
  1. ;---> 1=Active, 0=Inactive.
  1. ;
  1. N BITOTN,BITOTY
  1. S N=0
  1. S BITOTN=0,BITOTY=0
  1. F S N=$O(^BIP(N)) Q:'N D
  1. .I $P(^BIP(N,0),"^",8)=0 S $P(^(0),U,8)=DT S BITOTN=BITOTN+1 Q
  1. .I $P(^BIP(N,0),"^",8)=1 S $P(^(0),U,8)="" S BITOTY=BITOTY+1
  1. W !,"NO : ",BITOTN
  1. W !,"YES: ",BITOTY
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. CHGPTR(BICHG) ;EP
  1. ;---> Change all records with one vaccine pointer to a different one.
  1. ;---> Parameters:
  1. ; 1 - BICHG (opt) IF BICHG=1 then change entries from 214 to 235.
  1. ;
  1. D SETVARS^BIUTL5
  1. D KGBL^BIUTL8("^MIKE") S ^MIKE(0)=^AUPNVIMM(0)
  1. N BICOUNT,BIECOUNT,BIN S BIN=0,BICOUNT=0,BIECOUNT=0
  1. F S BIN=$O(^AUPNVIMM(BIN)) Q:'BIN D
  1. .N BIERR S BIERR=0
  1. .Q:($P(^AUPNVIMM(BIN,0),U)'=214)
  1. .S BICOUNT=BICOUNT+1
  1. .Q:('$G(BICHG))
  1. .S ^MIKE(BIN,0)=^AUPNVIMM(BIN,0)
  1. .;
  1. .;---> Change .01 pointer to VAccine Table.
  1. .N BIFLD S BIFLD(.01)=235
  1. .D FDIE^BIFMAN(9000010.11,BIN,.BIFLD,.BIERR)
  1. .I BIERR=1 S BIECOUNT=BIECOUNT+1,^MIKE("ERR",N)="" Q
  1. ;
  1. W !!,"COUNT: ",BICOUNT
  1. W !,"ERRORS: ",BIECOUNT
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. CURCOM ;EP
  1. ;---> Utility to update Patients' Curren Community pointer, piece 17,
  1. ;---> based on text of Community in piece 18 of ^AUPNPAT(DFN,11).
  1. ;
  1. N DFN,TOTAL
  1. S DFN=0,TOTAL=0,U="^"
  1. F S DFN=$O(^AUPNPAT(DFN)) Q:'DFN D
  1. .N X,Y
  1. .Q:'$D(^AUPNPAT(DFN,11))
  1. .;
  1. .;---> Quit if piece 17 is already set.
  1. .Q:$P(^AUPNPAT(DFN,11),U,17)
  1. .;
  1. .;---> First try to get Current Community pointer from the last
  1. .;---> "Community of Residence" Subfield of "Previous Community"
  1. .;---> (Field .03 of the last/latest 51 subnode).
  1. .N CC,N S CC="",N=0
  1. .F S N=$O(^AUPNPAT(DFN,51,N)) Q:'N D
  1. ..S CC=$P($G(^AUPNPAT(DFN,51,N,0)),U,3)
  1. .;
  1. .;---> If the last Previous Community is a good pointer, use it & quit.
  1. .I CC I $D(^AUTTCOM(CC,0)) D Q
  1. ..;---> Set the "CURRENT RESIDENCE PTR" Field #1117.
  1. ..S $P(^AUPNPAT(DFN,11),U,17)=CC
  1. ..;---> Set the "CURRENT COMMUNITY" Field #1118 (text).
  1. ..S $P(^AUPNPAT(DFN,11),U,18)=$P(^AUTTCOM(CC,0),U)
  1. ..S TOTAL=TOTAL+1
  1. .;
  1. .;---> If Previous Comm failed, get text of Community from piece 18.
  1. .S X=$P(^AUPNPAT(DFN,11),U,18)
  1. .Q:X=""
  1. .;
  1. .;---> If text of piece 18 exists in Community file, get IEN and
  1. .;---> set patient's piece 17=IEN in Community File.
  1. .D:$D(^AUTTCOM("B",X))
  1. ..S Y=$O(^AUTTCOM("B",X,0))
  1. ..;---> Quit if there are other instances of this name.
  1. ..Q:$O(AUTTCOM("B",X,Y))
  1. ..;---> Quit if the pointer is bad.
  1. ..Q:'$D(^AUTTCOM(+Y,0))
  1. ..S $P(^AUPNPAT(DFN,11),U,17)=Y
  1. ..S TOTAL=TOTAL+1
  1. ;
  1. W !!?5,"Total changed: ",TOTAL,!?5,"Done.",!
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. BADINACT ; EP
  1. ;---> Correct any bad Inactive Dates, that were 1 or 0 from earLier
  1. ;---> version.
  1. D ^XBKVAR
  1. N M,N,P
  1. S M=0,P=0
  1. S N=0
  1. F S N=$O(^BIP(N)) Q:'N D
  1. .I $P(^BIP(N,0),"^",8)=1 S $P(^(0),U,8)=2990507 S M=M+1 Q
  1. .I $P(^BIP(N,0),"^",8)=0 S $P(^(0),U,8)="" S P=P+1 Q
  1. ;
  1. W !,"BAD DATES: ",M
  1. W !,"ZERO ACTIVE: ",P
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. LOTNUM ;EP
  1. ;---> Inactivate all Lot Numbers.
  1. D ^XBKVAR
  1. N N S N=0
  1. F S N=$O(^AUTTIML(N)) Q:'N D
  1. .Q:'$D(^AUTTIML(N,0))
  1. .;---> Do not Inactivate if Exp Date is later than Today.
  1. .Q:($P(^AUTTIML(N,0),"^",9)>$G(DT))
  1. .;---> Inactivate this Lot Number.
  1. .S $P(^AUTTIML(N,0),"^",3)=1
  1. W !!,"All Lot Numbers have been Inactivated.",!
  1. Q
  1. ;
  1. ;
  1. RELCONT ;EP
  1. ;---> Update Flu Related Contraindications.
  1. ;
  1. D ^XBKVAR
  1. N N,Y S N=0
  1. ;---> Flu CVX Codes, related contraindications.
  1. S Y="15,16,88,111,123,125,126,127,128,135,140,141,144,149,150,151,153,155,158,161,166,168,171,185"
  1. F S N=$O(^BITN(N)) Q:'N D
  1. .;---> Quit if this is not in the FLU Vaccine Group.
  1. .Q:($P(^BITN(N,0),U,9)'=10)
  1. .W !!,$P(^BITN(N,0),U,3)," ",$P(^BITN(N,0),U,12)
  1. .S $P(^BITN(N,0),U,12)=Y
  1. ;
  1. Q
  1. ;
  1. ;
  1. ;----------
  1. NULLACT ;EP
  1. ;---> Activate all Lot Numbers that have a Status=null.
  1. ;---> Call by postinit for Imm v8.5.
  1. ;
  1. D ^XBKVAR
  1. W !!?5,"Checking Lot Numbers for null Status..."
  1. N M,N S M=0,N=0
  1. F S N=$O(^AUTTIML(N)) Q:'N D
  1. .Q:'$D(^AUTTIML(N,0))
  1. .;---> Quit if this lot number has a Status .
  1. .Q:($P(^AUTTIML(N,0),"^",3)'="")
  1. .;---> Okay, Status must be null, so set it to Active.
  1. .S $P(^AUTTIML(N,0),"^",3)=0,M=M+1
  1. W !!?5,"Done. ",M," Lot Numbers have been fixed." D DIRZ^BIUTL3()
  1. Q