alteracao_tipo_alimentacao
admin
- class AlteracaoCardapioModelAdmin(model, admin_site)[source]
Bases:
ModelAdminAdmin do Django para solicitações de alteração do tipo de alimentação.
Configura a listagem administrativa de
AlteracaoCardapio, exibindo informações da escola e do período da solicitação, habilitando busca textual, filtros por motivo e rastros administrativos e mantendo o campoescolaapenas para leitura.- list_display
Colunas exibidas na listagem do admin. Valores:
("escola__codigo_eol", "escola__nome", "data_inicial", "data_final", "status", "DESCRICAO").- Type:
tuple[str, …]
- search_fields
Campos consultados pela busca textual do admin. Valores:
("uuid", "escola__nome", "escola__codigo_eol").- Type:
tuple[str, …]
- search_help_text
Texto auxiliar exibido abaixo do campo de busca. Valores:
"Pesquisar por: UUID, nome da escola, codigo eol da escola".- Type:
str
- list_filter
Filtros laterais disponíveis na listagem. Valores:
("motivo__nome", "status", "rastro_lote", "rastro_terceirizada").- Type:
tuple[str, …]
- readonly_fields
Campos somente leitura no formulário. Valores:
("escola",).- Type:
tuple[str, …]
behaviors
- class EhAlteracaoCardapio(*args, **kwargs)[source]
Bases:
ModelClasse abstrata com campos e consultas comuns das solicitações de alteração de cardápio.
Centraliza os relacionamentos compartilhados entre os modelos de alteração de cardápio e expõe managers especializados para consultas por período, além de um método utilitário para recuperar rascunhos de um usuário.
- objects
Manager padrão do Django.
- Type:
django.db.models.Manager
- desta_semana
Manager para solicitações cuja data esteja na semana atual.
- deste_mes
Manager para solicitações cuja data esteja no mês atual.
- vencidos
Manager para solicitações com período já encerrado.
- do_mes_corrente
Manager para solicitações do mês corrente, conforme regra de negócio do módulo.
- escola: escola.Escola | None
Origem:
EhAlteracaoCardapioDescrição: Escola que efetuou a solicitação de alteração do tipo de alimentação. O campo ainda permite null e blank
- escola_id: int | None
Origem:
EhAlteracaoCardapioDescrição: Identificador da escola que efetuou a solicitação de alteração do tipo de alimentação.
Corresponde à chave primária de
escola.Escola. Pode serNone(campo permitenulleblank).
- motivo: cardapio.MotivoAlteracaoCardapio | None
Origem:
EhAlteracaoCardapioDescrição: Motivo associado à solicitação de alteração do tipo de alimentação. O campo ainda permite null e blank
- motivo_id: int | None
Origem:
EhAlteracaoCardapioDescrição: Identificador do motivo associado à solicitação de alteração do tipo de alimentação.
- Motivos disponíveis:
Lanche Emergencial
LPR (Lanche por Refeição)
RPL (Refeição por Lanche)
Corresponde à chave primária de
MotivoAlteracaoCardapio. Pode serNone(campo permitenulleblank).
models
- class AlteracaoCardapio(*args, **kwargs)[source]
Bases:
ExportModelOperationsMixin('alteracao_cardapio'),CriadoEm,CriadoPor,TemChaveExterna,IntervaloDeDia,TemObservacao,FluxoAprovacaoPartindoDaEscola,TemIdentificadorExternoAmigavel,Logs,TemPrioridade,SolicitacaoForaDoPrazo,EhAlteracaoCardapio,TemTerceirizadaConferiuGestaoAlimentacaoModelo responsável por armazenar Solicitações de Alteração do Tipo de Alimentação genéricas.
Representa uma solicitação formal de troca do tipo de alimentação servida em determinado(s) período(s) escolar(es), com data inicial e final delimitadas.
O que é uma Alteração do Tipo de Alimentação?
É uma solicitação de troca do tipo de alimentação servida em um determinado dia.
Quais os tipos de Alteração do Tipo de Alimentação possíveis?
- RPL (Refeição por Lanche)
substitui a refeição do dia por um lanche
cada escola só pode pedir uma RPL por mês
exemplo: no dia dos aniversariantes do mês, a escola pode solicitar uma RPL para substituir a refeição por um lanche especial.
na Medição Inicial, o lançamento de lanche neste dia é dobrado e a refeição é zerada.
- LPR (Lanche por Refeição)
substitui o lanche do dia por uma refeição
não há limite de solicitações de LPR por mês
na Medição Inicial, o lançamento de lanche neste dia é zerado e a refeição é dobrada.
esta solicitação raramente é utilizada, pois as escolas preferem lanche que refeição.
- Lanche Emergencial
substitui todas as alimentações do dia por lanche emergencial (no passado, era chamado de Merenda Seca)
única solicitação que pode ser feita sem o mínimo de 2 dias úteis de antecedência
normalmente requerida quando acontece algum imprevisto que inviabiliza a preparação da refeição, como falta de energia ou água, ou atraso na entrega dos alimentos.
- Tipos de unidade contempladas:
EMEF
EMEI
CIEJA
EMEBS
- Exceções não contempladas:
CEI
CEMEI
- DESCRICAO
Descrição legível do tipo de solicitação. Utilizado no dashboard de Gestão de Alimentação para identificar o tipo de cada solicitação. O valor é a string
"Alteração do Tipo de Alimentação".- Type:
str
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.pyDescrição: Timestamp preenchido automaticamente na criação do registro.
- criado_por: perfil.Usuario | None
Origem:
dados_comuns/behaviors.pyDescrição: Usuario responsavel pela criacao do registro. O campo ainda permite null e blank
(perfil.Usuario | None): Usuario responsavel pela criacao doregistro. O campo ainda permite null e blank
- criado_por_id: int | None
Origem:
dados_comuns/behaviors.pyDescrição: Identificador do usuário responsável pela criação do registro.
Corresponde à chave primária de
perfil.Usuario. Pode serNone(campo permitenulleblank).
- data_inicial: datetime.date
Origem:
dados_comuns/behaviors.pyDescrição: Data inicial do período de validade da solicitação de alteração do tipo de alimentação.
Caso data_inicial é igual a data_final, a solicitação de alteração do tipo de alimentação é válida apenas para um dia específico. Caso data_inicial seja anterior a data_final, a solicitação de alteração do tipo de alimentação é válida para um período de dias.
- data_final: datetime.date
Origem:
dados_comuns/behaviors.pyDescrição: Data final do período de validade da solicitação de alteração do tipo de alimentação.
Caso data_inicial é igual a data_final, a solicitação de alteração do tipo de alimentação é válida apenas para um dia específico. Caso data_inicial seja anterior a data_final, a solicitação de alteração do tipo de alimentação é válida para um período de dias.
- datas_intervalo: django.db.models.QuerySet[DataIntervaloAlteracaoCardapio]
Relação reversa 1:N com
DataIntervaloAlteracaoCardapio.Representa todas as datas associadas à alteração de cardápio, individualmente.
Essa relação é especialmente útil para casos em que a alteração de cardápio abrange um intervalo de dias, permitindo acessar cada dia específico dentro desse intervalo.
Modelo criado, especificamente, para por cancelar dias individualmente de uma solicitação de alteração do tipo de alimentação que abrange um intervalo de dias.
- escola: escola.Escola | None
Origem:
EhAlteracaoCardapioDescrição: Escola que efetuou a solicitação de alteração do tipo de alimentação. O campo ainda permite null e blank
- escola_id: int | None
Origem:
EhAlteracaoCardapioDescrição: Identificador da escola que efetuou a solicitação de alteração do tipo de alimentação.
Corresponde à chave primária de
escola.Escola. Pode serNone(campo permitenulleblank).
- foi_solicitado_fora_do_prazo: bool
Origem:
dados_comuns/behaviors.pyDescrição: Indica se a solicitação foi criada fora do prazo regular de antecedência.
Quando
True, significa que o pedido foi criado com 5 dias úteis ou menos de antecedência.
- id: int
Origem:
django.db.models.ModelDescrição: Identificador interno do registro no banco de dados.
Corresponde à chave primária gerada automaticamente pelo Django.
- motivo: cardapio.MotivoAlteracaoCardapio | None
Origem:
EhAlteracaoCardapioDescrição: Motivo associado à solicitação de alteração do tipo de alimentação. O campo ainda permite null e blank
- motivo_id: int | None
Origem:
EhAlteracaoCardapioDescrição: Identificador do motivo associado à solicitação de alteração do tipo de alimentação.
Corresponde à chave primária de
MotivoAlteracaoCardapio. Pode serNone(campo permitenulleblank).
- observacao: str
Origem:
dados_comuns/behaviors.pyDescrição: Campo de texto livre para registrar observações complementares da solicitação.
Pode ser uma string vazia, pois o campo permite
blank.
- substituicoes_periodo_escolar: django.db.models.QuerySet[SubstituicaoAlimentacaoNoPeriodoEscolar]
Relação reversa 1:N com
SubstituicaoAlimentacaoNoPeriodoEscolar.Representa todas as substituições de tipo de alimentação vinculadas à solicitação, organizadas por período escolar.
Cada registro associado define o período escolar, os tipos de alimentação substituídos, os tipos resultantes e a quantidade de alunos impactados.
- rastro_dre: escola.DiretoriaRegional | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Diretoria Regional de Educação vinculada ao rastro histórico da solicitação.
Representa a DRE da escola no momento em que o rastro do pedido foi salvo.
- rastro_dre_id: int | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Identificador da DRE vinculada ao rastro histórico da solicitação.
Corresponde à chave primária de
escola.DiretoriaRegional. Pode serNone(campo permitenulleblank).
- rastro_escola: escola.Escola | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Escola registrada no rastro histórico da solicitação.
Representa a escola vinculada ao pedido no momento em que o rastro foi salvo.
- rastro_escola_id: int | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Identificador da escola registrada no rastro histórico da solicitação.
Corresponde à chave primária de
escola.Escola. Pode serNone(campo permitenulleblank).
- rastro_lote: escola.Lote | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Lote registrado no rastro histórico da solicitação.
Representa o lote da escola no momento em que o rastro foi salvo.
- rastro_lote_id: int | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Identificador do lote registrado no rastro histórico da solicitação.
Corresponde à chave primária de
escola.Lote. Pode serNone(campo permitenulleblank).
- rastro_terceirizada: terceirizada.Terceirizada | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Terceirizada registrada no rastro histórico da solicitação.
Representa a empresa terceirizada vinculada ao lote da escola no momento em que o rastro foi salvo.
- rastro_terceirizada_id: int | None
Origem:
FluxoAprovacaoPartindoDaEscolaDescrição: Identificador da terceirizada registrada no rastro histórico da solicitação.
Corresponde à chave primária de
terceirizada.Terceirizada. Pode serNone(campo permitenulleblank).
- status: str
Origem:
django_xworkflows.models.StateFieldDescrição: Estado atual da solicitação dentro do workflow de aprovação partindo da escola.
Armazena um dos valores definidos em
PedidoAPartirDaEscolaWorkflow, comoRASCUNHO,DRE_A_VALIDARouCODAE_AUTORIZADO.
- terceirizada_conferiu_gestao: bool
Origem:
dados_comuns/behaviors.pyDescrição: Indica se a terceirizada marcou ciência da solicitação na Gestão de Alimentação.
Quando
True, registra que a empresa conferiu o pedido sem necessariamente alterar o status do workflow.
- get_status_display()
Origem:
django_xworkflows.models.StateFieldDescrição: Relacionado ao campo
statusdo workflow.Retorna a representação legível (label) do status atual da instância.
O valor retornado corresponde ao texto definido em
statesdo workflow, sendo mais apropriado para exibição em interfaces (ex: telas e relatórios).- Returns:
Texto legível do status
- Return type:
str
Exemplo:
CODAE_AUTORIZADOretorna"CODAE autorizou pedido".
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.pyDescrição: Identificador único do registro.
Gerado automaticamente no momento da criação, sendo utilizado como identificador externo amigável.
Pode ser utilizado em integrações externas e URLs públicas, evitando a exposição do identificador interno (ID).
- DESCRICAO = 'Alteração do Tipo de Alimentação'
- codae_autoriza
Autoriza a solicitação de Gestão de Alimentação como CODAE pedida com mais de 5 dias úteis de antecedência. Só é possível autorizar uma solicitação que foi validada pela Diretoria Regional.
- Exceção:
Alteração do Tipo de Alimentação - Lanche Emergencial
Este método é herdado de django_xworkflows.
- Possui um hook (
_codae_autoriza_hook) para, após a autorização: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.enviar e-mail para as partes interessadas notificando sobre a autorização.
- codae_autoriza_questionamento
CODAE autoriza a solicitação de Gestão de Alimentação pedida com menos de 5 dias úteis de antecedência, mediante resposta positiva do questionamento para a empresa terceirizada que atende a escola. Só é possível autorizar uma solicitação que foi validada pela Diretoria Regional.
- Uma solicitação pode ser autorizada se:
teve uma resposta positiva do questionamento pela empresa terceirizada que atende a escola, ou seja, resposta_sim_nao=True no log de questionamento.
Este método é herdado de django_xworkflows.
- Possui um hook (
_codae_autoriza_hook) para, após a autorização: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.enviar e-mail para as partes interessadas notificando sobre a autorização.
- codae_nega
CODAE nega a solicitação de Gestão de Alimentação. Só é possível negar uma solicitação que foi validada pela Diretoria Regional.
- Uma solicitação pode ser negada se, por exemplo:
infringir alguma regra do edital
tiver algum dado incorreto ou inconsistente (por exemplo, um Kit Lanche não pode ser solicitado para um “passeio” nas dependências da escola. É apenas para passeios externos.)
Este método é herdado de django_xworkflows.
- Possui um hook (
_codae_recusou_hook) para, após a negação: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.enviar e-mail para as partes interessadas notificando sobre a negação.
- codae_nega_questionamento
CODAE nega a solicitação de Gestão de Alimentação pedida com menos de 5 dias úteis de antecedência. Só é possível negar uma solicitação que foi validada pela Diretoria Regional.
- Uma solicitação pode ser negada se:
não tiver uma resposta positiva do questionamento pela empresa terceirizada que atende a escola, ou seja, resposta_sim_nao=False no log de questionamento.
Este método é herdado de django_xworkflows.
- Possui um hook (
_codae_recusou_hook) para, após a negação: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.enviar e-mail para as partes interessadas notificando sobre a negação.
- codae_questiona
CODAE questiona a empresa terceirizada se é possível atender a solicitação de Gestão de Alimentação pedida com menos de 5 dias úteis de antecedência. Só é possível questionar uma solicitação que foi validada pela Diretoria Regional.
Uma solicitação pedida com menos de 5 dias úteis de antecedência não pode ser autorizada imediatamente, pois a empresa terceirizada que atende a escola precisa confirmar se é possível atender a solicitação nesse prazo. Portanto, o CODAE questiona a solicitação para obter essa confirmação.
- Exceção (pode ser autorizado imediatamente, sem questionamento):
Alteração do Tipo de Alimentação - Lanche Emergencial
Este método é herdado de django_xworkflows.
- Possui um hook (
_codae_questiona_hook) para, após o questionamento: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.
- property data
Retorna a data mais antiga do intervalo (inicial ou final).
- Returns:
Data de início da alteração, ou a data final caso seja anterior.
- Return type:
datetime.date
- property datas
Retorna todas as datas do intervalo formatadas e concatenadas em uma string.
- Returns:
Datas no formato
"DD/MM/YYYY"separadas por vírgula e espaço, por exemplo"01/03/2026, 02/03/2026".- Return type:
str
- dre_nao_valida
DRE não valida a solicitação de Gestão de Alimentação.
Este método é herdado de django_xworkflows.
- Possui um hook (
_dre_nao_valida_hook) para, após a não validação: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.enviar e-mail para as partes interessadas notificando sobre a não validação.
- Possui um hook (
- dre_pede_revisao
Deprecado.
Este método é herdado de django_xworkflows.
- dre_valida
DRE valida a solicitação de Gestão de Alimentação.
Este método é herdado de django_xworkflows.
- Possui um hook (
_dre_valida_hook) para, após a validação: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.
- Possui um hook (
- escola_revisa
Deprecado.
Este método é herdado de django_xworkflows.
- property existe_dia_cancelado
Verifica se ao menos uma data do intervalo foi cancelada individualmente.
- Returns:
Truese existir algumaDataIntervaloAlteracaoCardapiocomcancelado=True,Falsecaso contrário.- Return type:
bool
- property inclusoes
Retorna um atalho para
datas_intervalo.- Returns:
Manager reverso das datas do intervalo vinculadas.
- Return type:
django.db.models.Manager
- inicia_fluxo
Inicia o fluxo da solicitação de Gestão de Alimentação (envia a solicitação para DRE validar).
Só é possível iniciar uma solicitação que esteja em RASCUNHO.
Este método é herdado de django_xworkflows.
- Possui um hook (
_inicia_fluxo_hook) para, após o início do fluxo: definir o campo
foi_solicitado_fora_do_prazocom base na prioridade da solicitação.salvar os rastros históricos da solicitação (escola, DRE, lote e terceirizada).
criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.
- Possui um hook (
- property numero_alunos
Retorna o total de alunos somando todas as substituições vinculadas.
- Returns:
Soma da quantidade de alunos em todas as
SubstituicaoAlimentacaoNoPeriodoEscolardesta alteração, ouNonese não houver substituições.- Return type:
int | None
- property path
Retorna o caminho relativo do relatório desta solicitação no frontend.
- Returns:
URL relativa no formato
"alteracao-do-tipo-de-alimentacao/relatorio?uuid=<uuid>&tipoSolicitacao=solicitacao-normal".- Return type:
str
- salvar_log_transicao(status_evento, usuario, **kwargs)[source]
Registra no log a transição de status da solicitação.
Cria uma entrada em
LogSolicitacoesUsuarioassociada a esta alteração de cardápio.- Parameters:
status_evento (int) – Código do evento de status.
usuario (django.contrib.auth.models.AbstractUser) – Usuário responsável pela transição.
**kwargs –
Parâmetros opcionais do log. justificativa (str): Texto justificando a transição. resposta_sim_nao (bool): Indica resposta booleana associada
ao log. O padrão é
False.
- Returns:
None
- solicitacao_dict_para_relatorio(label_data, data_log, instituicao)[source]
Serializa os dados da solicitação para uso em relatórios.
Retorna um dicionário com as informações relevantes da alteração de cardápio, incluindo rastreamentos históricos, datas, motivo e substituições.
- Parameters:
label_data (str) – Rótulo descritivo para o campo de data no relatório.
data_log (datetime.date) – Data do log de referência exibida no relatório.
instituicao (object) – Instituição solicitante, mantida por compatibilidade de assinatura.
- Returns:
Dicionário com os campos utilizados no relatório.
- Return type:
dict
- property substituicoes
Retorna um atalho para
substituicoes_periodo_escolar.- Returns:
Manager reverso das substituições de alimentacao vinculadas.
- Return type:
django.db.models.Manager
- property substituicoes_dict
Retorna as substituições de alimentação serializadas como lista de dicionários.
Cada item da lista representa uma
SubstituicaoAlimentacaoNoPeriodoEscolarcom os camposperiodo,alteracao_deealteracao_para.- Returns:
Lista de dicionários no formato
{"periodo": str, "alteracao_de": str, "alteracao_para": str}.- Return type:
list[dict]
- property template_mensagem
Retorna o assunto e o corpo HTML do template de mensagem de alteração de cardápio.
Busca o
TemplateMensagemdo tipoALTERACAO_CARDAPIOe retorna seus campos de assunto e conteúdo HTML.- Returns:
Tupla
(assunto, corpo_html)do template.- Return type:
tuple[str, str]
- Raises:
TemplateMensagem.DoesNotExist – Caso não exista template do tipo
ALTERACAO_CARDAPIOcadastrado.
- terceirizada_responde_questionamento
A empresa terceirizada responde ao questionamento da CODAE sobre a possibilidade de atendimento da solicitação.
Só é possível responder um questionamento quando a solicitação está em CODAE_QUESTIONADO.
Caso a empresa responda que sim (resposta_sim_nao=True), a solicitação pode ser autorizada normalmente pela CODAE, mesmo tendo sido pedida com menos de 5 dias úteis de antecedência.
Caso a empresa responda que não (resposta_sim_nao=False), a solicitação deve ser negada pela CODAE, pois a empresa, pelo contrato, tem o direito de negar solicitações pedidas com menos de 5 dias úteis de antecedência.
Este método é herdado de django_xworkflows.
- Possui um hook (
_terceirizada_responde_questionamento_hook) para, após a resposta: criar uma entrada de log específico para esta ação, utilizando o método
salvar_log_transicao.registrar no log a justificativa informada e a resposta booleana em
resposta_sim_nao.
- Possui um hook (
- terceirizada_toma_ciencia
Deprecado.
Este método é herdado de django_xworkflows.
Antigamente, este método era utilizado para registrar a ciência da empresa terceirizada sobre a solicitação.
O status final do fluxo era TERCEIRIZADA_TOMOU_CIENCIA.
- Atualmente:
o status final é CODAE_AUTORIZADO.
o status TERCEIRIZADA_TOMOU_CIENCIA foi deprecado.
a empresa toma ciência sem alterar o status da solicitação, através do campo
terceirizada_conferiu_gestao.
- property tipo
Retorna a descrição legível do tipo da solicitação.
- Returns:
String
"Alteração do Tipo de Alimentação".- Return type:
str
- class DataIntervaloAlteracaoCardapio(*args, **kwargs)[source]
Bases:
CanceladoIndividualmente,CriadoEm,TemData,TemChaveExterna,TemIdentificadorExternoAmigavelRepresenta uma data específica pertencente ao intervalo de uma
AlteracaoCardapio.Permite que cada dia do intervalo seja tratado individualmente, possibilitando cancelamentos pontuais sem invalidar toda a solicitação.
- alteracao_cardapio: cardapio.AlteracaoCardapio
Descrição: Alteração de cardápio à qual esta data pertence.
- alteracao_cardapio_id: int
Origem:
django.db.models.ModelDescrição: Identificador da solicitação de alteração do tipo de alimentação à qual esta data pertence.
Corresponde à chave primária de
AlteracaoCardapio.
- cancelado: bool
Origem:
dados_comuns/behaviors.pyDescrição: Indica se esta data específica do intervalo foi cancelada individualmente.
Quando
True, a solicitação principal continua existindo, mas este dia deixa de valer dentro do intervalo originalmente solicitado.
- cancelado_em: datetime.datetime | None
Origem:
dados_comuns/behaviors.pyDescrição: Data e hora em que o cancelamento individual desta data foi registrado.
Pode ser
Nonequando a data ainda não foi cancelada.
- cancelado_justificativa: str
Origem:
dados_comuns/behaviors.pyDescrição: Justificativa informada para o cancelamento individual desta data.
Permanece vazio quando não houver cancelamento ou quando nenhuma justificativa tiver sido registrada.
- cancelado_por: perfil.Usuario | None
Origem:
dados_comuns/behaviors.pyDescrição: Usuário responsável por cancelar individualmente esta data do intervalo.
Pode ser
Nonequando o cancelamento não foi realizado.
- cancelado_por_id: int | None
Origem:
django.db.models.ForeignKeyDescrição: Identificador do usuário responsável pelo cancelamento individual desta data.
Corresponde à chave primária de
perfil.Usuario. Pode serNonequando não houver usuário associado ao cancelamento.
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.pyDescrição: Timestamp preenchido automaticamente na criação do registro.
- data: datetime.date
Origem:
dados_comuns/behaviors.pyDescrição: Data específica coberta pela solicitação de alteração do tipo de alimentação.
Cada registro de
DataIntervaloAlteracaoCardapiorepresenta um único dia dentro do intervalo da solicitação principal.
- id: int
Origem:
django.db.models.ModelDescrição: Identificador interno do registro no banco de dados.
Corresponde à chave primária gerada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.pyDescrição: Identificador único do registro.
Gerado automaticamente no momento da criação, sendo utilizado como identificador externo amigável.
- class MotivoAlteracaoCardapio(*args, **kwargs)[source]
Bases:
ExportModelOperationsMixin('motivo_alteracao_cardapio'),Nomeavel,TemChaveExterna,AtivavelRepresenta o motivo pelo qual uma
AlteracaoCardapiofoi solicitada.Utilizado para categorizar a razão da troca de tipo de alimentação.
- Motivos possíveis:
Lanche Emergencial
RPL (Refeição por Lanche)
LPR (Lanche por Refeição)
- Os motivos são compartilhados entre as Alterações do Tipo de Alimentação:
Alteração Padrão (EMEF, EMEI, CIEJA, EMEBS, etc.)
Alteração CEI (CEI DIRET, CEU CEI, CCI/CIPS)
Alteração CEMEI (CEMEI, CEU CEMEI)
- nome: str
Origem:
dados_comuns/behaviors.pyDescrição: Nome do motivo utilizado para classificar a solicitação de alteração do tipo de alimentação.
Exemplos esperados neste contexto incluem Lanche Emergencial, RPL (Refeição por Lanche) e LPR (Lanche por Refeição).
- alteracaocardapio_set: django.db.models.QuerySet[AlteracaoCardapio]
Descrição: Relação reversa com as solicitações de
AlteracaoCardapioassociadas a este motivo.Permite acessar todas as alterações do tipo de alimentação que referenciam este motivo.
- alteracaocardapiocei_set: django.db.models.QuerySet[AlteracaoCardapioCEI]
Descrição: Relação reversa com as solicitações de
AlteracaoCardapioCEIassociadas a este motivo.Permite acessar todas as alterações do tipo de alimentação de CEI que utilizam este motivo.
- alteracaocardapiocemei_set: django.db.models.QuerySet[AlteracaoCardapioCEMEI]
Descrição: Relação reversa com as solicitações de
AlteracaoCardapioCEMEIassociadas a este motivo.Permite acessar todas as alterações do tipo de alimentação de CEMEI que utilizam este motivo.
- ativo: bool
Origem:
dados_comuns/behaviors.pyDescrição: Indica se o motivo está ativo para uso no sistema.
Quando
False, o motivo permanece cadastrado, mas não deve ser considerado disponível para novos usos.
- id: int
Origem:
django.db.models.ModelDescrição: Identificador interno do registro no banco de dados.
Corresponde à chave primária gerada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.pyDescrição: Identificador único do registro.
Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.
- class SubstituicaoAlimentacaoNoPeriodoEscolar(*args, **kwargs)[source]
Bases:
ExportModelOperationsMixin('substituicao_alimentacao_periodo_escolar'),TemChaveExternaRepresenta uma substituição de tipo de alimentação em um período escolar específico.
Está vinculada a uma
AlteracaoCardapioe define quais tipos de alimentação serão trocados por quais outros em um determinado período escolar, bem como a quantidade de alunos afetados.- Exemplos:
no período INTEGRAL, ao selecionar motivo Lanche Emergencial, substituir REFEIÇÃO por LANCHE EMERGENCIAL para 50 alunos.
no período MANHA, ao selecionar motivo LPR, substituir LANCHE por REFEIÇÃO para 30 alunos.
no período TARDE, ao selecionar motivo RPL, substituir REFEIÇÃO por LANCHE para 20 alunos.
- alteracao_cardapio: cardapio.AlteracaoCardapio | None
Origem:
django.db.models.ForeignKeyDescrição: Solicitação de alteração do tipo de alimentação à qual esta substituição pertence.
Pode ser
Noneporque o campo permitenulleblank.
- alteracao_cardapio_id: int | None
Origem:
django.db.models.ForeignKeyDescrição: Identificador da solicitação de alteração do tipo de alimentação associada a esta substituição.
Corresponde à chave primária de
AlteracaoCardapio. Pode serNoneporque o campo permitenulleblank.
- id: int
Origem:
django.db.models.ModelDescrição: Identificador interno do registro no banco de dados.
Corresponde à chave primária gerada automaticamente pelo Django.
- periodo_escolar: escola.PeriodoEscolar
Origem:
django.db.models.ForeignKeyDescrição: Período escolar ao qual a substituição de alimentação se aplica.
Exemplo: manhã, tarde, noite ou integral, conforme os períodos cadastrados para a unidade.
- periodo_escolar_id: int
Origem:
django.db.models.ForeignKeyDescrição: Identificador do período escolar ao qual esta substituição se aplica.
Corresponde à chave primária de
escola.PeriodoEscolar.
- qtd_alunos: int
Origem:
django.db.models.PositiveSmallIntegerFieldDescrição: Quantidade de alunos impactados por esta substituição de alimentação no período escolar informado.
- tipos_alimentacao_de: django.db.models.Manager[TipoAlimentacao]
Origem:
django.db.models.ManyToManyFieldDescrição: Conjunto de tipos de alimentação originais que serão substituídos nesta solicitação.
Trata-se de uma relação muitos-para-muitos com
TipoAlimentacao.
- tipos_alimentacao_para: django.db.models.Manager[TipoAlimentacao]
Origem:
django.db.models.ManyToManyFieldDescrição: Conjunto de tipos de alimentação que passarão a ser oferecidos no lugar dos tipos originais.
Trata-se de uma relação muitos-para-muitos com
TipoAlimentacao.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.pyDescrição: Identificador único do registro.
Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.
api
api/serializers
- class AlteracaoCardapioSerializer(*args, **kwargs)[source]
Bases:
AlteracaoCardapioSerializerBaseSerializa a representacao detalhada de uma alteracao de cardapio.
Inclui substituicoes por periodo, datas do intervalo, motivo, escola, logs e dados de rastreabilidade usados nas respostas completas da API.
- Viewsets que utilizam este serializer:
AlteracoesCardapioViewSet: retornado porget_serializer_class()em todas as acoes de leitura e nas actions customizadas que respondem com o objeto serializado, excetocreate,updateepartial_update.
- class Meta[source]
Bases:
object- exclude = ('id',)
- model
alias of
AlteracaoCardapio
- class AlteracaoCardapioSerializerBase(*args, **kwargs)[source]
Bases:
ModelSerializerDefine os campos comuns das respostas de alteracao de cardapio.
Reune os relacionamentos e campos calculados compartilhados pelos serializers de leitura de
AlteracaoCardapio.- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, como classe base deAlteracaoCardapioSerializer.
- class AlteracaoCardapioSimplesSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerSerializa uma visao resumida de alteracao de cardapio.
Remove campos mais pesados e relacionamentos aninhados para atender listagens que precisam de um payload menor.
- Viewsets que utilizam este serializer:
AlteracoesCardapioViewSet: uso direto na actionsolicitacoes_dre.
- class Meta[source]
Bases:
object- exclude = ('id', 'criado_por', 'escola', 'motivo')
- model
alias of
AlteracaoCardapio
- class MotivoAlteracaoCardapioSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerSerializa motivos ativos de alteracao do tipo de alimentacao.
Expoe os campos publicos de
MotivoAlteracaoCardapiousados para listar e embutir o motivo selecionado em respostas de solicitacoes.- Viewsets que utilizam este serializer:
MotivosAlteracaoCardapioViewSet: uso direto comoserializer_classnas acoeslisteretrieve.AlteracoesCardapioViewSet: uso indireto, aninhado emAlteracaoCardapioSerializere retornado nas respostas que usam esse serializer.
- class Meta[source]
Bases:
object- exclude = ('id',)
- model
alias of
MotivoAlteracaoCardapio
- class SubstituicoesAlimentacaoNoPeriodoEscolarSerializer(*args, **kwargs)[source]
Bases:
SubstituicoesAlimentacaoNoPeriodoEscolarSerializerBaseSerializa substituicoes completas de alimentacao por periodo escolar.
Complementa o serializer base com os tipos de alimentacao de destino para representar cada item da lista
substituicoesde uma alteracao.- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, aninhado emAlteracaoCardapioSerializernas respostas de leitura.
- class SubstituicoesAlimentacaoNoPeriodoEscolarSerializerBase(*args, **kwargs)[source]
Bases:
ModelSerializerDefine os campos base de substituicoes por periodo escolar.
Centraliza a serializacao comum de periodo escolar, UUID da alteracao de cardapio e tipos de alimentacao de origem.
- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, por meio deSubstituicoesAlimentacaoNoPeriodoEscolarSerializeraninhado emAlteracaoCardapioSerializer.
api/serializers_create
- class AlteracaoCardapioSerializerCreate(*args, **kwargs)[source]
Bases:
AlteracaoCardapioSerializerCreateBaseSerializa a criacao e atualizacao completas de alteracoes de cardapio.
Valida datas e regras de negocio, resolve relacionamentos por UUID e cria as substituicoes e datas do intervalo associadas ao pedido.
- Viewsets que utilizam este serializer:
AlteracoesCardapioViewSet: retornado porget_serializer_class()nas actionscreate,updateepartial_update.
- class Meta[source]
Bases:
object- exclude = ('id', 'status')
- model
alias of
AlteracaoCardapio
- serializer_substituicao
alias of
SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreate
- create(validated_data)[source]
Cria uma alteracao de cardapio completa com datas e substituicoes.
- Parameters:
validated_data (dict) – Dados validados da solicitacao, incluindo listas aninhadas de
substituicoesedatas_intervalo.- Returns:
Instancia criada com seus relacionamentos.
- Return type:
- Raises:
ValidationError – Quando houver duplicidade indevida de solicitacao de Lanche Emergencial.
- criar_datas_intervalo(datas_intervalo, instance)[source]
Cria as datas individuais do intervalo vinculadas a uma solicitacao.
Para pedidos de Lanche Emergencial, aplica validacoes extras para dias letivos e ignora dias sem atividade escolar fora dos meses de ferias.
- Parameters:
datas_intervalo (list[dict]) – Datas validadas a serem persistidas.
instance (AlteracaoCardapio) – Solicitacao dona das datas.
- Returns:
None
- Raises:
ValidationError – Quando uma solicitacao de Lanche Emergencial nao possui ao menos um dia letivo fora dos meses de ferias.
- criar_substituicoes(substituicoes, instance)[source]
Cria as substituicoes de alimentacao vinculadas a uma solicitacao.
- Parameters:
substituicoes (list[dict]) – Itens validados com periodo escolar e tipos de alimentacao de origem e destino.
instance (AlteracaoCardapio) – Solicitacao dona das substituicoes.
- Returns:
None
- datas_nos_meses_de_ferias(datas_intervalo)[source]
Verifica se o intervalo toca algum mes considerado de ferias.
- Meses de férias:
Janeiro: período de férias escolares de verão.
Julho: período de férias escolares de inverno.
Dezembro: período de férias escolares de verão e festas de fim de ano.
- Parameters:
datas_intervalo (list[dict]) – Lista de itens com a chave
data.- Returns:
Truequando a primeira ou a ultima data do intervalo esta em janeiro, julho ou dezembro.- Return type:
bool
- update(instance, validated_data)[source]
Atualiza uma alteracao de cardapio recriando datas e substituicoes.
- Parameters:
instance (AlteracaoCardapio) – Instancia existente a ser atualizada.
validated_data (dict) – Dados validados da requisicao.
- Returns:
Instancia atualizada com seus relacionamentos recriados.
- Return type:
- Raises:
ValidationError – Quando houver duplicidade indevida de solicitacao de Lanche Emergencial.
- validate(attrs)[source]
Aplica as validacoes de negocio da solicitacao de alteracao.
- Parameters:
attrs (dict) – Dados normalizados pelo serializer antes da criacao ou atualizacao da instancia.
- Returns:
Os mesmos atributos recebidos, apos passarem pelas validacoes de consistencia e regras de negocio.
- Return type:
dict
- Raises:
ValidationError – Quando datas, motivo ou substituicoes violam as regras do dominio.
- class AlteracaoCardapioSerializerCreateBase(*args, **kwargs)[source]
Bases:
ModelSerializerDefine os campos comuns de escrita para alteracoes de cardapio.
Resolve referencias por UUID de escola e motivo e concentra a logica basica de criacao e atualizacao das substituicoes vinculadas.
- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, como classe base deAlteracaoCardapioSerializerCreatenas actionscreate,updateepartial_update.
- create(validated_data)[source]
Cria uma alteracao de cardapio usando a estrategia base do serializer.
- Parameters:
validated_data (dict) – Dados validados da solicitacao, contendo a lista de
substituicoesja validada.- Returns:
Instancia criada com as substituicoes vinculadas.
- Return type:
- update(instance, validated_data)[source]
Atualiza uma alteracao de cardapio recriando suas substituicoes.
- Parameters:
instance (AlteracaoCardapio) – Instancia a ser atualizada.
validated_data (dict) – Dados validados recebidos na requisicao.
- Returns:
Instancia atualizada e salva.
- Return type:
- class DatasIntervaloAlteracaoCardapioSerializerCreateSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerSerializa as datas individuais do intervalo na escrita da solicitacao.
Recebe a referencia da alteracao de cardapio por UUID quando necessario e persiste cada
DataIntervaloAlteracaoCardapioassociada ao pedido.- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, aninhado emAlteracaoCardapioSerializerCreatenas actionscreate,updateepartial_update.Uso indireto em
AlteracoesCardapioViewSet, aninhado emAlteracaoCardapioSerializernas respostas detalhadas de leitura.
- class Meta[source]
Bases:
object- exclude = ('id',)
- model
alias of
DataIntervaloAlteracaoCardapio
- class SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreate(*args, **kwargs)[source]
Bases:
SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreateBaseSerializa a escrita completa de substituicoes por periodo escolar.
Complementa o serializer base com a alteracao de cardapio de destino e os tipos de alimentacao para os quais a refeicao sera convertida.
- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, aninhado emAlteracaoCardapioSerializerCreatenas actionscreate,updateepartial_update.
- create(validated_data)[source]
Cria uma substituicao de alimentacao com relacionamentos many-to-many.
- Parameters:
validated_data (dict) – Dados validados pelo serializer, incluindo
tipos_alimentacao_deetipos_alimentacao_para.- Returns:
Instancia criada com os tipos de alimentacao de origem e destino vinculados.
- Return type:
- class SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreateBase(*args, **kwargs)[source]
Bases:
ModelSerializerDefine os campos base para escrita de substituicoes por periodo.
Recebe referencias por UUID para o periodo escolar e para os tipos de alimentacao de origem ao criar ou atualizar uma alteracao de cardapio.
- Viewsets que utilizam este serializer:
Nenhum diretamente.
Uso indireto em
AlteracoesCardapioViewSet, por meio deSubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreateaninhado emAlteracaoCardapioSerializerCreatenas actionscreate,updateepartial_update.
api/validators
- precisa_pertencer_a_um_tipo_de_alimentacao(tipos_alimentacao_de, tipo_alimentacao_para, tipo_unidade_escolar, periodo_escolar)[source]
Valida se os tipos de alimentacao pertencem ao contexto informado.
Garante que todos os tipos de alimentacao de origem estejam habilitados para o periodo escolar e tipo de unidade da escola e que o tipo de destino nao esteja repetido entre os tipos substituidos.
- Parameters:
tipos_alimentacao_de (Iterable[TipoAlimentacao]) – Tipos de alimentacao que serao substituidos.
tipo_alimentacao_para (TipoAlimentacao) – Tipo de alimentacao de destino.
tipo_unidade_escolar (str) – Tipo de unidade da escola associado ao pedido.
periodo_escolar (PeriodoEscolar) – Periodo escolar ao qual a substituicao se aplica.
- Returns:
Truequando a combinacao e valida.- Return type:
bool
- Raises:
ValidationError – Quando algum tipo de origem nao pertence ao contexto de periodo/tipo de unidade ou quando o tipo de destino ja consta entre os tipos substituidos.
- valida_duplicidade_solicitacoes_lanche_emergencial(attrs, eh_cemei=False)[source]
- Valida se existe alguma solicitação ativa (não é rascunho, nem foi negada ou cancelada) de Lanche Emergencial para a mesma combinação de:
escola
data
periodo escolar
tipos de alimentacao de origem.
Caso já exista alguma solicitação ativa que contenha a mesma combinação, a função levanta um ValidationError, impedindo a criação de uma nova solicitação de Lanche Emergencial para a mesma situação.
- Parameters:
attrs (dict) – Dados validados da solicitacao.
eh_cemei (bool, optional) – Define se a consulta deve usar o modelo de substituição do fluxo CEMEI. Default é
False.
- Returns:
Truequando nao ha duplicidade bloqueante ou quando o motivo da solicitacao nao e Lanche Emergencial.- Return type:
bool
- Raises:
ValidationError – Quando ja existe uma solicitacao ativa de Lanche Emergencial para a mesma combinacao de data e periodo.
api/viewsets
- class AlteracoesCardapioViewSet(**kwargs)[source]
Bases:
DataSolicitacaoContextMixin,ModelViewSet- get_permissions()[source]
Instantiates and returns the list of permissions that this view requires.
- get_serializer_class()[source]
Return the class to use for the serializer. Defaults to using self.serializer_class.
You may want to override this if you need to provide different serializations depending on the incoming request.
(Eg. admins get full serialization, others get basic serialization)
- lookup_field = 'uuid'
- permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>,)
- queryset = <QuerySet [<AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-11-18 para 2022-11-18>, <AlteracaoCardapio: Alteração de cardápio de: 2022-12-08 para 2022-12-08>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-13 para 2022-10-13>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-24 para 2022-10-24>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-11-30 para 2022-11-30>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-12-08 para 2022-12-08>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-31 para 2022-10-31>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-13 para 2022-10-13>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-11 para 2022-10-11>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-10 para 2022-10-10>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-10 para 2022-10-10>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-11 para 2022-10-11>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-14 para 2022-10-14>, <AlteracaoCardapio: Alteração de cardápio de: 2022-10-21 para 2022-10-21>, <AlteracaoCardapio: Alteração de cardápio de: 2022-11-24 para 2022-11-24>, '...(remaining elements truncated)...']>
- class MotivosAlteracaoCardapioViewSet(**kwargs)[source]
Bases:
ReadOnlyModelViewSet- get_queryset()[source]
Get the list of items for this view. This must be an iterable, and may be a queryset. Defaults to using self.queryset.
This method should always be used rather than accessing self.queryset directly, as self.queryset gets evaluated only once, and those results are cached for all subsequent requests.
You may want to override this if you need to provide different querysets depending on the incoming request.
(Eg. return a list of items that is specific to the user)
- lookup_field = 'uuid'
- queryset = <QuerySet [<MotivoAlteracaoCardapio: RPL - Refeição por Lanche>, <MotivoAlteracaoCardapio: LPR - Lanche por Refeição>, <MotivoAlteracaoCardapio: Lanche Emergencial>]>
- serializer_class
alias of
MotivoAlteracaoCardapioSerializer
fixtures
fixtures/factories
- class AlteracaoCardapioFactory(**kwargs)[source]
Bases:
DjangoModelFactory- escola = <factory.declarations.SubFactory object>
- motivo = <factory.declarations.SubFactory object>
- rastro_dre = <factory.declarations.SubFactory object>
- rastro_escola = <factory.declarations.SubFactory object>
- rastro_lote = <factory.declarations.SubFactory object>
- rastro_terceirizada = <factory.declarations.SubFactory object>
- class DataIntervaloAlteracaoCardapioFactory(**kwargs)[source]
Bases:
DjangoModelFactory- alteracao_cardapio = <factory.declarations.SubFactory object>
- class MotivoAlteracaoCardapioFactory(**kwargs)[source]
Bases:
DjangoModelFactory- nome = <factory.declarations.Sequence object>
- class SubstituicaoAlimentacaoNoPeriodoEscolarFactory(**kwargs)[source]
Bases:
DjangoModelFactory- alteracao_cardapio = <factory.declarations.SubFactory object>
- periodo_escolar = <factory.declarations.SubFactory object>
- tipos_alimentacao_de = <factory.declarations.PostGeneration object>
- tipos_alimentacao_para = <factory.declarations.PostGeneration object>