from datetime import date from typing import Any import nh3 from django.db.models import Q from django.utils import timezone from rest_framework import serializers from rest_framework.validators import UniqueTogetherValidator from . import catalogo from .empresas_questor import normalizar_codigo_empresa, resolve_nome_empresa from .indicadores import calculo as indicadores_calculo from .nao_conformidades import classificacao as nc_classificacao from .models import ( validar_tamanho_arquivo_contabil, validar_tamanho_arquivo_indicador, CONCILIACAO_ARQUIVO_MAX_BYTES, AcessoGeral, AcessoGeralSecao, AjudaAplicacao, CategoriaEvento, CompromissoAgenda, ConciliacaoFornecedor, ContabilAchado, ContabilAchadoDePaula, ContabilApuracao, ContabilApuracaoDePaula, ContabilApuracaoReprocessamento, ContabilApuracaoReprocessamentoDePaula, ContabilConta, ContabilContaDePaula, ContabilLinhaAnaliseVertical, ContabilLinhaAnaliseVerticalDePaula, ContabilLinhaDre, ContabilLinhaDreDePaula, ContabilObservacao, ContabilObservacaoDePaula, ContabilObservacaoEdicao, ContabilObservacaoEdicaoDePaula, Departamento, EmpresaQuestor, Favorito, FuncaoTelefonia, ImportacaoPlanoSaude, ImportacaoPlanoSaudeAlteracao, ImportacaoPlanoSaudeAuditoria, ImportacaoPlanoSaudeLinha, ImportacaoPlanoSaudeDePaula, ImportacaoPlanoSaudeDePaulaAlteracao, ImportacaoPlanoSaudeDePaulaAuditoria, ImportacaoPlanoSaudeDePaulaLinha, IndicadorApuracao, IndicadorApuracaoColaborador, IndicadorApuracaoEmpresa, IndicadorApuracaoResposta, IndicadorContabilComponente, IndicadorContabilDefinicao, IndicadorCriterio, IndicadorDepartamento, IndicadorDepartamentoGerente, IndicadorPercentualTipo, LinkFerramenta, LinkFerramentaFavorito, NaoConformidadeImportacao, NCAcao, NCAcompanhamento, NCOcorrencia, NotificacaoDispensada, ParametroFiscalCustoContratacao, PerfilAcesso, Ramal, RamalAusencia, RegraCusteioPlanoSaude, RegraCusteioPlanoSaudeDePaula, TelefoneExterno, Usuario, WidgetUsuario, ) from .custo_contratacao.calculo import EntradaSimulacaoEmpregado from .dashboard_contabil import formula as dashboard_contabil_formula from .planos_saude.leiaute_sistema import formata_valor_br, parse_valor_br from .planos_saude.pipeline import CUSTEIOS_VALIDOS, OPERADORAS, TIPOS_LANCAMENTO_VALIDOS, TIPOS_PESSOA_VALIDOS from .planos_saude.regras_empresa import REGRAS_EMPRESA # Allowlist compartilhada por todo campo de texto rico com imagens embutidas # (Observações de Acesso Geral, ver "Acessos Gerais" no CLAUDE.md; texto de # "Mais informações" de uma aplicação, ver "Ajuda de aplicação") — o conteúdo # vem de um
no cliente e é renderizado via innerHTML pra # qualquer usuário com acesso de visualização, então passa por um allowlist # estrito (nh3 — binding Python da lib Rust "ammonia"; usado no lugar do # bleach, que está sem manutenção desde 2023 e parou de receber releases, # inclusive de segurança) antes de salvar: só marcação de texto básica + # , nada de