@anpdgovbr/shared-types
Version:
Biblioteca central de tipos TypeScript compartilhados para os projetos da ANPD (BETA)
193 lines • 5.72 kB
TypeScript
/**
* Tipos de domínio de Estrutura Organizacional (RH).
*
* Baseado no schema department.json v1.2.0 do app de atualização de perfis.
* Os tipos são independentes de UI e adequados para contratos entre serviços.
*
* @public
*/
import { TipoUnidade as TipoUnidadeEnum } from "../../enums";
import type { MetadataSchema } from "./job-titles.types";
type TipoUnidade = TipoUnidadeEnum;
/**
* Representa uma unidade organizacional na árvore canônica.
*
* Campos:
* - codigo, sigla, nome: identificadores da unidade.
* - tipo, nivel: metadados opcionais sobre a unidade.
* - unidades / filhos: filhos diretos na árvore (compatibilidade com formatos antigos).
*
* @public
*/
export interface UnidadeOrganizacional {
codigo: string;
sigla: string;
nome: string;
tipo?: TipoUnidade;
nivel?: number;
unidades?: UnidadeOrganizacional[];
/** Compatibilidade com estrutura legada. */
filhos?: UnidadeOrganizacional[];
}
/**
* Índices auxiliares sobre os departamentos para busca e validações.
*
* - por_tipo: mapeia tipo de unidade para lista de códigos.
* - por_nivel: mapeia níveis (ex.: "nivel_1") para lista de códigos.
* - por_codigo_siorg: mapeia código SIORG para código interno.
* - listas auxiliares para categorias específicas (administrativas, finalistas, colegiados).
*
* @public
*/
export interface IndicesDepartamentos {
por_tipo: Record<TipoUnidade, string[]>;
/** chaves como "nivel_1", "nivel_2", etc. */
por_nivel: Record<string, string[]>;
por_codigo_siorg: Record<string, string>;
unidades_administrativas: string[];
unidades_finalistas: string[];
orgaos_colegiados: string[];
}
/**
* Regras e restrições usadas para validação de dados de departamentos.
*
* - campos_obrigatorios / campos_opcionais: listas de campos esperados.
* - valores_validos: domínios permitidos para propriedades (tipo, nivel).
* - regras_estruturais: mensagens/descrições de restrições estruturais.
*
* @public
*/
export interface ValidacaoDepartamentos {
campos_obrigatorios: string[];
campos_opcionais: string[];
valores_validos: {
tipo: TipoUnidade[];
nivel: number[];
};
regras_estruturais: Record<string, string>;
}
/**
* Estatísticas pré-calculadas sobre a estrutura organizacional.
*
* Inclui contagens por tipo/nível, profundidade máxima e contadores de categorias específicas.
*
* @public
*/
export interface EstatisticasDepartamentos {
total_unidades: number;
por_tipo: Record<TipoUnidade, number>;
por_nivel: Record<string, number>;
unidades_com_subordinados: number;
unidades_folha: number;
profundidade_maxima: number;
coordenacoes_gerais_ativas: number;
unidades_administrativas: number;
unidades_finalistas: number;
orgaos_colegiados: number;
}
/**
* Representa o documento raiz da estrutura organizacional carregada (schema-compliant).
*
* Contém metadados, enums, a árvore raiz (`organizacao`) e índices/validações/estatísticas.
*
* @public
*/
export interface EstruturaOrganizacional {
title: string;
description: string;
metadata: MetadataSchema;
enums: {
tipos_unidade: TipoUnidade[];
niveis_hierarquicos: number[];
};
organizacao: UnidadeOrganizacional;
indices: IndicesDepartamentos;
validacao: ValidacaoDepartamentos;
estatisticas: EstatisticasDepartamentos;
}
/**
* Representação plana de uma unidade apropriada para formulários e navegação.
*
* - hierarquia_path: array de siglas do nó até a raiz.
* - hierarquia_display: string legível para exibição.
* - pai / filhos: referências a outras unidades no modelo plano.
*
* @public
*/
export interface UnidadeFlat {
codigo: string;
sigla: string;
nome: string;
tipo: TipoUnidade;
nivel: number;
/** Ex.: ["ANPD", "CGTI", "DDSS"] */
hierarquia_path: string[];
/** Ex.: "DDSS/CGTI/ANPD" */
hierarquia_display: string;
pai?: UnidadeFlat;
filhos: UnidadeFlat[];
}
/**
* Opção simplificada usada em selects e listas (label amigável).
*
* @public
*/
export interface UnidadeOption {
codigo: string;
sigla: string;
nome: string;
tipo: TipoUnidade;
nivel: number;
hierarquia_display: string;
/** Nome completo para exibição. */
label: string;
}
/**
* Estrutura que descreve a hierarquia de um departamento em contexto de navegação.
*
* - unidade_atual: nó focal.
* - caminho_completo: sequência do nó até a raiz.
* - subordinadas_diretas / todas_subordinadas: listas de unidades subordinadas.
*
* @public
*/
export interface HierarquiaDepartamento {
unidade_atual: UnidadeFlat;
caminho_completo: UnidadeFlat[];
subordinadas_diretas: UnidadeFlat[];
todas_subordinadas: UnidadeFlat[];
}
/**
* Dados usados em formulários de criação/edição de departamento.
*
* - unidade_pai: sigla da unidade pai (opcional).
*
* @public
*/
export interface DepartmentFormData {
sigla: string;
nome: string;
tipo: TipoUnidade;
codigo_siorg?: string;
/** Sigla da unidade pai. */
unidade_pai?: string;
}
/**
* Representação do caminho de departamento compatível com Active Directory.
*
* - siglas: array de siglas do nó até a raiz.
* - path_string: caminho serializado (ex.: "DDSS/CGTI/ANPD").
* - unidade_principal: sigla do nó mais próximo (ex.: "DDSS").
*
* @public
*/
export interface ADDepartmentPath {
/** Ex.: ["DDSS", "CGTI", "ANPD"] */
siglas: string[];
/** Ex.: "DDSS/CGTI/ANPD" */
path_string: string;
/** Ex.: "DDSS" */
unidade_principal: string;
}
export {};
//# sourceMappingURL=departments.types.d.ts.map