alteracao_tipo_alimentacao_cemei

admin

class AlteracaoCardapioCEMEIModelAdmin(model, admin_site)[source]

Bases: ModelAdmin

Admin do Django para solicitações de alteração do tipo de alimentação CEMEI.

Configura a listagem administrativa de AlteracaoCardapioCEMEI, exibindo o UUID, a data e o status de cada solicitação, e habilitando filtro por status.

list_display

Colunas exibidas na listagem do admin. Valores: ["uuid", "data", "status"].

Type:

list[str]

list_filter

Filtros laterais disponíveis na listagem. Valores: ["status"].

Type:

list[str]

models

class AlteracaoCardapioCEMEI(*args, **kwargs)[source]

Bases: CriadoEm, CriadoPor, TemChaveExterna, TemObservacao, FluxoAprovacaoPartindoDaEscola, TemIdentificadorExternoAmigavel, Logs, TemPrioridade, SolicitacaoForaDoPrazo, EhAlteracaoCardapio, TemTerceirizadaConferiuGestaoAlimentacao

Modelo responsável por armazenar Solicitações de Alteração do Tipo de Alimentação para escolas do tipo CEMEI.

Representa uma solicitação formal de troca do tipo de alimentação servida em determinado(s) período(s) escolar(es).

Para os CEMEIs, a solicitação pode ir em um único dia (alterar_dia) ou em um intervalo de datas (data_inicial / data_final).

As substituições são divididas por tipo de unidade interna:
  • CEI (com faixas etárias)

  • EMEI (com quantidade de alunos por período).

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

    • 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.

  • Lanche Emergencial (Não disponível para CEI, apenas para EMEI)
    • substitui todas as alimentações do dia por lanche emergencial

    • única solicitação que pode ser feita sem o mínimo de 2 dias úteis de antecedência.

Tipos de unidade contempladas:
  • CEMEI

  • CEU CEMEI

Exceções não contempladas:
  • EMEF

  • EMEI

  • CEI

etc.

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 CEMEI".

Type:

str

TODOS

Constante indicando que a solicitação abrange tanto alunos CEI quanto EMEI.

Type:

str

CEI

Constante indicando que a solicitação afeta apenas alunos CEI.

Type:

str

EMEI

Constante indicando que a solicitação afeta apenas alunos EMEI.

Type:

str

alunos_cei_e_ou_emei: str

Origem: alteracao_tipo_alimentacao_cemei/models.py

Descrição: Indica quais alunos são afetados pela solicitação: apenas CEI, apenas EMEI ou ambos (TODOS).

Os valores possíveis são definidos pela constante STATUS_CHOICES:

  • TODOS — todos os alunos (padrão)

  • CEI — apenas alunos da parte CEI

  • EMEI — apenas alunos da parte EMEI

alterar_dia: datetime.date | None

Origem: alteracao_tipo_alimentacao_cemei/models.py

Descrição: Data única para a qual a substituição de alimentação se aplica.

Quando preenchido, indica que a solicitação é de dia único. Mutuamente exclusivo com data_inicial / data_final. Pode ser None quando a solicitação utiliza intervalo de datas.

criado_em: datetime.datetime

Origem: dados_comuns/behaviors.py

Descrição: Timestamp preenchido automaticamente na criação do registro.

criado_por: perfil.Usuario | None

Origem: dados_comuns/behaviors.py

Descrição: Usuário responsável pela criação do registro. O campo ainda permite null e blank.

criado_por_id: int | None

Origem: dados_comuns/behaviors.py

Descrição: Identificador do usuário responsável pela criação do registro.

Corresponde à chave primária de perfil.Usuario. Pode ser None (campo permite null e blank).

data_inicial: datetime.date | None

Origem: alteracao_tipo_alimentacao_cemei/models.py

Descrição: Data de início do intervalo de substituição de alimentação.

Quando preenchido, indica que a solicitação abrange um período de datas. Deve ser usado em conjunto com data_final. Pode ser None quando a solicitação é de dia único (alterar_dia).

data_final: datetime.date | None

Origem: alteracao_tipo_alimentacao_cemei/models.py

Descrição: Data de fim do intervalo de substituição de alimentação.

Deve ser usado em conjunto com data_inicial. Pode ser None quando a solicitação é de dia único (alterar_dia).

datas_intervalo: django.db.models.QuerySet[DataIntervaloAlteracaoCardapioCEMEI]

Relação reversa 1:N com DataIntervaloAlteracaoCardapioCEMEI.

Representa as datas individuais do intervalo de substituição, permitindo cancelamentos pontuais por data.

escola: escola.Escola | None

Origem: EhAlteracaoCardapio

Descriçã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: EhAlteracaoCardapio

Descriçã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 ser None (campo permite null e blank).

foi_solicitado_fora_do_prazo: bool

Origem: dados_comuns/behaviors.py

Descriçã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.Model

Descrição: Identificador interno do registro no banco de dados.

Corresponde à chave primária gerada automaticamente pelo Django.

motivo: cardapio.MotivoAlteracaoCardapio | None

Origem: EhAlteracaoCardapio

Descriçã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: EhAlteracaoCardapio

Descrição: Identificador do motivo associado à solicitação de alteração do tipo de alimentação.

Corresponde à chave primária de MotivoAlteracaoCardapio. Pode ser None (campo permite null e blank).

observacao: str

Origem: dados_comuns/behaviors.py

Descrição: Campo de texto livre para registrar observações complementares da solicitação.

Pode ser uma string vazia, pois o campo permite blank.

rastro_dre: escola.DiretoriaRegional | None

Origem: FluxoAprovacaoPartindoDaEscola

Descriçã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: FluxoAprovacaoPartindoDaEscola

Descrição: Identificador da DRE vinculada ao rastro histórico da solicitação.

Corresponde à chave primária de escola.DiretoriaRegional. Pode ser None (campo permite null e blank).

rastro_escola: escola.Escola | None

Origem: FluxoAprovacaoPartindoDaEscola

Descriçã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: FluxoAprovacaoPartindoDaEscola

Descrição: Identificador da escola registrada no rastro histórico da solicitação.

Corresponde à chave primária de escola.Escola. Pode ser None (campo permite null e blank).

rastro_lote: escola.Lote | None

Origem: FluxoAprovacaoPartindoDaEscola

Descriçã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: FluxoAprovacaoPartindoDaEscola

Descrição: Identificador do lote registrado no rastro histórico da solicitação.

Corresponde à chave primária de escola.Lote. Pode ser None (campo permite null e blank).

rastro_terceirizada: terceirizada.Terceirizada | None

Origem: FluxoAprovacaoPartindoDaEscola

Descriçã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: FluxoAprovacaoPartindoDaEscola

Descrição: Identificador da terceirizada registrada no rastro histórico da solicitação.

Corresponde à chave primária de terceirizada.Terceirizada. Pode ser None (campo permite null e blank).

status: str

Origem: django_xworkflows.models.StateField

Descrição: Estado atual da solicitação dentro do workflow de aprovação partindo da escola.

Armazena um dos valores definidos em PedidoAPartirDaEscolaWorkflow, como RASCUNHO, DRE_A_VALIDAR ou CODAE_AUTORIZADO.

substituicoes_cemei_cei_periodo_escolar: django.db.models.QuerySet[SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI]

Relação reversa 1:N com SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI.

Representa todas as substituições de tipo de alimentação vinculadas à parte CEI desta solicitação CEMEI, organizadas por período escolar e faixa etária.

substituicoes_cemei_emei_periodo_escolar: django.db.models.QuerySet[SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI]

Relação reversa 1:N com SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI.

Representa todas as substituições de tipo de alimentação vinculadas à parte EMEI desta solicitação CEMEI, organizadas por período escolar e quantidade de alunos.

terceirizada_conferiu_gestao: bool

Origem: dados_comuns/behaviors.py

Descriçã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.StateField

Descrição: Relacionado ao campo status do workflow.

Retorna a representação legível (label) do status atual da instância.

O valor retornado corresponde ao texto definido em states do 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_AUTORIZADO retorna "CODAE autorizou pedido".

uuid: uuid.UUID

Origem: dados_comuns/behaviors.py

Descriçã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).

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

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.

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 da solicitação, priorizando alterar_dia.

Para solicitações de dia único, retorna alterar_dia. Para solicitações por intervalo, retorna data_inicial.

Returns:

Data do evento ou None se nenhum campo estiver preenchido.

Return type:

datetime.date | None

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.

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.

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:

True se existir alguma DataIntervaloAlteracaoCardapioCEMEI com cancelado=True, False caso 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_prazo com 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.

property numero_alunos

Retorna o total de alunos somando as faixas etárias CEI e as quantidades EMEI.

Returns:

Soma da quantidade de alunos em todas as faixas etárias de SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI e das quantidades de SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI.

Return type:

int

property path

Retorna o caminho relativo do relatório desta solicitação no frontend.

Returns:

URL relativa no formato "alteracao-do-tipo-de-alimentacao-cemei/relatorio?uuid=<uuid>&tipoSolicitacao=solicitacao-cemei".

Return type:

str

property periodos_escolares

Retorna uma lista com os períodos escolares afetados por esta solicitação.

Combina os períodos escolares das substituições CEI (SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI) e das substituições EMEI (SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI).

Returns:

Lista de nomes dos períodos escolares afetados, sem garantia de ordem e podendo conter duplicatas.

Return type:

list[str]

salvar_log_transicao(status_evento, usuario, **kwargs)[source]

Registra no log a transição de status da solicitação.

Cria uma entrada em LogSolicitacoesUsuario associada a esta alteração de cardápio CEMEI.

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 CEMEI para uso em relatórios.

Retorna um dicionário com as informações relevantes da alteração de cardápio CEMEI, incluindo rastreamentos históricos, datas, motivo e substituições divididas por tipo de unidade interna (CEI e EMEI).

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

substituicoes_dict()[source]

Retorna as substituições de alimentação CEMEI serializadas como lista de dicionários.

Agrupa as substituições por período escolar, incluindo dados tanto das substituições CEI (por faixa etária) quanto das substituições EMEI (por quantidade de alunos).

Returns:

Lista de dicionários com os campos periodo, faixas_cei e faixas_emei.

Return type:

list[dict]

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.

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

tipos_alimentacao_de(nome_periodo_escolar=None)[source]

Retorna uma lista com os tipos de alimentação substituídos nesta solicitação.

Combina os tipos de alimentação de origem das substituições CEI (SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI) e EMEI (SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI), filtrando opcionalmente por período escolar.

Parameters:

nome_periodo_escolar (str, optional) – Nome do período escolar para restringir o resultado. Se None, considera todas as substituições. Padrão: None.

Returns:

Lista de nomes dos tipos de alimentação substituídos, sem garantia de ordem e podendo conter duplicatas.

Return type:

list[str]

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI(*args, **kwargs)[source]

Bases: TemChaveExterna

Representa uma substituição de tipo de alimentação por período escolar para a parte CEI do CEMEI.

Está vinculada a uma AlteracaoCardapioCEMEI e define quais tipos de alimentação serão substituídos e por quais tipos resultantes em um determinado período escolar. As quantidades de alunos afetados são especificadas por faixa etária em FaixaEtariaSubstituicaoAlimentacaoCEMEICEI.

alteracao_cardapio: cardapio.AlteracaoCardapioCEMEI | None

Origem: django.db.models.ForeignKey

Descrição: Solicitação de alteração do tipo de alimentação CEMEI à qual esta substituição CEI pertence.

Pode ser None porque o campo permite null e blank.

alteracao_cardapio_id: int | None

Origem: django.db.models.ForeignKey

Descrição: Identificador da solicitação de alteração do tipo de alimentação CEMEI associada a esta substituição.

Corresponde à chave primária de AlteracaoCardapioCEMEI. Pode ser None porque o campo permite null e blank.

faixas_etarias: django.db.models.QuerySet[FaixaEtariaSubstituicaoAlimentacaoCEMEICEI]

Relação reversa 1:N com FaixaEtariaSubstituicaoAlimentacaoCEMEICEI.

Representa as faixas etárias com suas respectivas quantidades e matriculados para esta substituição de período escolar CEI.

id: int

Origem: django.db.models.Model

Descriçã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.ForeignKey

Descrição: Período escolar ao qual a substituição de alimentação CEI se aplica.

Exemplo: manhã, tarde, noite ou integral.

periodo_escolar_id: int

Origem: django.db.models.ForeignKey

Descrição: Identificador do período escolar ao qual esta substituição CEI se aplica.

Corresponde à chave primária de escola.PeriodoEscolar.

tipos_alimentacao_de: django.db.models.Manager[TipoAlimentacao]

Origem: django.db.models.ManyToManyField

Descrição: Conjunto de tipos de alimentação originais que serão substituídos nesta solicitação CEI.

Trata-se de uma relação muitos-para-muitos com TipoAlimentacao.

tipos_alimentacao_para: django.db.models.Manager[TipoAlimentacao]

Origem: django.db.models.ManyToManyField

Descrição: Conjunto de tipos de alimentação que passarão a ser oferecidos no lugar dos tipos originais (lado CEI).

Trata-se de uma relação muitos-para-muitos com TipoAlimentacao.

uuid: uuid.UUID

Origem: dados_comuns/behaviors.py

Descrição: Identificador único do registro.

Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI(*args, **kwargs)[source]

Bases: TemChaveExterna, MatriculadosQuandoCriado

Representa uma substituição de tipo de alimentação por período escolar para a parte EMEI do CEMEI.

Está vinculada a uma AlteracaoCardapioCEMEI e define quais tipos de alimentação serão substituídos e por quais tipos resultantes em um determinado período escolar. A quantidade de alunos é informada como um número inteiro simples (qtd_alunos), diferente do CEI que usa faixas etárias.

alteracao_cardapio: cardapio.AlteracaoCardapioCEMEI | None

Origem: django.db.models.ForeignKey

Descrição: Solicitação de alteração do tipo de alimentação CEMEI à qual esta substituição EMEI pertence.

Pode ser None porque o campo permite null e blank.

alteracao_cardapio_id: int | None

Origem: django.db.models.ForeignKey

Descrição: Identificador da solicitação de alteração do tipo de alimentação CEMEI associada a esta substituição.

Corresponde à chave primária de AlteracaoCardapioCEMEI. Pode ser None porque o campo permite null e blank.

id: int

Origem: django.db.models.Model

Descrição: Identificador interno do registro no banco de dados.

Corresponde à chave primária gerada automaticamente pelo Django.

matriculados_quando_criado: int

Origem: dados_comuns/behaviors.py

Descrição: Número total de alunos matriculados no período escolar EMEI no momento em que a solicitação foi criada.

Mantém um registro histórico da matrícula, independentemente de alterações posteriores.

periodo_escolar: escola.PeriodoEscolar

Origem: django.db.models.ForeignKey

Descrição: Período escolar ao qual a substituição de alimentação EMEI se aplica.

Exemplo: manhã, tarde, noite ou integral.

periodo_escolar_id: int

Origem: django.db.models.ForeignKey

Descrição: Identificador do período escolar ao qual esta substituição EMEI se aplica.

Corresponde à chave primária de escola.PeriodoEscolar.

qtd_alunos: int

Origem: alteracao_tipo_alimentacao_cemei/models.py

Descrição: Quantidade de alunos da parte EMEI afetados por esta substituição de alimentação.

Diferentemente do lado CEI (que usa faixas etárias), a parte EMEI expressa a quantidade diretamente como um inteiro positivo. O valor padrão é 0.

tipos_alimentacao_de: django.db.models.Manager[TipoAlimentacao]

Origem: django.db.models.ManyToManyField

Descrição: Conjunto de tipos de alimentação originais que serão substituídos nesta solicitação EMEI.

Trata-se de uma relação muitos-para-muitos com TipoAlimentacao.

tipos_alimentacao_para: django.db.models.Manager[TipoAlimentacao]

Origem: django.db.models.ManyToManyField

Descrição: Conjunto de tipos de alimentação que passarão a ser oferecidos no lugar dos tipos originais (lado EMEI).

Trata-se de uma relação muitos-para-muitos com TipoAlimentacao.

uuid: uuid.UUID

Origem: dados_comuns/behaviors.py

Descrição: Identificador único do registro.

Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

class FaixaEtariaSubstituicaoAlimentacaoCEMEICEI(*args, **kwargs)[source]

Bases: TemChaveExterna, TemFaixaEtariaEQuantidade, MatriculadosQuandoCriado

Representa a quantidade de alunos de uma faixa etária em uma substituição CEI do CEMEI.

Está vinculada a SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI e detalha quantos alunos de cada faixa etária são afetados pela substituição, juntamente com o número de matriculados no momento da criação da solicitação.

faixa_etaria: escola.FaixaEtaria

Origem: dados_comuns/behaviors.py

Descrição: Faixa etária a que se refere esta entrada de substituição de alimentação CEI do CEMEI.

Exemplo: de 0 a 1 ano, de 1 a 2 anos, etc.

faixa_etaria_id: int

Origem: dados_comuns/behaviors.py

Descrição: Identificador da faixa etária associada a esta entrada.

Corresponde à chave primária de escola.FaixaEtaria.

id: int

Origem: django.db.models.Model

Descrição: Identificador interno do registro no banco de dados.

Corresponde à chave primária gerada automaticamente pelo Django.

matriculados_quando_criado: int

Origem: dados_comuns/behaviors.py

Descrição: Número de alunos matriculados nesta faixa etária no momento em que a solicitação foi criada.

Mantém um registro histórico da matrícula, independentemente de alterações posteriores.

quantidade: int

Origem: dados_comuns/behaviors.py

Descrição: Quantidade de alunos desta faixa etária afetados pela substituição de alimentação.

substituicao_alimentacao: cardapio.SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI

Origem: django.db.models.ForeignKey

Descrição: Substituição de alimentação no período escolar CEI do CEMEI à qual esta faixa etária pertence.

substituicao_alimentacao_id: int

Origem: django.db.models.ForeignKey

Descrição: Identificador da substituição de alimentação no período escolar CEI associada a esta faixa etária.

Corresponde à chave primária de SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI.

uuid: uuid.UUID

Origem: dados_comuns/behaviors.py

Descrição: Identificador único do registro.

Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

class DataIntervaloAlteracaoCardapioCEMEI(*args, **kwargs)[source]

Bases: CanceladoIndividualmente, CriadoEm, TemData, TemChaveExterna, TemIdentificadorExternoAmigavel

Representa uma data específica pertencente ao intervalo de uma AlteracaoCardapioCEMEI.

Permite que cada dia do intervalo seja tratado individualmente, possibilitando cancelamentos pontuais sem invalidar toda a solicitação.

alteracao_cardapio_cemei: cardapio.AlteracaoCardapioCEMEI

Origem: django.db.models.ForeignKey

Descrição: Solicitação de alteração do tipo de alimentação CEMEI à qual esta data do intervalo pertence.

alteracao_cardapio_cemei_id: int

Origem: django.db.models.ForeignKey

Descrição: Identificador da solicitação CEMEI associada a esta data do intervalo.

Corresponde à chave primária de AlteracaoCardapioCEMEI.

cancelado: bool

Origem: dados_comuns/behaviors.py

Descrição: Indica se esta data específica do intervalo foi cancelada individualmente.

Quando True, a data foi excluída do escopo da solicitação sem invalidar as demais datas. O padrão é False.

cancelado_justificativa: str

Origem: dados_comuns/behaviors.py

Descrição: Justificativa fornecida ao cancelar individualmente esta data do intervalo.

Pode ser uma string vazia quando não há justificativa registrada.

cancelado_em: datetime.datetime | None

Origem: dados_comuns/behaviors.py

Descrição: Timestamp preenchido automaticamente no momento em que esta data do intervalo foi cancelada individualmente.

Pode ser None enquanto o cancelamento não tiver ocorrido.

cancelado_por: perfil.Usuario | None

Origem: dados_comuns/behaviors.py

Descrição: Usuário responsável pelo cancelamento individual desta data do intervalo.

Pode ser None se o cancelamento ainda não ocorreu ou se o campo não foi preenchido.

cancelado_por_id: int | None

Origem: dados_comuns/behaviors.py

Descrição: Identificador do usuário responsável pelo cancelamento individual desta data do intervalo.

Corresponde à chave primária de perfil.Usuario. Pode ser None se o cancelamento ainda não ocorreu ou se o campo não foi preenchido.

criado_em: datetime.datetime

Origem: dados_comuns/behaviors.py

Descrição: Timestamp preenchido automaticamente na criação do registro.

data: datetime.date

Origem: dados_comuns/behaviors.py

Descrição: Data específica que compõe o intervalo da solicitação CEMEI.

id: int

Origem: django.db.models.Model

Descrição: Identificador interno do registro no banco de dados.

Corresponde à chave primária gerada automaticamente pelo Django.

uuid: uuid.UUID

Origem: dados_comuns/behaviors.py

Descrição: Identificador único do registro.

Gerado automaticamente no momento da criação, sendo utilizado como identificador externo.

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

api

serializers

class AlteracaoCardapioCEMEISerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de leitura para AlteracaoCardapioCEMEI.

Utilizado pelo AlteracoesCardapioCEMEIViewSet nas actions de listagem e recuperação de solicitações. Expande todos os campos relacionados com representações completas, incluindo as substituições separadas por parte CEI (substituicoes_cemei_cei_periodo_escolar) e EMEI (substituicoes_cemei_emei_periodo_escolar), datas do intervalo, rastro de terceirizada e logs de transição.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of AlteracaoCardapioCEMEI

class FaixaEtariaSubstituicaoAlimentacaoCEMEICEISerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de leitura para FaixaEtariaSubstituicaoAlimentacaoCEMEICEI.

Expande o campo faixa_etaria com a representação completa via FaixaEtariaSerializer.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of FaixaEtariaSubstituicaoAlimentacaoCEMEICEI

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEISerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de leitura para SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI.

Expande periodo_escolar, faixas_etarias, tipos_alimentacao_de e tipos_alimentacao_para com seus respectivos serializers aninhados.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEISerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de leitura para SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI.

Expande periodo_escolar, tipos_alimentacao_de e tipos_alimentacao_para com seus respectivos serializers aninhados.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI

serializers_create

class AlteracaoCardapioCEMEISerializerCreate(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de escrita para AlteracaoCardapioCEMEI.

Utilizado pelo AlteracoesCardapioCEMEIViewSet nas actions de criação e atualização de solicitações. Coordena a persistência aninhada das substituições CEI, EMEI e datas de intervalo.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of AlteracaoCardapioCEMEI

create(validated_data)[source]

Cria uma AlteracaoCardapioCEMEI com todas as suas entidades aninhadas.

Valida duplicidades de lanche emergencial e RPL; extrai e persiste separadamente as substituições CEI, EMEI e datas do intervalo.

Parameters:

validated_data (dict) – Dados validados pelo serializer.

Returns:

Instância recém-criada.

Return type:

AlteracaoCardapioCEMEI

Raises:

rest_framework.exceptions.ValidationError – Se houver duplicidade de solicitação de lanche emergencial ou RPL para o mesmo mês.

criar_datas_intervalo(datas_intervalo, instance)[source]

Cria as datas do intervalo vinculadas à solicitação CEMEI.

Parameters:
  • datas_intervalo (list[dict]) – Lista de dados de datas a serem criadas.

  • instance (AlteracaoCardapioCEMEI) – Solicitação CEMEI à qual as datas serão vinculadas.

Returns:

None

criar_faixas_etarias_cemei(faixas_etarias, substituicao)[source]

Cria as faixas etárias CEI associadas a uma substituição.

Parameters:
Returns:

None

criar_substituicoes_cemei_cei(substituicoes_cemei_cei_periodo_escolar, alteracao_cemei)[source]

Cria as substituições de período escolar CEI da solicitação CEMEI.

Para cada substituição, vincula alteracao_cardapio, define os types M2M e cria as faixas etárias aninhadas.

Parameters:
  • substituicoes_cemei_cei_periodo_escolar (list[dict]) – Lista de dados de substituições CEI.

  • alteracao_cemei (AlteracaoCardapioCEMEI) – Solicitação CEMEI à qual as substituições serão vinculadas.

Returns:

None

criar_substituicoes_cemei_emei(substituicoes_cemei_emei_periodo_escolar, alteracao_cemei)[source]

Cria as substituições de período escolar EMEI da solicitação CEMEI.

Para cada substituição, vincula alteracao_cardapio e define os types M2M. Diferente do lado CEI, não há faixas etárias aninhadas.

Parameters:
  • substituicoes_cemei_emei_periodo_escolar (list[dict]) – Lista de dados de substituições EMEI.

  • alteracao_cemei (AlteracaoCardapioCEMEI) – Solicitação CEMEI à qual as substituições serão vinculadas.

Returns:

None

update(instance, validated_data)[source]

Atualiza uma AlteracaoCardapioCEMEI recriando todas as entidades aninhadas.

Remove todas as substituições e datas do intervalo existentes antes de recrear com os novos dados. Valida duplicidades de lanche emergencial.

Parameters:
  • instance (AlteracaoCardapioCEMEI) – Instância a ser atualizada.

  • validated_data (dict) – Dados validados pelo serializer.

Returns:

Instância atualizada.

Return type:

AlteracaoCardapioCEMEI

Raises:

rest_framework.exceptions.ValidationError – Se houver duplicidade de solicitação de lanche emergencial.

validate_data(data)[source]

Valida a data principal da solicitação CEMEI.

Aplica as seguintes regras de negócio: - não pode ser uma data no passado; - deve ser solicitada com a antecedência mínima necessária; - deve estar dentro do ano corrente.

Parameters:

data (datetime.date) – Data a ser validada.

Returns:

A mesma data, se válida.

Return type:

datetime.date

Raises:

serializers.ValidationError – Se qualquer regra de validação for violada.

class DatasIntervaloAlteracaoCardapioCEMEICreateSerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de escrita para DataIntervaloAlteracaoCardapioCEMEI.

Aceita alteracao_cardapio_cemei por UUID (campo opcional preenchido programaticamente no momento da criação) e implementa create para instanciar diretamente o modelo.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of DataIntervaloAlteracaoCardapioCEMEI

create(validated_data)[source]

Cria uma instância de DataIntervaloAlteracaoCardapioCEMEI.

Parameters:

validated_data (dict) – Dados validados pelo serializer.

Returns:

Instância recém-criada.

Return type:

DataIntervaloAlteracaoCardapioCEMEI

class FaixaEtariaSubstituicaoAlimentacaoCEMEICEICreateSerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de escrita para FaixaEtariaSubstituicaoAlimentacaoCEMEICEI.

Aceita faixa_etaria por UUID e referencia a SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI de forma opcional.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of FaixaEtariaSubstituicaoAlimentacaoCEMEICEI

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEICreateSerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de escrita para SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI.

Aceita alteracao_cardapio, periodo_escolar, tipos_alimentacao_de, tipos_alimentacao_para e faixas_etarias por UUID. O campo faixas_etarias é aninhado e criado em cascata pelo método criar_substituicoes_cemei_cei do serializer pai.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI

class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEICreateSerializer(*args, **kwargs)[source]

Bases: ModelSerializer

Serializer de escrita para SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI.

Aceita alteracao_cardapio, periodo_escolar, tipos_alimentacao_de e tipos_alimentacao_para por UUID. Diferente do lado CEI, não possui faixas etárias; a quantidade de alunos é informada diretamente no campo qtd_alunos do modelo.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI

viewsets

class AlteracoesCardapioCEMEIViewSet(**kwargs)[source]

Bases: AlteracoesCardapioViewSet, EscolaIniciaCancela, DREValida, CodaeAutoriza, CodaeQuestionaTerceirizadaResponde, TerceirizadaTomaCiencia

ViewSet para Solicitações de Alteração do Tipo de Alimentação para escolas CEMEI e CEU CEMEI.

Herda o fluxo de aprovação completo de AlteracoesCardapioViewSet e adiciona os mixins de transição de status específicos ( EscolaIniciaCancela, DREValida, CodaeAutoriza, CodaeQuestionaTerceirizadaResponde, TerceirizadaTomaCiencia). O serializer de leitura é AlteracaoCardapioCEMEISerializer e o de escrita é AlteracaoCardapioCEMEISerializerCreate.

get_queryset()[source]

Retorna o queryset de AlteracaoCardapioCEMEI filtrado por tipo de usuário.

Aplica filtros de instituição de acordo com o tipo do usuário autenticado (escola, diretoria regional ou terceirizada). Permite filtro adicional por status via query param.

Returns:

Queryset filtrado de AlteracaoCardapioCEMEI.

Return type:

django.db.models.QuerySet

get_serializer_class()[source]

Retorna o serializer adequado à action executada.

Returns:

AlteracaoCardapioCEMEISerializerCreate para actions de escrita (create, update, partial_update) e AlteracaoCardapioCEMEISerializer para as demais.

Return type:

type

relatorio(request, uuid=None)[source]

Gera e retorna o relatório PDF da solicitação CEMEI.

Parameters:
  • request (rest_framework.request.Request) – Requisição HTTP.

  • uuid (str, optional) – UUID da solicitação. Preenchido automaticamente pelo roteador.

Returns:

Resposta HTTP com o relatório em PDF.

Return type:

django.http.HttpResponse

solicitacoes_codae(request, filtro_aplicado='sem_filtro')[source]

Retorna as solicitações CEMEI visíveis pela CODAE autenticada.

Filtra opcionalmente por diretoria regional e lote via query params diretoria_regional e lote.

Parameters:
  • request (rest_framework.request.Request) – Requisição HTTP.

  • filtro_aplicado (str) – Filtro temporal aplicado. Padrão: constants.SEM_FILTRO.

Returns:

JSON com chave results contendo a lista de solicitações serializadas.

Return type:

rest_framework.response.Response

solicitacoes_diretoria_regional(request, filtro_aplicado='sem_filtro')[source]

Retorna as solicitações CEMEI visíveis pela Diretoria Regional autenticada.

Filtra opcionalmente por lote via query param lote.

Parameters:
  • request (rest_framework.request.Request) – Requisição HTTP.

  • filtro_aplicado (str) – Filtro temporal aplicado. Padrão: constants.SEM_FILTRO.

Returns:

JSON com chave results contendo a lista de solicitações serializadas.

Return type:

rest_framework.response.Response

fixtures

fixtures/factories

Factories para os modelos de Alteração do Tipo de Alimentação CEMEI.

Utiliza factory_boy para criação de instâncias de teste dos modelos relacionados à alteração de cardápio para escolas do tipo CEMEI e CEU CEMEI.

class AlteracaoCardapioCEMEIFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo AlteracaoCardapioCEMEI.

Cria a escola solicitante, o motivo e os campos de rastreio (escola, lote, DRE e terceirizada) via subfactories.

escola = SubFactory(EscolaFactory)
motivo = SubFactory(MotivoAlteracaoCardapioFactory)
rastro_dre = SubFactory(DiretoriaRegionalFactory)
rastro_escola = SubFactory(EscolaFactory)
rastro_lote = SubFactory(LoteFactory)
rastro_terceirizada = SubFactory(EmpresaFactory)
class DataIntervaloAlteracaoCardapioCEMEIFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo DataIntervaloAlteracaoCardapioCEMEI.

Associa automaticamente uma AlteracaoCardapioCEMEI via subfactory.

alteracao_cardapio_cemei = SubFactory(AlteracaoCardapioCEMEIFactory)
class FaixaEtariaSubstituicaoAlimentacaoCEMEICEIFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo FaixaEtariaSubstituicaoAlimentacaoCEMEICEI.

Associa automaticamente uma substituição CEI e uma faixa etária via subfactories.

faixa_etaria = SubFactory(FaixaEtariaFactory)
substituicao_alimentacao = SubFactory(SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEIFactory)
class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEIFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo SubstituicaoAlimentacaoNoPeriodoEscolarCEMEICEI.

Cria a instância com uma alteração CEMEI e um período escolar via subfactories. Suporta adição de tipos de alimentação de origem e destino via parâmetros tipos_alimentacao_de e tipos_alimentacao_para.

alteracao_cardapio = SubFactory(AlteracaoCardapioCEMEIFactory)
periodo_escolar = SubFactory(PeriodoEscolarFactory)
tipos_alimentacao_de = <factory.declarations.PostGeneration object>
tipos_alimentacao_para = <factory.declarations.PostGeneration object>
class SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEIFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo SubstituicaoAlimentacaoNoPeriodoEscolarCEMEIEMEI.

Cria a instância com uma alteração CEMEI e um período escolar via subfactories. Suporta adição de tipos de alimentação de origem e destino via parâmetros tipos_alimentacao_de e tipos_alimentacao_para. Diferentemente do lado CEI, não possui faixas etárias aninhadas.

alteracao_cardapio = SubFactory(AlteracaoCardapioCEMEIFactory)
periodo_escolar = SubFactory(PeriodoEscolarFactory)
tipos_alimentacao_de = <factory.declarations.PostGeneration object>
tipos_alimentacao_para = <factory.declarations.PostGeneration object>

managers

Managers customizados para o modelo AlteracaoCardapioCEMEI.

Cada manager aplica um filtro diferente sobre o queryset padrão, segmentando as alterações de cardápio CEMEI por janela temporal. O filtro considera tanto o campo alterar_dia (solicitação de dia único) quanto data_inicial (solicitação por intervalo), pois o CEMEI suporta ambos os modos.

class AlteracoesCardapioCEMEIDestaSemanaManager(*args, **kwargs)[source]

Bases: Manager

Manager que retorna alterações de cardápio CEMEI com data nos próximos 7 dias.

Considera tanto solicitações de dia único (alterar_dia) quanto solicitações por intervalo (data_inicial).

get_queryset()[source]

Retorna o queryset filtrado pelo intervalo da semana atual.

Returns:

Alterações cujo alterar_dia ou data_inicial está entre hoje e hoje + 7 dias.

Return type:

QuerySet

class AlteracoesCardapioCEMEIDesteMesManager(*args, **kwargs)[source]

Bases: Manager

Manager que retorna alterações de cardápio CEMEI com data nos próximos 31 dias.

Considera tanto solicitações de dia único (alterar_dia) quanto solicitações por intervalo (data_inicial).

get_queryset()[source]

Retorna o queryset filtrado pelo intervalo do mês atual.

Returns:

Alterações cujo alterar_dia ou data_inicial está entre hoje e hoje + 31 dias.

Return type:

QuerySet