alteracao_tipo_alimentacao

admin

class AlteracaoCardapioModelAdmin(model, admin_site)[source]

Bases: ModelAdmin

Admin 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 campo escola apenas 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: Model

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

Type:

AlteracoesCardapioDestaSemanaManager

deste_mes

Manager para solicitações cuja data esteja no mês atual.

Type:

AlteracoesCardapioDesteMesManager

vencidos

Manager para solicitações com período já encerrado.

Type:

AlteracoesCardapioVencidaManager

do_mes_corrente

Manager para solicitações do mês corrente, conforme regra de negócio do módulo.

Type:

AlteracoesCardapioDoMesCorrenteManager

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

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.

Motivos disponíveis:
  • Lanche Emergencial

  • LPR (Lanche por Refeição)

  • RPL (Refeição por Lanche)

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

class Meta[source]

Bases: object

abstract = False
classmethod get_rascunhos_do_usuario(usuario)[source]

Retorna os rascunhos criados por um usuário.

Parameters:

usuario (perfil.Usuario) – Usuário autor dos rascunhos.

Returns:

Conjunto de solicitações em status RASCUNHO criadas pelo usuário informado.

Return type:

django.db.models.QuerySet

models

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

Bases: ExportModelOperationsMixin('alteracao_cardapio'), CriadoEm, CriadoPor, TemChaveExterna, IntervaloDeDia, TemObservacao, FluxoAprovacaoPartindoDaEscola, TemIdentificadorExternoAmigavel, Logs, TemPrioridade, SolicitacaoForaDoPrazo, EhAlteracaoCardapio, TemTerceirizadaConferiuGestaoAlimentacao

Modelo 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.py

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

criado_por: perfil.Usuario | None

Origem: dados_comuns/behaviors.py

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

Origem: dados_comuns/behaviors.py

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

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

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

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

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 DataIntervaloAlteracaoCardapio 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 todas as substituições vinculadas.

Returns:

Soma da quantidade de alunos em todas as SubstituicaoAlimentacaoNoPeriodoEscolar desta alteração, ou None se 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

property periodos_escolares: list[str]

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

Retorna uma lista com os nomes dos períodos escolares que estão sendo afetados nesta solicitação, considerando todas as substituições vinculadas.

Returns:

Lista de nomes dos períodos escolares afetados.

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.

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 SubstituicaoAlimentacaoNoPeriodoEscolar com os campos periodo, alteracao_de e alteracao_para.

Returns:

Lista de dicionários no formato {"periodo": str, "alteracao_de": str, "alteracao_para": str}.

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.

Retorna uma lista com os nomes dos tipos de alimentação que estão sendo substituídos nesta solicitação, considerando todas as substituições vinculadas.

Returns:

Lista de nomes dos tipos de alimentação substituídos.

Return type:

list[str]

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

Bases: CanceladoIndividualmente, CriadoEm, TemData, TemChaveExterna, TemIdentificadorExternoAmigavel

Representa 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.Model

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

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

Descrição: Data e hora em que o cancelamento individual desta data foi registrado.

Pode ser None quando a data ainda não foi cancelada.

cancelado_justificativa: str

Origem: dados_comuns/behaviors.py

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

Descrição: Usuário responsável por cancelar individualmente esta data do intervalo.

Pode ser None quando o cancelamento não foi realizado.

cancelado_por_id: int | None

Origem: django.db.models.ForeignKey

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

Corresponde à chave primária de perfil.Usuario. Pode ser None quando não houver usuário associado ao cancelamento.

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 coberta pela solicitação de alteração do tipo de alimentação.

Cada registro de DataIntervaloAlteracaoCardapio representa um único dia dentro do intervalo da solicitação principal.

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 amigável.

exception NotUpdated

Bases: ObjectNotUpdated, DatabaseError

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

Bases: ExportModelOperationsMixin('motivo_alteracao_cardapio'), Nomeavel, TemChaveExterna, Ativavel

Representa o motivo pelo qual uma AlteracaoCardapio foi 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.py

Descriçã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 AlteracaoCardapio associadas 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 AlteracaoCardapioCEI associadas 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 AlteracaoCardapioCEMEI associadas 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.py

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

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

Bases: ExportModelOperationsMixin('substituicao_alimentacao_periodo_escolar'), TemChaveExterna

Representa uma substituição de tipo de alimentação em um período escolar específico.

Está vinculada a uma AlteracaoCardapio e 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.ForeignKey

Descrição: Solicitação de alteração do tipo de alimentação à qual esta substituição 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 associada a esta substituição.

Corresponde à chave primária de AlteracaoCardapio. 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.

periodo_escolar: escola.PeriodoEscolar

Origem: django.db.models.ForeignKey

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

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

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

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

Descriçã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.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 AlteracaoCardapioSerializer(*args, **kwargs)[source]

Bases: AlteracaoCardapioSerializerBase

Serializa 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 por get_serializer_class() em todas as acoes de leitura e nas actions customizadas que respondem com o objeto serializado, exceto create, update e partial_update.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of AlteracaoCardapio

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

Bases: ModelSerializer

Define 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 de AlteracaoCardapioSerializer.

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

Bases: ModelSerializer

Serializa 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 action solicitacoes_dre.

class Meta[source]

Bases: object

exclude = ('id', 'criado_por', 'escola', 'motivo')
model

alias of AlteracaoCardapio

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

Bases: ModelSerializer

Serializa motivos ativos de alteracao do tipo de alimentacao.

Expoe os campos publicos de MotivoAlteracaoCardapio usados para listar e embutir o motivo selecionado em respostas de solicitacoes.

Viewsets que utilizam este serializer:
  • MotivosAlteracaoCardapioViewSet: uso direto como serializer_class nas acoes list e retrieve.

  • AlteracoesCardapioViewSet: uso indireto, aninhado em AlteracaoCardapioSerializer e retornado nas respostas que usam esse serializer.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of MotivoAlteracaoCardapio

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

Bases: SubstituicoesAlimentacaoNoPeriodoEscolarSerializerBase

Serializa substituicoes completas de alimentacao por periodo escolar.

Complementa o serializer base com os tipos de alimentacao de destino para representar cada item da lista substituicoes de uma alteracao.

Viewsets que utilizam este serializer:
  • Nenhum diretamente.

  • Uso indireto em AlteracoesCardapioViewSet, aninhado em AlteracaoCardapioSerializer nas respostas de leitura.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolar

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

Bases: ModelSerializer

Define 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 de SubstituicoesAlimentacaoNoPeriodoEscolarSerializer aninhado em AlteracaoCardapioSerializer.

serializers_create

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

Bases: AlteracaoCardapioSerializerCreateBase

Serializa 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 por get_serializer_class() nas actions create, update e partial_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 substituicoes e datas_intervalo.

Returns:

Instancia criada com seus relacionamentos.

Return type:

AlteracaoCardapio

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:

True quando 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:

AlteracaoCardapio

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: ModelSerializer

Define 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 de AlteracaoCardapioSerializerCreate nas actions create, update e partial_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 substituicoes ja validada.

Returns:

Instancia criada com as substituicoes vinculadas.

Return type:

AlteracaoCardapio

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:

AlteracaoCardapio

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

Bases: ModelSerializer

Serializa as datas individuais do intervalo na escrita da solicitacao.

Recebe a referencia da alteracao de cardapio por UUID quando necessario e persiste cada DataIntervaloAlteracaoCardapio associada ao pedido.

Viewsets que utilizam este serializer:
  • Nenhum diretamente.

  • Uso indireto em AlteracoesCardapioViewSet, aninhado em AlteracaoCardapioSerializerCreate nas actions create, update e partial_update.

  • Uso indireto em AlteracoesCardapioViewSet, aninhado em AlteracaoCardapioSerializer nas respostas detalhadas de leitura.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of DataIntervaloAlteracaoCardapio

create(validated_data)[source]

Cria um registro de data individual do intervalo da solicitacao.

Parameters:

validated_data (dict) – Dados validados da data do intervalo.

Returns:

Instancia criada.

Return type:

DataIntervaloAlteracaoCardapio

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

Bases: SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreateBase

Serializa 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 em AlteracaoCardapioSerializerCreate nas actions create, update e partial_update.

class Meta[source]

Bases: object

exclude = ('id',)
model

alias of SubstituicaoAlimentacaoNoPeriodoEscolar

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_de e tipos_alimentacao_para.

Returns:

Instancia criada com os tipos de alimentacao de origem e destino vinculados.

Return type:

SubstituicaoAlimentacaoNoPeriodoEscolar

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

Bases: ModelSerializer

Define 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 de SubstituicoesAlimentacaoNoPeriodoEscolarSerializerCreate aninhado em AlteracaoCardapioSerializerCreate nas actions create, update e partial_update.

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:

True quando 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:

True quando 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.

viewsets

class AlteracoesCardapioViewSet(**kwargs)[source]

Bases: DataSolicitacaoContextMixin, ModelViewSet

codae_autoriza(request, uuid=None)[source]
Autoriza a solicitação de Alteração de Tipo de Alimentação pela CODAE.
  • caso a solicitação estiver dentro do prazo de 5 dias úteis, pode ser autorizada diretamente após DRE validar.

  • caso contrário (data < 5 dias úteis), é autorizada após confirmação do atendimento pela empresa.

  • permissão: CODAE Gestão de Alimentação.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Pode conter justificativa no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a autorização, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

codae_nega_solicitacao(request, uuid=None)[source]
Registra a negação da solicitação de Alteração de Tipo de Alimentação pela CODAE, quando está com status DRE_VALIDADO:
  • passa para o status CODAE_NEGOU_PEDIDO, negando o pedido da Escola; fim de fluxo.

  • permissão: CODAE Gestão de Alimentação.

Se o status atual for DRE_VALIDADO, aplica codae_nega; caso contrário (ex: após questionamento à empresa), aplica codae_nega_questionamento.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Deve conter justificativa no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a transição, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

codae_questiona_pedido(request, uuid=None)[source]
Registra o questionamento da CODAE sobre a solicitação de Alteração de Tipo de Alimentação.
  • a solicitação é questionada se chegar na CODAE entre 2 e 5 dias úteis antes do atendimento.

  • a solicitação deve estar com status DRE_VALIDADO para ser questionada.

  • passa para o status CODAE_QUESTIONADO, ficando pendente da resposta da empresa

  • permissão: CODAE Gestão de Alimentação.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Deve conter observacao_questionamento_codae no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após o questionamento, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

destroy(request, *args, **kwargs)[source]
Remove a Alteração do Tipo de Alimentação se o status permitir exclusão.
  • somente solicitações com status RASCUNHO podem ser excluídas.

  • permissão: Escola terceirizada.

Parameters:
  • request (Request) – Objeto da requisição HTTP.

  • *args – Argumentos posicionais adicionais.

  • **kwargs – Argumentos nomeados adicionais, incluindo uuid do objeto.

Returns:

Resposta vazia com status 204 em caso de sucesso, ou erro 403

quando o status não permite exclusão.

Return type:

Response

diretoria_regional_valida(request, uuid=None)[source]
Valida a solicitação de Alteração do Tipo de Alimentação pela Diretoria Regional com status DRE_A_VALIDAR:
  • passa para o status DRE_VALIDADO, ficando disponível para a CODAE autorizar, negar ou pedir questionamento à empresa do lote.

  • permissão: Diretoria Regional.

Parameters:
  • request (Request) – Objeto da requisição HTTP contendo o usuário autenticado.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a validação, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

dre_nao_valida_solicitacao(request, uuid=None)[source]
Registra a não validação da solicitação de Alteração de Tipo de Alimentação pela DRE com status DRE_A_VALIDAR:
  • passa para o status DRE_NAO_VALIDOU_PEDIDO_ESCOLA, não validando o pedido da Escola; fim de fluxo.

  • permissão: Diretoria Regional.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Deve conter justificativa no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a transição, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

escola_cancela_pedido(request, uuid=None)[source]
Cancela total ou parcialmente a solicitação de Alteração do Tipo de Alimentação pela escola.
  • permissão: Escola terceirizada.

Cancela totalmente quando não há datas de intervalo, quando data_inicial == data_final, ou quando todas as datas do intervalo serão canceladas. Caso contrário, realiza cancelamento parcial e envia notificação por e-mail.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Deve conter datas (list[str]) e justificativa no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após o cancelamento, ou erro 400

em caso de transição inválida ou solicitação já cancelada.

Return type:

Response

Raises:
  • InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

  • AssertionError – Quando a solicitação já está cancelada.

get_permissions()[source]

Retorna a lista de permissões necessárias para a ação atual.

  • Para a ação list: requer UsuarioEscolaTercTotal.

  • Para as ações retrieve e update: requer autenticação e PermissaoParaRecuperarObjeto.

  • Para as ações create e destroy: requer UsuarioEscolaTercTotal.

Returns:

Lista de instâncias de classes de permissão configuradas para a ação atual.

Return type:

list

get_serializer_class()[source]

Retorna a classe de serializer adequada para a ação atual.

  • Para as ações create, update e partial_update: utiliza AlteracaoCardapioSerializerCreate.

  • Para as demais ações: utiliza AlteracaoCardapioSerializer.

Returns:

Classe de serializer a ser utilizada na ação corrente.

Return type:

type

inicio_de_solicitacao(request, uuid=None)[source]
Inicia o fluxo de uma solicitação de Alteração do Tipo de Alimentação pela escola:
  • sai do status RASCUNHO e passa para DRE_A_VALIDAR, ficando disponível para validação da DRE.

  • somente é permitido iniciar o fluxo se a solicitação estiver em RASCUNHO.

  • permissão: Escola terceirizada.

Parameters:
  • request (Request) – Objeto da requisição HTTP contendo o usuário autenticado.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a transição de estado, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

lookup_field = 'uuid'
minhas_solicitacoes(request)[source]
Retorna as solicitações de Alteração de Tipo de Alimentação do usuário logado que estão em RASCUNHO.
  • permissão: Escola terceirizada.

Os resultados são paginados.

Parameters:

request (Request) – Objeto da requisição HTTP contendo o usuário autenticado.

Returns:

Resposta paginada com a lista de alterações de cardápio em rascunho do usuário.

Return type:

Response

permission_classes = (<class 'rest_framework.permissions.IsAuthenticated'>,)
queryset = <QuerySet de AlteracaoCardapio>

Retorna objetos de Alteração do Tipo de Alimentação.

relatorio(request, uuid=None)[source]

Gera e retorna o relatório da Alteração do Tipo de Alimentação em formato PDF. - permissão: qualquer usuário autenticado com acesso à solicitação.

Parameters:
  • request (Request) – Objeto da requisição HTTP.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Resposta contendo o PDF do relatório gerado.

Return type:

HttpResponse

solicitacoes_codae(request, filtro_aplicado='sem_filtro')[source]
Retorna as todas solicitações de Alteração de Tipo de Alimentação:
  • com status DRE_VALIDADO, para a CODAE autorizar, negar ou pedir questionamento à empresa do lote;

  • utilizado em tela para dividir as solicitações por prioridade (próximas ao vencimento, prazo limite, prazo regular).

  • permissão: CODAE Gestão de Alimentação.

Filtra opcionalmente por diretoria regional e/ou lote via query params.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Aceita diretoria_regional e lote como query params opcionais.

  • filtro_aplicado (str) – Filtro de status aplicado às solicitações. Padrão: constants.SEM_FILTRO.

Returns:

Lista serializada das alterações de cardápio encontradas.

Return type:

Response

solicitacoes_diretoria_regional(request, filtro_aplicado='sem_filtro')[source]
Retorna as solicitações de Alteração do Tipo de Alimentação das escolas da diretoria regional.
  • consolida em uma única pesquisa as buscas por prioridade.

  • filtra opcionalmente por lote via query param.

  • permissão: Diretoria Regional.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Aceita lote como query param opcional.

  • filtro_aplicado (str) – Filtro de status aplicado às solicitações. Padrão: "sem_filtro".

Returns:

Lista serializada das alterações de cardápio encontradas para a diretoria regional.

Return type:

Response

solicitacoes_dre(request, filtro_aplicado='sem_filtro')[source]
Retorna as solicitações de Alteração do Tipo de Alimentação das escolas vinculadas à DRE do usuário:
  • com status DRE_A_VALIDAR, para a DRE validar ou não validar;

  • utilizado em tela para dividir as solicitações por prioridade (próximas ao vencimento, prazo limite, prazo regular).

  • permissão: Diretoria Regional.

Filtra opcionalmente por lote via query param.

Parameters:
  • request (Request) – Objeto da requisição HTTP contendo o usuário autenticado.

  • filtro_aplicado (str) – Filtro de status aplicado às solicitações. Padrão: constants.SEM_FILTRO.

Returns:

Lista serializada das alterações de cardápio encontradas para a DRE.

Return type:

Response

terceirizada_marca_inclusao_como_conferida(request, uuid=None)[source]
Marca a Alteração do Tipo de Alimentação como conferida pela empresa terceirizada.
  • ou seja, a empresa visualizou a solicitação e está ciente da alteração solicitada.

  • permissão: Empresa terceirizada.

Parameters:
  • request (Request) – Objeto da requisição HTTP contendo o usuário autenticado.

  • uuid (str, optional) – UUID da instância de AlteracaoTipoAlimentacao. Padrão: None.

Returns:

Dados serializados da alteração após a marcação, ou erro 400 em caso de falha.

Return type:

Response

terceirizada_responde_questionamento(request, uuid=None)[source]
Registra a resposta da terceirizada ao questionamento da CODAE, da solicitação com status CODAE_QUESTIONADO.
  • a solicitação vai para o status TERCEIRIZADA_RESPONDEU_QUESTIONAMENTO;

  • a resposta pode ser sim ou não, e deve conter uma justificativa. - caso a resposta seja sim, CODAE pode autorizar a solicitação normalmente. - caso a resposta seja não, CODAE deve negar a solicitação, passando para o status CODAE_NEGOU_PEDIDO.

  • permissão: Empresa terceirizada.

Parameters:
  • request (Request) – Objeto da requisição HTTP. Deve conter justificativa e resposta_sim_nao no body.

  • uuid (str, optional) – UUID da instância de AlteracaoCardapio. Padrão: None.

Returns:

Dados serializados da alteração após a resposta, ou erro 400

em caso de transição inválida.

Return type:

Response

Raises:

InvalidTransitionError – Quando a transição de estado não é permitida pelo workflow.

valida_datas(obj, datas)[source]
Valida cada data individualmente, verificando se esta pode ser cancelada (se está dentro do intervalo de 48 úteis após hoje).
  • função auxiliar para o cancelamento parcial da solicitação pela escola.

Parameters:
  • obj (AlteracaoCardapio) – Instância da alteração do tipo de alimentação a ser validada.

  • datas (list[str]) – Lista de datas no formato "%Y-%m-%d" a serem verificadas.

Raises:

Exception – Quando alguma data não permite cancelamento conforme a regra de negócio.

Return type:

None

class MotivosAlteracaoCardapioViewSet(**kwargs)[source]

Bases: ReadOnlyModelViewSet

get_queryset()[source]
Retorna o queryset de MotivoAlteracaoCardapio que estão ativos.
  • exclui o motivo “Lanche Emergencial” para usuários vinculados a escolas do tipo CEI.

  • permissão: qualquer usuário autenticado.

Returns:

QuerySet de MotivoAlteracaoCardapio ativos, ajustado conforme o perfil

da instituição do usuário.

Return type:

QuerySet

lookup_field = 'uuid'
queryset = <QuerySet de MotivoAlteracaoCardapio>
serializer_class

alias of MotivoAlteracaoCardapioSerializer

fixtures

fixtures/factories

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

Utiliza factory_boy para criação de instâncias de teste dos modelos relacionados à alteração de cardápio escolar.

class AlteracaoCardapioFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo AlteracaoCardapio.

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 DataIntervaloAlteracaoCardapioFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo DataIntervaloAlteracaoCardapio.

Associa automaticamente uma AlteracaoCardapio via subfactory.

alteracao_cardapio = SubFactory(AlteracaoCardapioFactory)
class MotivoAlteracaoCardapioFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo MotivoAlteracaoCardapio.

Gera instâncias com nome único usando sequência + Faker.

nome = <factory.declarations.Sequence object>
class SubstituicaoAlimentacaoNoPeriodoEscolarFactory(**kwargs)[source]

Bases: DjangoModelFactory

Factory para o modelo SubstituicaoAlimentacaoNoPeriodoEscolar.

Cria a instância com uma alteração de cardápio 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(AlteracaoCardapioFactory)
periodo_escolar = SubFactory(PeriodoEscolarFactory)
tipos_alimentacao_de = <factory.declarations.PostGeneration object>
tipos_alimentacao_para = <factory.declarations.PostGeneration object>

managers

Managers customizados para o modelo AlteracaoCardapio.

Cada manager aplica um filtro diferente sobre o queryset padrão, segmentando as alterações de cardápio por janela temporal ou status do fluxo de trabalho.

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

Bases: Manager

Manager que retorna alterações de cardápio com início nos próximos 7 dias.

get_queryset()[source]

Retorna o queryset filtrado pelo intervalo da semana atual.

Returns:

Alterações cuja data_inicial está entre hoje e hoje + 7 dias.

Return type:

QuerySet

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

Bases: Manager

Manager que retorna alterações de cardápio com início nos próximos 31 dias.

get_queryset()[source]

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

Returns:

Alterações cuja data_inicial está entre hoje e hoje + 31 dias.

Return type:

QuerySet

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

Bases: Manager

Manager que retorna alterações de cardápio do mês corrente em status ativo.

Filtra pelo primeiro e último dia do mês atual, incluindo apenas alterações cujo status indica que ainda estão em andamento no fluxo de trabalho.

get_queryset()[source]

Retorna o queryset das alterações do mês corrente.

Returns:

Alterações com data_inicial dentro do mês atual e em status ativo (DRE_A_VALIDAR, DRE_VALIDADO, CODAE_AUTORIZADO, etc.).

Return type:

QuerySet

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

Bases: Manager

Manager que retorna alterações de cardápio vencidas e ainda em status aberto.

Considera vencidas as alterações com data_inicial anterior a hoje e que ainda estejam nos status RASCUNHO, DRE_A_VALIDAR ou DRE_PEDIU_ESCOLA_REVISAR.

get_queryset()[source]

Retorna o queryset das alterações vencidas.

Returns:

Alterações com data_inicial passada e status pendente.

Return type:

QuerySet