models
FabricanteFichaTecnica
Armazena os dados do fabricante (e do envasador/distribuidor) específicos
de uma ficha técnica. Diferente do cadastro global de
Fabricante, estes dados são
“congelados” na ficha no momento do cadastro, podendo divergir do
cadastro mestre (CNPJ, endereço, contato, etc.).
A mesma entidade é usada tanto para o campo fabricante quanto para o
campo envasador_distribuidor da ficha (duas instâncias distintas).
- class FabricanteFichaTecnica(*args, **kwargs)[source]
Bases:
ModeloBaseModelo para armazenar informações do fabricante específicas para uma ficha técnica.
- id: int
Origem:
dados_comuns/behaviors.py(ModeloBase)Descrição: Chave primária inteira criada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.py(TemChaveExterna)Descrição: Identificador externo único do registro de fabricante da ficha.
- fabricante: produto.Fabricante | None
Descrição: Referência opcional ao cadastro global de fabricante (
on_delete=SET_NULL). Quando presente, o nome exibido vem deste cadastro; os demais dados (endereço, contato) ficam neste modelo.
- cnpj: str
Descrição: CNPJ do fabricante/envasador (até 14 dígitos, mínimo 14 com
MinLengthValidator). Aceita apenas números (sem máscara).
- cep: str
Descrição: CEP (8 dígitos, sem máscara).
- endereco: str
Descrição: Logradouro do endereço.
- numero: str
Descrição: Número do endereço.
- complemento: str
Descrição: Complemento do endereço (ex.: bloco, andar, sala).
- bairro: str
Descrição: Bairro.
- cidade: str
Descrição: Cidade.
- estado: str
Descrição: Estado (UF). Utilizado no filtro do admin por estado.
- email: str
Descrição: E-mail de contato (
EmailField).
- telefone: str
Descrição: Telefone de contato (até 13 caracteres, mínimo 8 com
MinLengthValidator).
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(CriadoEm)Descrição: Timestamp preenchido automaticamente na criação do registro.
- alterado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(TemAlteradoEm)Descrição: Timestamp preenchido automaticamente na última alteração do registro.
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError
FichaTecnicaDoProduto
Modelo central do submódulo. Representa a ficha técnica de um produto alimentício: especificações do produto, fabricante/envasador, tabela nutricional, conservação, transporte, embalagens, rotulagem, responsável técnico e modo de preparo.
O número da ficha é gerado automaticamente após a primeira gravação no
formato FTXXX (XXX é o PK preenchido com zeros), via signal
post_save.
A ficha possui um workflow de aprovação
(FichaTecnicaDoProdutoWorkflow) com os estados:
RASCUNHO(Rascunho) — estado inicial; cadastro parcial pelo fornecedor.ENVIADA_PARA_ANALISE(Enviada para Análise) — enviada pelo fornecedor para a GPCODAE (transiçãoinicia_fluxo).APROVADA(Aprovada) — aprovada pela GPCODAE (transiçãogpcodae_aprova).ENVIADA_PARA_CORRECAO(Enviada para Correção) — devolvida ao fornecedor com correções (transiçãogpcodae_envia_para_correcao).
O fluxo também permite: fornecedor_corrige (de ENVIADA_PARA_CORRECAO
de volta para ENVIADA_PARA_ANALISE) e fornecedor_atualiza (de
APROVADA para ENVIADA_PARA_ANALISE — atualização de uma ficha já
aprovada). Cada transição gera um LogSolicitacoesUsuario do tipo
FICHA_TECNICA_DO_PRODUTO e o envio para análise dispara e-mail de
notificação.
Regras de negócio por categoria (aplicadas nos serializadores/validators):
FLV (hortifrutigranjeiros): exige
organicoeespecie_variedade.Perecíveis: exige
organico,prazo_validade_descongelamento,temperatura_congelamento,temperatura_veiculo,condicoes_de_transporteevariacao_percentual.Não perecíveis: exige
organicoeproduto_eh_liquido.
Campos dependentes obrigatórios:
organico = Trueexigemecanismo_controle(CERTIFICACAO/OPAC/OCS).alergenicos = Trueexigeingredientes_alergenicos.lactose = Trueexigelactose_detalhe.produto_eh_liquido = Trueexigevolume_embalagem_primariaeunidade_medida_volume_primaria.
As declarações de conformidade com o Anexo I do Edital
(embalagens_de_acordo_com_anexo e rotulo_legivel) devem ser
marcadas como True na criação (validadas no serializador de criação).
- class FichaTecnicaDoProduto(id, criado_em, alterado_em, uuid, status, numero, produto, marca, categoria, tipo_entrega, programa, pregao_chamada_publica, empresa, fabricante, envasador_distribuidor, prazo_validade, numero_registro, organico, mecanismo_controle, especie_variedade, componentes_produto, alergenicos, ingredientes_alergenicos, gluten, lactose, lactose_detalhe, porcao, unidade_medida_porcao, valor_unidade_caseira, unidade_medida_caseira, prazo_validade_descongelamento, condicoes_de_conservacao, temperatura_congelamento, temperatura_veiculo, condicoes_de_transporte, embalagem_primaria, embalagem_secundaria, embalagens_de_acordo_com_anexo, material_embalagem_primaria, produto_eh_liquido, volume_embalagem_primaria, unidade_medida_volume_primaria, peso_liquido_embalagem_primaria, unidade_medida_primaria, peso_liquido_embalagem_secundaria, unidade_medida_secundaria, peso_embalagem_primaria_vazia, unidade_medida_primaria_vazia, peso_embalagem_secundaria_vazia, unidade_medida_secundaria_vazia, variacao_percentual, sistema_vedacao_embalagem_secundaria, rotulo_legivel, nome_responsavel_tecnico, habilitacao, numero_registro_orgao, arquivo, modo_de_preparo, informacoes_adicionais)[source]
Bases:
ModeloBase,TemIdentificadorExternoAmigavel,Logs,FluxoFichaTecnicaDoProduto- id: int
Origem:
dados_comuns/behaviors.py(ModeloBase)Descrição: Chave primária inteira criada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.py(TemChaveExterna)Descrição: Identificador externo único da ficha, usado em integrações e endpoints.
- id_externo: str
Origem:
dados_comuns/behaviors.py(TemIdentificadorExternoAmigavel)Descrição: Identificador externo amigável composto pelos 5 primeiros caracteres maiúsculos do UUID.
- numero: str
Descrição: Número da ficha técnica, único, gerado automaticamente após a criação no formato
FTXXX(XXX= PK com zeros à esquerda).
- produto: produto.NomeDeProdutoEdital
Descrição: Produto (nome do produto do edital) ao qual a ficha se refere. Obrigatório com
on_delete=PROTECT.
- marca: produto.Marca | None
Descrição: Marca do produto (opcional,
on_delete=PROTECT).
- categoria: str
Descrição: Categoria do produto. Valores possíveis:
PERECIVEIS(Perecíveis),NAO_PERECIVEIS(Não Perecíveis) eFLV. Define o conjunto de campos obrigatórios da ficha.
- tipo_entrega: str
Descrição: Tipo de entrega. Valores possíveis:
ARMAZEM(Armazém, default) ePONTO_A_PONTO(Ponto a Ponto). FichasFLV+PONTO_A_PONTOtêm regras de análise simplificadas (não exigem os blocos de informações nutricionais, conservação, armazenamento, embalagem/ rotulagem e modo de preparo).
- programa: str
Descrição: Programa de alimentação. Valores possíveis:
LEVE_LEITE(Leve Leite) eALIMENTACAO_ESCOLAR(Alimentação Escolar, default).
- pregao_chamada_publica: str
Descrição: Número do pregão eletrônico / chamada pública ao qual o produto está vinculado.
- empresa: terceirizada.Terceirizada | None
Descrição: Empresa fornecedora responsável pela ficha (
on_delete=CASCADE). Utilizada para filtrar as fichas visíveis para usuários fornecedores.
- fabricante: FabricanteFichaTecnica | None
Descrição: Dados do fabricante específicos da ficha (
on_delete=CASCADE).
- envasador_distribuidor: FabricanteFichaTecnica | None
Descrição: Dados do envasador/distribuidor específicos da ficha (
on_delete=CASCADE).
- prazo_validade: str
Descrição: Prazo de validade do produto.
- numero_registro: str
Descrição: Número do registro do rótulo.
- organico: bool | None
Descrição: Indica se o produto é orgânico. Quando
True, exigemecanismo_controle.
- mecanismo_controle: str
Descrição: Mecanismo de controle de produto orgânico. Valores possíveis:
CERTIFICACAO(Certificação),OPACeOCS. Obrigatório quandoorganico = True.
- especie_variedade: str
Descrição: Espécie ou variedade cultivada. Obrigatório para fichas
FLV.
- componentes_produto: str
Descrição: Componentes do produto (texto).
- alergenicos: bool | None
Descrição: Indica se o produto pode conter alergênicos. Quando
True, exigeingredientes_alergenicos.
- ingredientes_alergenicos: str
Descrição: Ingredientes/aditivos alergênicos. Obrigatório quando
alergenicos = True.
- gluten: bool | None
Descrição: Indica se o produto contém glúten.
- lactose: bool | None
Descrição: Indica se o produto contém lactose. Quando
True, exigelactose_detalhe.
- lactose_detalhe: str
Descrição: Detalhamento sobre a lactose. Obrigatório quando
lactose = True.
- porcao: str | None
Descrição: Porção (quantidade de referência para a tabela nutricional).
- unidade_medida_porcao: base.UnidadeMedida | None
Descrição: Unidade de medida da porção (ex.: g, ml).
- valor_unidade_caseira: str | None
Descrição: Medida caseira correspondente à porção (ex.: “1 colher de sopa”).
- unidade_medida_caseira: str
Descrição: Unidade de medida caseira (texto livre).
- informacoes_nutricionais: django.db.models.QuerySet[InformacoesNutricionaisFichaTecnica]
Descrição: Relação reversa 1:N com
InformacoesNutricionaisFichaTecnica. Lista os itens da tabela nutricional da ficha (cada um com quantidade por 100 g, por porção e valor diário).
- prazo_validade_descongelamento: str
Descrição: Prazo de validade após o descongelamento, mantido sob refrigeração. Obrigatório para produtos perecíveis.
- condicoes_de_conservacao: str
Descrição: Condições de conservação e prazo máximo para consumo após a abertura da embalagem primária.
- temperatura_congelamento: float | None
Descrição: Temperatura de congelamento do produto. Obrigatório para perecíveis.
- temperatura_veiculo: float | None
Descrição: Temperatura interna do veículo para transporte. Obrigatório para perecíveis.
- condicoes_de_transporte: str
Descrição: Condições de transporte do produto. Obrigatório para perecíveis.
- embalagem_primaria: str
Descrição: Descrição da embalagem primária do produto.
- embalagem_secundaria: str
Descrição: Descrição da embalagem secundária do produto.
- embalagens_de_acordo_com_anexo: bool | None
Descrição: Declaração de que as embalagens primária e secundária estão de acordo com as especificações do Anexo I do Edital. Deve ser marcada como
Truena criação (validação no serializador).
- material_embalagem_primaria: str
Descrição: Material da embalagem primária.
- produto_eh_liquido: bool | None
Descrição: Indica se o produto é líquido. Quando
True, exigevolume_embalagem_primariaeunidade_medida_volume_primaria. Obrigatório para não perecíveis.
- volume_embalagem_primaria: float | None
Descrição: Volume do produto na embalagem primária.
- unidade_medida_volume_primaria: base.UnidadeMedida | None
Descrição: Unidade de medida do volume da embalagem primária.
- peso_liquido_embalagem_primaria: float | None
Descrição: Peso líquido do produto na embalagem primária.
- unidade_medida_primaria: base.UnidadeMedida | None
Descrição: Unidade de medida do peso líquido da embalagem primária.
- peso_liquido_embalagem_secundaria: float | None
Descrição: Peso líquido do produto na embalagem secundária.
- unidade_medida_secundaria: base.UnidadeMedida | None
Descrição: Unidade de medida do peso líquido da embalagem secundária.
- peso_embalagem_primaria_vazia: float | None
Descrição: Peso da embalagem primária vazia.
- unidade_medida_primaria_vazia: base.UnidadeMedida | None
Descrição: Unidade de medida do peso da embalagem primária vazia.
- peso_embalagem_secundaria_vazia: float | None
Descrição: Peso da embalagem secundária vazia.
- unidade_medida_secundaria_vazia: base.UnidadeMedida | None
Descrição: Unidade de medida do peso da embalagem secundária vazia.
- variacao_percentual: float | None
Descrição: Variação percentual aceita nos pesos. Obrigatório para perecíveis.
- sistema_vedacao_embalagem_secundaria: str
Descrição: Sistema de vedação da embalagem secundária.
- rotulo_legivel: bool | None
Descrição: Declaração de que o rótulo da embalagem primária (e secundária, se for o caso) conterá, de forma legível e indelével, todas as informações solicitadas no Anexo I do Edital. Deve ser marcada como
Truena criação.
- nome_responsavel_tecnico: str
Descrição: Nome completo do responsável técnico.
- habilitacao: str
Descrição: Habilitação do responsável técnico.
- numero_registro_orgao: str
Descrição: Número do registro em órgão competente do responsável técnico.
- arquivo: django.db.models.fields.files.FieldFile | None
Descrição: Arquivo PDF da ficha técnica (
upload_to="fichas_tecnicas"), com validação de extensão PDF e tamanho máximo de 10 MB. Recebido como base64 pela API e convertido paraContentFileno helper de criação.
- modo_de_preparo: str
Descrição: Modo de preparo do produto.
- informacoes_adicionais: str
Descrição: Informações adicionais da ficha.
- status: str
Origem:
dados_comuns/fluxo_status.py(FichaTecnicaDoProdutoWorkflow)Descrição: Status atual do workflow. Estados possíveis:
RASCUNHO,ENVIADA_PARA_ANALISE,APROVADAeENVIADA_PARA_CORRECAO.
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(CriadoEm)Descrição: Timestamp preenchido automaticamente na criação da ficha.
- alterado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(TemAlteradoEm)Descrição: Timestamp preenchido automaticamente na última alteração da ficha.
- logs: list[LogSolicitacoesUsuario]
Origem:
dados_comuns/behaviors.py(Logs)Descrição: Lista dos registros de log de transições de status da ficha, ordenados por
criado_em.
- log_mais_recente: LogSolicitacoesUsuario | None
Origem:
dados_comuns/behaviors.py(Logs)Descrição: Último registro de log de transição de status da ficha. Usado nos serializadores de painel/detalhe para exibir a data/hora da última movimentação.
- analises: django.db.models.QuerySet[AnaliseFichaTecnica]
Descrição: Relação reversa 1:N com
AnaliseFichaTecnica. Lista as análises da GPCODAE realizadas sobre a ficha, ordenáveis porcriado_em(a análise vigente é a última).
- cronograma: django.db.models.QuerySet[Cronograma]
Descrição: Relação reversa com
Cronogramavia o campoCronograma.ficha_tecnica(definido semrelated_name).cronogramaé o nome de consulta (query name) da relação — usado em filtros ORM comocronograma__isnull(endpointlista-simples-sem-cronograma). O accessor padrão de instância écronograma_set.
- layout_embalagem: layout_embalagem.LayoutDeEmbalagem | None
Descrição: Relação reversa 1:1 com
LayoutDeEmbalagem. Layout de embalagem vinculado à ficha, quando existir.
- questoes_conferencia: recebimento.QuestoesPorProduto | None
Descrição: Relação reversa 1:1 com
QuestoesPorProduto. Questões de conferência de qualidade vinculadas à ficha, quando existirem.
- ponto_a_ponto: bool
Descrição: Propriedade que indica se a ficha é do tipo Ponto a Ponto (FLV). Retorna
Truequandotipo_entrega = PONTO_A_PONTO. Usada nos serializadores e na lógica de análise: fichas FLV ponto a ponto não exigem os blocos de informações nutricionais, conservação, armazenamento, embalagem/rotulagem e modo de preparo.
- salvar_log_transicao: Callable[source]
Descrição: Registra no log uma transição de status da ficha, criando um
LogSolicitacoesUsuariocom o tipoFICHA_TECNICA_DO_PRODUTO.
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError
InformacoesNutricionaisFichaTecnica
Item da tabela nutricional de uma ficha técnica. Vincula uma
InformacaoNutricional
(ex.: “Valor energético”, “Carboidratos”) aos valores declarados por
100 g, por porção e o valor diário (percentual).
- class InformacoesNutricionaisFichaTecnica(id, uuid, ficha_tecnica, informacao_nutricional, quantidade_por_100g, quantidade_porcao, valor_diario)[source]
Bases:
TemChaveExterna- id: int
Descrição: Chave primária inteira criada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.py(TemChaveExterna)Descrição: Identificador externo único do item nutricional.
- ficha_tecnica: FichaTecnicaDoProduto
Descrição: Ficha técnica à qual o item pertence (
on_delete=CASCADE).
- informacao_nutricional: produto.InformacaoNutricional
Descrição: Informação nutricional de referência (nome do nutriente/informação), com
on_delete=DO_NOTHING.
- quantidade_por_100g: str
Descrição: Quantidade do nutriente por 100 g (texto, ex.: “12,5 g”).
- quantidade_porcao: str
Descrição: Quantidade do nutriente por porção (texto).
- valor_diario: str
Descrição: Percentual do valor diário de referência (texto, ex.: “5%”).
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError
AnaliseFichaTecnica
Registro da análise da ficha técnica pela GPCODAE. A análise é dividida
em blocos (“collapses”) de conferência, cada um com um campo
*_conferido (bool) e um campo *_correcoes (texto com as
observações/correções exigidas quando o bloco não foi aprovado).
Blocos de conferência:
fabricante_envasador— fabricante e envasador/distribuidor.detalhes_produto— detalhes do produto (validade, orgânico, componentes, alergênicos, glúten, lactose).informacoes_nutricionais— tabela nutricional.conservacao— conservação e descongelamento (perecíveis).temperatura_e_transporte— temperaturas e transporte (perecíveis).armazenamento— embalagens (primária/secundária).embalagem_e_rotulagem— embalagens, pesos, vedações e rotulagem.responsavel_tecnico— responsável técnico e arquivo.modo_preparo— modo de preparo.outras_informacoes— informações adicionais (só booleano).
Regras de negócio da análise:
A propriedade
aprovadacomputa se todos os blocos necessários foram conferidos sem correções. Para fichasFLVponto a ponto, os blocos de informações nutricionais, conservação, armazenamento, embalagem/rotulagem e modo de preparo são ignorados.Ao salvar uma análise com
aprovada = Truea ficha é aprovada (gpcodae_aprova); caso contrário é enviada para correção (gpcodae_envia_para_correcao).Na análise, um bloco marcado
*_conferido = Falseexige*_correcoespreenchido; um blocoTrueexige*_correcoesvazio.
- class AnaliseFichaTecnica(id, criado_em, alterado_em, uuid, criado_por, ficha_tecnica, fabricante_envasador_conferido, fabricante_envasador_correcoes, detalhes_produto_conferido, detalhes_produto_correcoes, informacoes_nutricionais_conferido, informacoes_nutricionais_correcoes, conservacao_conferido, conservacao_correcoes, temperatura_e_transporte_conferido, temperatura_e_transporte_correcoes, armazenamento_conferido, armazenamento_correcoes, embalagem_e_rotulagem_conferido, embalagem_e_rotulagem_correcoes, responsavel_tecnico_conferido, responsavel_tecnico_correcoes, modo_preparo_conferido, modo_preparo_correcoes, outras_informacoes_conferido)[source]
Bases:
ModeloBase,CriadoPor- id: int
Origem:
dados_comuns/behaviors.py(ModeloBase)Descrição: Chave primária inteira criada automaticamente pelo Django.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.py(TemChaveExterna)Descrição: Identificador externo único da análise.
- ficha_tecnica: FichaTecnicaDoProduto
Descrição: Ficha técnica analisada (
on_delete=CASCADE). Uma ficha pode ter várias análises ao longo do tempo (a vigente é a última porcriado_em).
- fabricante_envasador_conferido: bool | None
Descrição: Bloco “Fabricante/Envasador” conferido (sem correções pendentes).
- fabricante_envasador_correcoes: str
Descrição: Correções exigidas no bloco “Fabricante/Envasador”.
- detalhes_produto_conferido: bool | None
Descrição: Bloco “Detalhes do Produto” conferido.
- detalhes_produto_correcoes: str
Descrição: Correções exigidas no bloco “Detalhes do Produto”.
- informacoes_nutricionais_conferido: bool | None
Descrição: Bloco “Informações Nutricionais” conferido. Ignorado para fichas FLV ponto a ponto.
- informacoes_nutricionais_correcoes: str
Descrição: Correções exigidas no bloco “Informações Nutricionais”.
- conservacao_conferido: bool | None
Descrição: Bloco “Conservação” conferido (perecíveis).
- conservacao_correcoes: str
Descrição: Correções exigidas no bloco “Conservação”.
- temperatura_e_transporte_conferido: bool | None
Descrição: Bloco “Temperatura e Transporte” conferido (perecíveis). Aceita
Nonena validação de aprovação.
- temperatura_e_transporte_correcoes: str
Descrição: Correções exigidas no bloco “Temperatura e Transporte”.
- armazenamento_conferido: bool | None
Descrição: Bloco “Armazenamento” conferido.
- armazenamento_correcoes: str
Descrição: Correções exigidas no bloco “Armazenamento”.
- embalagem_e_rotulagem_conferido: bool | None
Descrição: Bloco “Embalagem e Rotulagem” conferido.
- embalagem_e_rotulagem_correcoes: str
Descrição: Correções exigidas no bloco “Embalagem e Rotulagem”.
- responsavel_tecnico_conferido: bool | None
Descrição: Bloco “Responsável Técnico” conferido.
- responsavel_tecnico_correcoes: str
Descrição: Correções exigidas no bloco “Responsável Técnico”.
- modo_preparo_conferido: bool | None
Descrição: Bloco “Modo de Preparo” conferido.
- modo_preparo_correcoes: str
Descrição: Correções exigidas no bloco “Modo de Preparo”.
- outras_informacoes_conferido: bool | None
Descrição: Bloco “Outras Informações” conferido. Não possui campo de correções; é sempre exigido
Truepara a aprovação.
- criado_por: perfil.Usuario | None
Origem:
dados_comuns/behaviors.py(CriadoPor)Descrição: Usuário que realizou a análise.
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(CriadoEm)Descrição: Timestamp preenchido automaticamente na criação da análise.
- alterado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(TemAlteradoEm)Descrição: Timestamp preenchido automaticamente na última alteração da análise.
- aprovada: bool
Descrição: Propriedade que indica se a análise aprovou a ficha. Todos os blocos exigidos devem estar
Truee sem correções, com exceção detemperatura_e_transporte(aceitaNone). Para fichas FLV ponto a ponto, os blocos de informações nutricionais, conservação, armazenamento, embalagem/rotulagem e modo de preparo são ignorados.
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError