AleloMicro-SiBBR: dicionário de dados

De AleloWiki
Revisão de 22h09min de 26 de novembro de 2020 por WikiSysop (Discussão | contribs) (Taxonomia)

Ir para: navegação, pesquisa

A Plataforma Alelo Recursos Genéticos, da qual faz parte o Sistema AleloMicro, participa de projetos e iniciativas de compartilhamento de dados e informações de recursos genéticos de microrganismos em favor da valorização dos acervos e da atividade de conservação de recursos genéticos com objetivo de promover o desenvolvimento da pesquisa voltada a alimentação e agricultura. A integração das bases de dados do Sistema AleloMicro com o sistema SiBBr foi constituída a partir da ferramenta IPT (Integrated Publishing Toolkit) para estrutruração de conjunto de dados definidos a partir do reconhecimento dos padrões admitidos no desenho de informações do sistema Darwin Core.

Dicionário de mapeamento de atributos entre a base do AleloMicro e formato Darwin Core

A documentação a seguir apresenta o dicionário de conversão de tabela de dados para integração dos sistemas AleloMicro e Darwin Core.

Nome da coleção

AleloMicro Darwin Core saída (ex.)
sgl_subcolecao; '-'; nme_cubcolecao; subcolecao CFI - Fungos de Invertebrados
sgl_escopo; ' '; idt_linhagem; '/'; pfx_subcolecao; ' '; num_subcolecao catalogNumber BRM 000001/CG 3
'BRA/'; sgl_subcolecao; '/'; sgl_escopo; idt_linhagem; '/'; pfx_subcolecao; ' '; num_subcolecao occurredID BRA/CFI/BRM 000001/CG 3
PreservedSpecimen basisofrecord (*)

(*) campo não disponível.

SELECT 
 'Embrapa Recursos Genéticos e Biotecnologia' as instituionCode,
 nme_colecao as collectionCode,
 
 sgl_subcolecao || '-' || nme_subcolecao AS subcolecao,
 
 sgl_escopo || ' ' || LPAD(CAST(idt_linhagem AS VARCHAR), 6, '0') || '/' ||  pfx_subcolecao || ' ' || 
CAST(num_subcolecao AS VARCHAR) AS catalogNumber,
 
 'BRA/' || sgl_subcolecao || '/' || sgl_escopo || ' ' || LPAD(CAST(idt_linhagem AS VARCHAR), 6, '0') || '/' ||  
pfx_subcolecao || ' ' || CAST(num_subcolecao AS VARCHAR) AS occurrenceID,
 
 'PreservedSpecimen' as basisofrecord,

Taxonomia

AleloMicro Darwin Core saída (ex.)
niv.idt_nivel *(class, order, family, genus, species, subspecies) taxonRank
(...)   
 case when niv.idt_nivel = 3 then 'class' else 
   case when niv.idt_nivel = 4 then 'order' else
     case when niv.idt_nivel = 5 then 'family' else
       case when niv.idt_nivel = 6 then 'genus' else
         case when niv.idt_nivel = 7 then 'species' else
           case when niv.idt_nivel = 8 then 'subspecies' else  end
         end
       end
     end
   end 
 end as taxonRank,
 --"reino": niv.idt_nivel>0; taxtata8.nme_taxonomia; ','> "kingdom"  
 case when niv.idt_nivel>0 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 1)  
 else  end as kingdom,
--"filo": niv.idt_nivel>1; taxTata7.nme_taxonomia; ',' > "phylum"
 case when niv.idt_nivel>1 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 2)  
 else  end as phylum,
--"classe" niv.idt_nivel>2; taxTata6.nme_taxonomia; ',' > "class"  
 case when niv.idt_nivel>2 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 3)  
 else  end as class,
--"ordem": niv.idt_nivel>3, taxTata.nme_taxonomia; ','; > "order" 
 case when niv.idt_nivel>3 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 4)  
else  end as order,
--"família": niv.idt_nivel>4; taxBisa.nme_taxonomia; ','; => "family"
 case when niv.idt_nivel>4 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 5)  
else  end as family,
--"gênero": niv.idt_nivel>5, taxAvo.nme_taxonomia; ','; => "genus"
 case when niv.idt_nivel>5 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 6)  
else  end as genus,
--"espécie": niv.idt_nivel>6; taxPai.nme_taxonomia; ','; => "specificEpithet"
 case when 
  (case when niv.idt_nivel>6 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 7)  
  else  end) = 'sp.' then  else 
  (case when niv.idt_nivel>6 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 7)  
  else  end)
end as specificEpithet,
--"subespécie": niv.idt_nivel>7; tax.nme_taxonomia; ','; => "infraspecificEpithet"
 case when niv.idt_nivel>7 then
  split_part(
  (case when taxTata8.nme_taxonomia is null then  else (taxTata8.nme_taxonomia || ',') end || 
  case when taxTata7.nme_taxonomia is null then  else (taxTata7.nme_taxonomia || ',') end || 
  case when taxTata6.nme_taxonomia is null then  else (taxTata6.nme_taxonomia || ',') end || 
  case when taxTata.nme_taxonomia is null then  else (taxTata.nme_taxonomia || ',') end || 
  case when taxBisa.nme_taxonomia is null then  else (taxBisa.nme_taxonomia || ',') end || 
  case when taxAvo.nme_taxonomia is null then  else (taxAvo.nme_taxonomia || ',') end || 
  case when taxPai.nme_taxonomia is null then  else (taxPai.nme_taxonomia || ',') end || 
  case when tax.nme_taxonomia is null then  else tax.nme_taxonomia end),
  ',', 8)  
else  end as infraspecificEpithet,

hosp_familia

hosp_genero

hosp_especie

hosp_subcategoria

replace(
   (CASE WHEN (taxH.nme_taxonomia ILIKE '%Não%') THEN  ELSE
   CASE WHEN nivAvoH.nme_nivel='Gênero' THEN taxAvoH.nme_taxonomia ELSE CASE WHEN nivPaiH.nme_nivel='Gênero' THEN 
taxPaiH.nme_taxonomia ELSE  END END 
 END ||
 CASE WHEN (taxH.nme_taxonomia ILIKE '%Não%') THEN  ELSE
   CASE WHEN nivPaiH.nme_nivel='Espécie' THEN (' ' || taxPaiH.nme_taxonomia) ELSE CASE WHEN 
nivH.nme_nivel='Espécie' THEN (' ' || taxH.nme_taxonomia) ELSE  END END
 END ||
 CASE WHEN (taxH.nme_taxonomia ILIKE '%Não%') THEN  ELSE
   CASE WHEN nivH.nme_nivel='Subcategoria' THEN (' ' || taxH.nme_taxonomia) ELSE  END
 end), ' sp.', )  AS hospedeiro,

codigos_outras_instituicoes

nome_pais

nome_estado

nome_municipio

(SELECT STRING_AGG('(' || num_codigo || ') ' || insCod.nme_instituicao, '; ')
     FROM mic.tbl_codigos AS cod JOIN sis.tbl_instituicoes AS insCod ON insCod.idt_instituicao=cod.cod_instituicao
     WHERE cod_linhagem=idt_linhagem)
    AS CODIGOS_OUTRAS_INSTITUICOES,
 CASE WHEN (nme_pais ILIKE '%Não%') THEN  ELSE nme_pais END AS nome_pais,
 CASE WHEN (nme_estado ILIKE '%Não%') THEN  ELSE nme_estado END AS nome_estado,
 CASE WHEN (sts_municipio_publico AND nme_municipio ILIKE '%Não%') THEN  ELSE nme_municipio END AS 
nome_municipio,

altitude

latitude

longitude

substrato

 CASE WHEN sts_geo_publico THEN num_altitude ELSE NULL END AS altitude,
 CASE WHEN sts_geo_publico THEN num_latitude ELSE NULL END AS latitude ,
 CASE WHEN sts_geo_publico THEN num_longitude ELSE NULL END AS longitude,
 subs.nme_descritor as substrato,

bioma_brasileiro

 (SELECT STRING_AGG(nme_descritor, '; ') FROM mic.tba_linhagens_descritores AS lc
 JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
 JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
 WHERE nme_grupo_descritor='Bioma Brasileiro' AND left(gd.txt_filtro,1)='d' AND cod_linhagem=lin.idt_linhagem) AS 
Bioma_BR_habitat,

categoria_linhagem

metodo_identificacao

left(case when 
   (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
    JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
    JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
    WHERE nme_grupo_descritor='Método de Identificação' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) is null
 then  else

    (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
    JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
    JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
    WHERE nme_grupo_descritor='Método de Identificação' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) || ' | '
 end    
 ||

metodo_isolamento

 case when 
   (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Método de Isolamento' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) is null 
 then  else
   (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Método de Isolamento' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) || ' | '
 end  
 ||

meio_cultura_isolamento

 case when
   (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Meio de Cultura de Isolamento' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) is null 
 then  else 
   (SELECT STRING_AGG(nme_descritor, ' | ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Meio de Cultura de Isolamento' AND left(gd.txt_filtro,1)='d' AND 
cod_linhagem=lin.idt_linhagem) || ' | '
 end, -3)  
 AS sampling_protocol,

coletores

 (SELECT STRING_AGG(nme_grupo_descritor || ': ' || nme_usuario, '; ')
 FROM mic.tba_linhagens_descritores AS lc
 JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
 JOIN usr.tbl_usuarios AS us ON lc.cod_usuario=us.idt_usuario
 WHERE left(gd.txt_filtro,1)='p' AND cod_linhagem=lin.idt_linhagem) AS pessoas,
 (SELECT STRING_AGG(nme_usuario, ' | ')
 FROM mic.tba_linhagens_descritores AS lc
 JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
 JOIN usr.tbl_usuarios AS us ON lc.cod_usuario=us.idt_usuario
 WHERE nme_grupo_descritor='Coletor' AND left(gd.txt_filtro,1)='p' AND cod_linhagem=lin.idt_linhagem) AS coletores_recordby,

identificadores

(SELECT STRING_AGG(nme_usuario, ' | ')
 FROM mic.tba_linhagens_descritores AS lc
 JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
 JOIN usr.tbl_usuarios AS us ON lc.cod_usuario=us.idt_usuario
 WHERE nme_grupo_descritor='Identificador' AND left(gd.txt_filtro,1)='p' AND cod_linhagem=lin.idt_linhagem) AS 
identificadores_identifiedby,

isoladores

left(
 case when 
   (SELECT STRING_AGG(nme_descritor, '; ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Categoria da Linhagem' AND left(gd.txt_filtro,1)='d' AND cod_linhagem=lin.idt_linhagem) is null 
 then  else
   'Categoria da Linhagem: ' || (SELECT STRING_AGG(nme_descritor, '; ') FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN mic.tbr_descritores AS dc ON dc.idt_descritor=lc.cod_descritor
   WHERE nme_grupo_descritor='Categoria da Linhagem' AND left(gd.txt_filtro,1)='d' AND cod_linhagem=lin.idt_linhagem) || ' | '
 end 
 ||
 case when 
   (SELECT STRING_AGG(nme_usuario, '; ')
   FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN usr.tbl_usuarios AS us ON lc.cod_usuario=us.idt_usuario
   WHERE nme_grupo_descritor='Isolador' AND left(gd.txt_filtro,1)='p' AND cod_linhagem=lin.idt_linhagem) is null 
 then  else
   'Isolador: ' || (SELECT STRING_AGG(nme_usuario, '; ')
   FROM mic.tba_linhagens_descritores AS lc
   JOIN mic.tbr_grupos_descritores AS gd ON gd.idt_grupo_descritor=lc.cod_grupo_descritor
   JOIN usr.tbl_usuarios AS us ON lc.cod_usuario=us.idt_usuario
   WHERE nme_grupo_descritor='Isolador' AND left(gd.txt_filtro,1)='p' AND cod_linhagem=lin.idt_linhagem) || ' | '
 end, -3)  
 AS identificationremarks,

datas?

dta_coleta as eventdate,
 dta_primeiro_lote as dateidentified
 FROM mic.tbr_escopos JOIN mic.tbl_subcolecoes AS sub ON idt_escopo=cod_escopo
 JOIN sis.tbl_instituicoes as insSub ON insSub.idt_instituicao=sub.cod_instituicao
 JOIN mic.tbl_colecoes ON idt_colecao=cod_colecao JOIN mic.tbl_linhagens AS lin ON 
idt_subcolecao=lin.cod_subcolecao
 JOIN mic.tbl_acessos AS ac ON idt_linhagem=cod_linhagem
 
 LEFT JOIN tax.tbl_taxonomias AS tax ON tax.idt_taxonomia = lin.cod_taxonomia
 LEFT JOIN tax.tbl_taxonomias AS taxPai ON taxPai.idt_taxonomia = tax.cod_pai
 LEFT JOIN tax.tbl_taxonomias AS taxAvo ON taxAvo.idt_taxonomia = taxPai.cod_pai
 LEFT JOIN tax.tbl_taxonomias AS taxBisa ON taxBisa.idt_taxonomia = taxAvo.cod_pai
 LEFT JOIN tax.tbl_taxonomias AS taxTata ON case when taxBisa.cod_pai is null then false else 
taxTata.idt_taxonomia = taxBisa.cod_pai end
 LEFT JOIN tax.tbl_taxonomias AS taxTata6 ON case when taxTata.cod_pai is null then false else 
taxTata6.idt_taxonomia = taxTata.cod_pai end
 LEFT JOIN tax.tbl_taxonomias AS taxTata7 ON case when taxTata.cod_pai is null then false else 
taxTata7.idt_taxonomia = taxTata6.cod_pai end
 LEFT JOIN tax.tbl_taxonomias AS taxTata8 ON case when taxTata.cod_pai is null then false else 
taxTata8.idt_taxonomia = taxTata7.cod_pai end
 
 LEFT JOIN tax.tbr_niveis AS niv ON niv.idt_nivel=tax.cod_nivel
 LEFT JOIN tax.tbl_taxonomias AS taxH ON taxH.idt_taxonomia = lin.cod_hospedeiro
 LEFT JOIN tax.tbl_taxonomias AS taxPaiH ON taxPaiH.idt_taxonomia = taxH.cod_pai
 LEFT JOIN tax.tbl_taxonomias AS taxAvoH ON taxAvoH.idt_taxonomia = taxPaiH.cod_pai
 LEFT JOIN tax.tbl_taxonomias AS taxBisaH ON taxBisaH.idt_taxonomia = taxAvoH.cod_pai
 
 LEFT JOIN tax.tbr_niveis AS nivH ON nivH.idt_nivel=taxH.cod_nivel
 LEFT JOIN tax.tbr_niveis AS nivPaiH ON nivPaiH.idt_nivel=taxPaiH.cod_nivel
 LEFT JOIN tax.tbr_niveis AS nivAvoH ON nivAvoH.idt_nivel=taxAvoH.cod_nivel
 LEFT JOIN tax.tbr_niveis AS nivBisaH ON nivBisaH.idt_nivel=taxBisaH.cod_nivel
 LEFT JOIN sis.tbl_municipios mun ON mun.idt_municipio = lin.cod_municipio
 LEFT JOIN sis.tbl_estados est ON est.idt_estado = mun.cod_estado
 LEFT JOIN sis.tbr_paises pais ON pais.idt_pais = est.cod_pais
 LEFT join mic.tbr_descritores AS subs on lin.cod_substrato = subs.idt_descritor AND subs.cod_grupo_descritor = 4
 
 WHERE idt_colecao=3 AND pais.idt_pais=28 AND ac.sts_publico and sub.sts_publica and
  tax.cod_nivel>3 AND (NOT tax.nme_taxonomia ILIKE '%Não%');

finaliza aqui

Referências