models
TermoRecebimentoDefinitivo
O Termo de Recebimento Definitivo é o documento que formaliza o
recebimento definitivo (físico e financeiro) de produtos de uma
empresa/contrato no módulo Pós-Recebimento. Ele registra a entrega final
de um conjunto de cronogramas de entrega, nomeia os fiscais responsáveis
(três usuários com perfil DILOG_QUALIDADE) e carrega o texto do termo
(conteúdo rico, ex.: HTML gerado por um editor de texto).
Regras de negócio da criação:
A empresa deve possuir ao menos uma ficha de recebimento com status “Assinado CODAE” (
FichaDeRecebimentoWorkflow.ASSINADA). Essa regra é aplicada tanto na listagem de empresas disponíveis (/terceirizadas/lista-empresas-pos-recebimento/) quanto na validação do payload de criação do termo.O contrato deve pertencer à empresa selecionada (
contrato.terceirizada == empresa).Cada cronograma deve pertencer ao contrato e à empresa selecionados e não pode ser repetido no mesmo payload.
Os fiscais devem possuir vínculo ativo com o perfil
DILOG_QUALIDADE.O texto do termo é obrigatório e deve conter conteúdo textual após a remoção das tags HTML (não basta apenas
<p></p>).A criação via API sempre persiste o termo com status ``ENVIADO`` (fluxo “Salvar e Enviar”), independentemente do default do modelo (
RASCUNHO). O statusRASCUNHOexiste no modelo, mas não é utilizado pela API atual.
Cada cronograma do termo carrega o seu próprio valor de contrato e
quantidade total recebida (valores decimais de até 15 dígitos com 2
casas decimais), armazenados no modelo intermediário
CronogramaTermoRecebimentoDefinitivo — ambos devem ser maiores
que zero.
- class TermoRecebimentoDefinitivo(*args, **kwargs)[source]
Bases:
ModeloBase,CriadoPorTermo de Recebimento Definitivo do módulo Pós-Recebimento.
Registra a formalização do recebimento definitivo de produtos de uma empresa/contrato, vinculando um ou mais cronogramas, os fiscais (perfil DILOG_QUALIDADE) responsáveis e o texto do termo.
Regra de negócio: a empresa deve possuir ao menos uma ficha de recebimento com status “Assinado CODAE” (FichaDeRecebimentoWorkflow.ASSINADA). A regra é aplicada na listagem de empresas disponíveis e validada novamente na criação do termo via API. A criação via API persiste o termo sempre com status ENVIADO (fluxo “Salvar e Enviar”).
- id: int
Origem:
dados_comuns/behaviors.py(ModeloBase)Descrição: Chave primária inteira criada automaticamente pelo Django para identificar o termo.
- uuid: uuid.UUID
Origem:
dados_comuns/behaviors.py(TemChaveExterna)Descrição: Identificador externo único do termo, usado em integrações, endpoints que expõem UUID e como referência nas mensagens de log.
- empresa: terceirizada.Terceirizada
Descrição: Empresa fornecedora responsável pelas entregas formalizadas no termo. Campo obrigatório com
on_delete=PROTECT(não pode ser removida enquanto houver termo vinculado).Regra de negócio: a empresa deve possuir ao menos uma ficha de recebimento “Assinado CODAE” (
FichaDeRecebimentoWorkflow.ASSINADA) para ser utilizada em um termo.
- contrato: terceirizada.Contrato
Descrição: Contrato ao qual as entregas pertencem. Campo obrigatório com
on_delete=PROTECT.Regra de negócio: o contrato deve pertencer à empresa selecionada (
contrato.terceirizada == empresa).
- cronogramas: django.db.models.QuerySet[Cronograma]
Descrição: Relação M:N com
Cronogramaatravés do modelo intermediárioCronogramaTermoRecebimentoDefinitivo.Lista os cronogramas de entrega formalizados no termo. Cada vínculo carrega o
valor_contratoe aquantidade_total_recebidaespecíficos daquele cronograma (vercronogramas_termo).Regra de negócio: cada cronograma deve pertencer ao contrato e à empresa selecionados e não pode ser repetido no mesmo termo (
unique_togetherentretermoecronograma).
- cronogramas_termo: django.db.models.QuerySet[CronogramaTermoRecebimentoDefinitivo]
Descrição: Relação reversa 1:N com
CronogramaTermoRecebimentoDefinitivo(related_name="cronogramas_termo").Acesso direto às linhas intermediárias do termo, incluindo o valor de contrato e a quantidade total recebida de cada cronograma. É a fonte utilizada pelo serializador de saída para expor os cronogramas com seus valores.
- fiscal_1: perfil.Usuario
Descrição: Primeiro fiscal responsável pelo recebimento. Campo obrigatório com
on_delete=PROTECT(usuário não pode ser removido enquanto houver termo vinculado).Regra de negócio: o usuário deve possuir vínculo ativo com o perfil
DILOG_QUALIDADE.
- fiscal_2: perfil.Usuario
Descrição: Segundo fiscal responsável pelo recebimento. Mesmas regras de
fiscal_1(obrigatório,on_delete=PROTECT, perfilDILOG_QUALIDADEcom vínculo ativo).
- fiscal_3: perfil.Usuario
Descrição: Terceiro fiscal responsável pelo recebimento. Mesmas regras de
fiscal_1(obrigatório,on_delete=PROTECT, perfilDILOG_QUALIDADEcom vínculo ativo).
- texto_termo: str
Descrição: Texto do termo em conteúdo rico (aceita HTML, ex.: produzido por editor de texto). Obrigatório e deve conter conteúdo textual após a remoção das tags HTML.
- status: str
Descrição: Status do termo. Valores possíveis:
RASCUNHO(Rascunho) eENVIADO(Enviado). O default do modelo éRASCUNHO, porém a criação via API sempre persiste ``ENVIADO`` (fluxo “Salvar e Enviar”).
- criado_por: perfil.Usuario | None
Origem:
dados_comuns/behaviors.py(CriadoPor)Descrição: Usuário que criou o termo. Preenchido com o usuário autenticado da requisição no momento da criação via API.
- alterado_por: perfil.Usuario | None
Descrição: Usuário que realizou a última alteração do termo. Preenchido com o usuário autenticado da requisição no momento da criação via API (mesmo usuário de
criado_porna criação).
- criado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(CriadoEm)Descrição: Timestamp preenchido automaticamente na criação do termo.
- alterado_em: datetime.datetime
Origem:
dados_comuns/behaviors.py(TemAlteradoEm)Descrição: Timestamp preenchido automaticamente na última alteração do termo.
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError
CronogramaTermoRecebimentoDefinitivo
Modelo intermediário (through) que vincula um TermoRecebimentoDefinitivo
a um Cronograma.
Como cada cronograma de um termo pode ter valores financeiros próprios,
o valor de contrato e a quantidade total recebida são armazenados neste
modelo (por cronograma) e não no termo. O mesmo cronograma não pode
aparecer duas vezes no mesmo termo (unique_together entre termo e
cronograma).
Regras de negócio na criação:
valor_contratodeve ser maior que zero.quantidade_total_recebidadeve ser maior que zero.O cronograma deve pertencer ao contrato e à empresa selecionados no termo.
- class CronogramaTermoRecebimentoDefinitivo(*args, **kwargs)[source]
Bases:
ModelCronograma vinculado a um Termo de Recebimento Definitivo.
Cada cronograma do termo possui seu próprio valor de contrato e quantidade total recebida (repetidos por cronograma).
- id: int
Descrição: Chave primária inteira criada automaticamente pelo Django para identificar o vínculo.
- termo: TermoRecebimentoDefinitivo
Descrição: Termo de Recebimento Definitivo ao qual o vínculo pertence.
on_delete=CASCADE: ao remover o termo, os vínculos são removidos junto.
- cronograma: Cronograma
Descrição: Cronograma de entrega vinculado ao termo.
on_delete=PROTECT: o cronograma não pode ser removido enquanto houver termo vinculado.
- valor_contrato: decimal.Decimal
Descrição: Valor de contrato (em reais) relativo a este cronograma dentro do termo. Decimal com até 15 dígitos e 2 casas decimais. Deve ser maior que zero.
- quantidade_total_recebida: decimal.Decimal
Descrição: Quantidade total recebida relativa a este cronograma dentro do termo. Decimal com até 15 dígitos e 2 casas decimais. Deve ser maior que zero.
- exception NotUpdated
Bases:
ObjectNotUpdated,DatabaseError