diff --git a/README.md b/README.md
index 1364e6f1d7bae15a0bd1465c2bebac87fe920194..ae7a75bd4ad2dec37842a9b0be274f13aa72326d 100644
--- a/README.md
+++ b/README.md
@@ -148,18 +148,26 @@ coddis, verdis, tipobg, coddis_equivalente, verdis_equivalente
  - *dump($numpat, $cols)*: recebe numpat e retorna todos campos da tabela bempatrimoniado
  - *verifica($numpat)*: recebe numpat e retorna true se o bem está ativo
 
- - *ativos($params = null, $operador = 'AND')*: retorna todos campos da tabela BEMPATRIMONIADO dos patrimônios ativos. Pode-se utilizar o array $params no formato campo_tabela => valor para filtrar os bens e definir operador AND/OR (AND é o padrão);
+ - *bens($filtros = [], $buscas = [], $tipos = [])*: retorna todos campos da tabela BEMPATRIMONIADO dos patrimônios. Utilizar $filtros para valores exatos, $buscas com o *LIKE* e $tipos para colunas que precisam de convert.
+
+ - *ativos($filtros = [], $buscas = [], $tipos = [])*: retorna todos campos da tabela BEMPATRIMONIADO dos patrimônios ATIVOS. Utilizar $filtros para valores exatos, $buscas com o *LIKE* e $tipos para colunas que precisam de convert. Em $filtros já é adicionado por padrão o 'stabem' = 'Ativo'.
+
   * Exemplo utilização: 
   ```php
-        $params = [
+        $filtros = [
             'codpes' => 11111111,
+            'codlocusp' => 11111,
+        ];
+        $buscas = [
             'epfmarpat' => 'MARCA',
-            'epforibem' => 'Doação',
             'modpat' => 'CORE 2 DUO',
-            'codlocusp' => 11111,
         ];
-        $bens = Bempatrimoniado::ativos($params); // utiliza operador AND por padrão
-        $bens = Bempatrimoniado::ativos($params, 'OR');
+        $tipos = [
+            'codpes' => 'int',
+            'codlocusp' => 'numeric',
+        ]
+        $bens = Bempatrimoniado::bens($filtros, $buscas, $tipos); 
+        $ativos = Bempatrimoniado::ativos($filtros, $buscas, $tipos);
   ```
  
 ## Contribuindo com esse projeto
diff --git a/src/Bempatrimoniado.php b/src/Bempatrimoniado.php
index 7e89ccd972cee7a96c9c73b67df27ea63ae77b02..8892cdf31ccbbdda73d7649ae4c43d4772a6d315 100644
--- a/src/Bempatrimoniado.php
+++ b/src/Bempatrimoniado.php
@@ -36,40 +36,19 @@ class Bempatrimoniado
     }
 
     /**
-     * Retorna todos bens patrimoniados ativos (com opção de filtro)
+     * Retorna todos bens patrimoniados ativos (com opção de filtros e buscas)
      *  
-     * @param array $params (opcional) - campo_tabela => valor
-     * @param string $operador (default = AND) - operador da cláusula WHERE
+     * @param array $filtros (default) - stabem => 'Ativo'
+     * @param array $buscas (opcional) - campo_tabela => valor
+     * @param array $tipos (opcional) - campo_tabela => tipo (ex.: codpes => int)
      * 
      * @return array Retorna todos os campos da tabela BEMPATRIMONIADO
      */
-    public static function ativos($params = null, $operador = 'AND')
+    public static function ativos(array $filtros = [], array $buscas = [], array $tipos = [])
     {
-        if (is_null($params)) {
-            $query = " SELECT * FROM BEMPATRIMONIADO WHERE stabem = 'Ativo'";
-        } else {
-            $query = " SELECT * FROM BEMPATRIMONIADO WHERE stabem = 'Ativo' AND (";
-
-            foreach ($params as $campo => $valor) {
-                if (gettype($valor) == 'integer') {
-                    $query .= " {$campo} = {$valor} ";
-                } else if (gettype($valor) == 'string') {
-                    $valor = Uteis::removeAcentos($valor);
-                    $query .= " {$campo} LIKE '%{$valor}%' COLLATE Latin1_General_CI_AI ";
-                }
-
-                // Enquanto houver item no array, adiciona AND/OR na clásula WHERE
-                if (next($params)) {
-                    $query .= $operador;
-                } else {
-                    $query .= ")";
-                }
-            }
-        }
-
-        $result = DB::fetchAll($query);
-        $result = Uteis::utf8_converter($result);
-        $result = Uteis::trim_recursivo($result);
+        $filtros['stabem'] = 'Ativo';
+        $result = self::bens($filtros, $buscas, $tipos);
+        
         return $result;
     }
 
@@ -81,4 +60,29 @@ class Bempatrimoniado
         } 
         return false;
     }
+
+    /**
+     * Retorna todos bens patrimoniados (com opção de filtros e buscas)
+     *  
+     * @param array $filtros (opcional) - campo_tabela => valor
+     * @param array $buscas (opcional) - campo_tabela => valor
+     * @param array $tipos (opcional) - campo_tabela => tipo (ex.: codpes => int)
+     * 
+     * @return array Retorna todos os campos da tabela BEMPATRIMONIADO
+     */
+    public static function bens(array $filtros = [], array $buscas = [], array $tipos = [])
+    {
+        $query = " SELECT * FROM BEMPATRIMONIADO ";
+        $filtros_buscas = DB::criaFiltroBusca($filtros, $buscas, $tipos);
+        // Atualiza a cláusula WHERE do sql
+        $query .= $filtros_buscas[0];
+        // Define os parâmetros para cláusula WHERE
+        $params = $filtros_buscas[1];
+    
+        $result = DB::fetchAll($query, $params);
+        $result = Uteis::utf8_converter($result);
+        $result = Uteis::trim_recursivo($result);
+        return $result;
+    }
 }
+
diff --git a/src/DB.php b/src/DB.php
index 486f3b110c62041dd9d09bbb9bd794e3d48997e7..73dc73886ffcf8ee23543e24dc8382fcc79b2ee8 100644
--- a/src/DB.php
+++ b/src/DB.php
@@ -83,4 +83,68 @@ class DB
         }
         return self::$logger;
     }
+
+    /**
+     * Retorna array contendo string formatada do WHERE com os filtros/buscas e 
+     * as colunas => valores no formato para 'bind'
+     *  
+     * @param array $filtros (opcional) - campo_tabela => valor
+     * @param array $buscas (opcional) - campo_tabela => valor
+     * @param array $tipos (opcional) - campo_tabela => tipo (ex.: codpes => int)
+     * 
+     * @return array posição [0] => string WHERE, posição [1] = 'colunas' => valores
+     *
+     */
+    public static function criaFiltroBusca(array $filtros, array $buscas, array $tipos)
+    {
+        // Abre o parênteses dos filtros
+        $str_where = "";
+        $params = [];
+        if (!empty($filtros) && (count($filtros) > 0)) {
+            $str_where .= " WHERE (";
+            foreach ($filtros as $coluna => $valor) {
+                if (array_key_exists($coluna, $tipos)) {
+                    $str_where .= " {$coluna} = convert({$tipos[$coluna]}, :{$coluna}) ";
+                    $params[$coluna] = "{$valor}";
+                } else {
+                    $str_where .= " {$coluna} = :{$coluna} ";
+                    $params[$coluna] = "{$valor}";
+                }
+                // Enquanto existir um filtro, adiciona o operador AND
+                if (next($filtros)) {
+                    $str_where .= ' AND ';
+                }
+            }
+        }
+
+        if (!empty($buscas) && (count($buscas) > 0)) {
+            // Caso exista um campo para busca, fecha os parênteses anterior
+            // e adiciona mais um AND (, que conterá os parâmetros de busca (OR)
+            if (!empty($str_where)) {
+                $str_where .= ') AND (';
+            } else {
+                // Caso não tenha nenhum filtro anterior, adiciona o WHERE
+                $str_where .= " WHERE (";
+            }
+            foreach ($buscas as $coluna => $valor) {
+                $str_where .= " {$coluna} LIKE :{$coluna} ";
+                $params[$coluna] = "%{$valor}%";
+
+                // Enquanto existir uma busca, adiciona o operador OR
+                if (next($buscas)) {
+                    $str_where .= ' OR ';
+                } else {
+                    // Fecha o parênteses do OR
+                    $str_where .= ') ';
+                }
+            }
+        } else {
+            // Fecha o parênteses dos filtros, caso tenha sido aberto
+            if (!empty($str_where)) {
+                $str_where .= ')';
+            }
+        }
+
+        return [$str_where, $params];
+    }
 }