CIF-LINK / utils /icf_categories.py
Nielo47's picture
update
47d267e
from enum import Enum
from typing import List, Dict
class ICFComponent(Enum):
"""
Representa os componentes da Classifica莽茫o Internacional de Funcionalidade (CIF)
com seus respectivos c贸digos, r贸tulos e cores.
"""
# Membros da enumera莽茫o: NOME_PYTHON = (c贸digo_curto, r贸tulo_completo, cor_hex)
BODY_FUNCTIONS = ('b', 'Fun莽玫es Corporais (b)', '#3E7CB1')
ACTIVITIES_PARTICIPATION = ('d', 'Atividades e Participa莽茫o (d)', '#D41A80')
ENVIRONMENT = ('e', 'Ambiente (e)', '#1AD41A')
BODY_STRUCTURES = ('s', 'Estruturas Corporais (s)', '#FFBF00')
NOT_COVERED = ('nc', 'N茫o Coberto (n.c.)', '#B33F31')
NOT_DEFINED = ('nd', 'N茫o Definido (n.d.)', '#E88C80')
def __init__(self, short_code: str, label: str, color: str):
self._short_code = short_code
self._label = label
self._color = color
@property
def short_code(self) -> str:
"""C贸digo curto do componente CIF (ex: 'b', 'd', 'nc')."""
return self._short_code
@property
def label(self) -> str:
"""R贸tulo completo e descritivo do componente CIF."""
return self._label
@property
def color(self) -> str:
"""Cor hexadecimal associada ao componente para gr谩ficos."""
return self._color
@classmethod
def from_short_code(cls, code: str) -> 'ICFComponent':
"""
Retorna o membro ICFComponent correspondente ao c贸digo curto fornecido.
Levanta um ValueError se o c贸digo n茫o for encontrado.
"""
for member in cls:
if member.short_code == code.lower(): # Compara莽茫o case-insensitive para c贸digos
return member
raise ValueError(f"Nenhum componente CIF encontrado para o c贸digo curto: '{code}'")
@classmethod
def from_label(cls, label_to_find: str) -> 'ICFComponent':
"""
Retorna o membro ICFComponent correspondente ao r贸tulo completo fornecido.
Levanta um ValueError se o r贸tulo n茫o for encontrado.
"""
for member in cls:
if member.label == label_to_find:
return member
raise ValueError(f"Nenhum componente CIF encontrado para o r贸tulo: '{label_to_find}'")
# M茅todos para gerar as estruturas de dados originais (se necess谩rio para compatibilidade)
@classmethod
def get_ordered_labels(cls) -> List[str]:
"""Retorna uma lista ordenada dos r贸tulos dos componentes CIF."""
return [member.label for member in cls]
@classmethod
def get_color_map(cls) -> Dict[str, str]:
"""Retorna um dicion谩rio mapeando r贸tulos de componentes CIF para suas cores."""
return {member.label: member.color for member in cls}
@classmethod
def get_short_code_to_label_map(cls) -> Dict[str, str]:
"""Retorna um dicion谩rio mapeando c贸digos curtos para r贸tulos completos."""
return {member.short_code: member.label for member in cls}
@classmethod
def get_short_code_to_component_map(cls) -> Dict[str, 'ICFComponent']:
"""Retorna um dicion谩rio mapeando c贸digos curtos para os membros ICFComponent."""
return {member.short_code: member for member in cls}