File size: 3,244 Bytes
cc0607e
a6beb3a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# utils/report/icf_categories.py
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}