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 status RASCUNHO existe 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, CriadoPor

Termo 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 Cronograma através do modelo intermediário CronogramaTermoRecebimentoDefinitivo.

Lista os cronogramas de entrega formalizados no termo. Cada vínculo carrega o valor_contrato e a quantidade_total_recebida específicos daquele cronograma (ver cronogramas_termo).

Regra de negócio: cada cronograma deve pertencer ao contrato e à empresa selecionados e não pode ser repetido no mesmo termo (unique_together entre termo e cronograma).

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, perfil DILOG_QUALIDADE com 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, perfil DILOG_QUALIDADE com 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) e ENVIADO (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_por na 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_contrato deve ser maior que zero.

  • quantidade_total_recebida deve ser maior que zero.

  • O cronograma deve pertencer ao contrato e à empresa selecionados no termo.

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

Bases: Model

Cronograma 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