api
O módulo de API do Pós-Recebimento expõe um único endpoint de criação:
POST /pos-recebimento/termos/— criação do Termo de Recebimento Definitivo (basenametermos-recebimento-definitivo).
O payload de criação espera os uuids de empresa, contrato,
cronogramas (cada um com valor_contrato e
quantidade_total_recebida), fiscal_1, fiscal_2, fiscal_3 e
texto_termo. Respostas: 201 com o termo serializado, 400 com os
erros de validação ou 403 para usuários sem permissão.
viewsets
- class TermoRecebimentoDefinitivoViewSet(**kwargs)[source]
Bases:
CreateModelMixin,GenericViewSetCriação do Termo de Recebimento Definitivo (Salvar e Enviar).
- create(request, *args, **kwargs)[source]
Cria o termo (valida, persiste e retorna 201 com o serializador de saída).
- lookup_field = 'uuid'
- perform_create(serializer)[source]
Persiste o termo com status
ENVIADOe cria as linhas do modelo intermediário (cronograma + valor_contrato + quantidade total recebida) para cada cronograma do payload.
- permission_classes = (<class 'src.pos_recebimento.api.permissions.PermissaoParaCadastrarTermoRecebimentoDefinitivo'>,)
- queryset = <QuerySet de TermoRecebimentoDefinitivo>
- serializer_class
O TermoRecebimentoDefinitivoViewSet implementa o fluxo “Salvar e
Enviar”: a criação é feita em uma única operação e o termo é persistido
com status ENVIADO, independentemente do default do modelo
(RASCUNHO). O criado_por e o alterado_por são preenchidos com
o usuário autenticado da requisição.
O fluxo de criação:
O serializador de criação valida o payload (ver
serializers_create).perform_createretira os cronogramas dovalidated_data, salva o termo comstatus=ENVIADOe os usuários da requisição.Para cada item de cronograma é criada uma linha do modelo intermediário
CronogramaTermoRecebimentoDefinitivocom ocronograma,valor_contratoequantidade_total_recebida.A resposta
201é montada com o serializador de saída (TermoRecebimentoDefinitivoSerializer), que já traz empresa, contrato, cronogramas (com valores) e fiscais serializados pelos serializers de seus respectivos módulos.
permissions
- class PermissaoParaCadastrarTermoRecebimentoDefinitivo[source]
Bases:
BasePermissionPermissão para cadastrar/visualizar Termo de Recebimento Definitivo.
Apenas os perfis DILOG_CRONOGRAMA e COORDENADOR_CODAE_DILOG_LOGISTICA (vinculados à CODAE) podem acessar as funcionalidades do módulo Pós-Recebimento.
- PERFIS_PERMITIDOS = ['DILOG_CRONOGRAMA', 'COORDENADOR_CODAE_DILOG_LOGISTICA']
Permissão PermissaoParaCadastrarTermoRecebimentoDefinitivo: apenas
usuários autenticados, com vínculo atual ativo vinculado à CODAE
(instituição Codae) e cujo perfil do vínculo atual seja
DILOG_CRONOGRAMA ou COORDENADOR_CODAE_DILOG_LOGISTICA podem acessar
as funcionalidades do Pós-Recebimento.
Além do endpoint de criação de termos, essa mesma permissão protege as listagens de apoio ao cadastro, implementadas em outros módulos:
GET /terceirizadas/lista-empresas-pos-recebimento/— empresas com ao menos uma ficha de recebimento “Assinado CODAE”.GET /cronogramas/lista-cronogramas-pos-recebimento/?contrato_id=<uuid>— cronogramas vinculados ao contrato selecionado.GET /cronogramas/<uuid>/dados-cronograma-pos-recebimento/— dados do cronograma para preenchimento automático do cadastro.GET /usuarios/fiscais/— usuários com perfilDILOG_QUALIDADEe vínculo ativo para seleção dos fiscais.
services
- class TermoRecebimentoDefinitivoService[source]
Bases:
objectRegra de negócio do Pós-Recebimento referente ao modelo novo.
As listagens de empresas, contratos, cronogramas e fiscais foram movidas para os services/viewsets dos seus respectivos módulos (terceirizada, pre_recebimento e perfil). Aqui permanece apenas a regra utilizada na criação do Termo de Recebimento Definitivo.
O TermoRecebimentoDefinitivoService concentra as regras de negócio do
Pós-Recebimento. Atualmente mantém apenas a regra
empresa_tem_ficha_assinada: verifica se a empresa possui ao menos uma
ficha de recebimento com status “Assinado CODAE”
(FichaDeRecebimentoWorkflow.ASSINADA), navegando pela relação
empresa -> cronogramas -> etapas -> ficha de recebimento.
serializers
- class CronogramaTermoRecebimentoDefinitivoSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerCronograma do termo com valor de contrato e quantidade recebida.
- class TermoRecebimentoDefinitivoSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerSerializador de saída do Termo de Recebimento Definitivo.
Os modelos já existentes (empresa, contrato, cronogramas e fiscais) são serializados pelos serializers de seus respectivos módulos. Cada cronograma possui seu próprio valor de contrato e quantidade recebida.
- class Meta[source]
Bases:
object- fields = ('uuid', 'empresa', 'contrato', 'cronogramas', 'fiscal_1', 'fiscal_2', 'fiscal_3', 'texto_termo', 'status', 'criado_em', 'alterado_em')
- model
alias of
TermoRecebimentoDefinitivo
- read_only_fields = ('uuid', 'empresa', 'contrato', 'cronogramas', 'fiscal_1', 'fiscal_2', 'fiscal_3', 'texto_termo', 'status', 'criado_em', 'alterado_em')
Serializadores de saída (somente leitura):
CronogramaTermoRecebimentoDefinitivoSerializer: expõe o cronograma (serializado porCronogramaSimplesSerializer), ovalor_contratoe aquantidade_total_recebida.TermoRecebimentoDefinitivoSerializer: serializa o termo com empresa (TerceirizadaSimplesSerializer), contrato (ContratoSimplesSerializer), cronogramas (via relação reversacronogramas_termo, cada um com seus valores), fiscais (UsuarioSimplesSerializer),texto_termo,statuse timestamps de criação/alteração. Todos os campos são somente leitura.
serializers_create
- class CronogramaTermoRecebimentoDefinitivoCreateSerializer(*args, **kwargs)[source]
Bases:
SerializerItem de cronograma do Termo de Recebimento Definitivo.
Cada cronograma possui seu próprio valor de contrato e quantidade total recebida.
- class TermoRecebimentoDefinitivoCreateSerializer(*args, **kwargs)[source]
Bases:
ModelSerializerSerializador de criação do Termo de Recebimento Definitivo.
Recebe os uuids de empresa, contrato, cronogramas (cada um com seu valor de contrato e quantidade recebida) e fiscais, e valida as regras de negócio:
todos os campos obrigatórios;
empresa com ao menos uma ficha de recebimento “Assinado CODAE”;
contrato vinculado à empresa selecionada;
cronogramas vinculados ao contrato/empresa selecionados;
fiscais com perfil DILOG_QUALIDADE;
valor do contrato e quantidade total recebida maiores que zero.
- class Meta[source]
Bases:
object- fields = ('empresa', 'contrato', 'cronogramas', 'fiscal_1', 'fiscal_2', 'fiscal_3', 'texto_termo')
- model
alias of
TermoRecebimentoDefinitivo
Serializadores de criação (entrada):
CronogramaTermoRecebimentoDefinitivoCreateSerializer: item de cronograma do payload, composto porcronograma(uuid viaSlugRelatedField),valor_contratoequantidade_total_recebida(decimais com até 15 dígitos e 2 casas decimais).TermoRecebimentoDefinitivoCreateSerializer: serializador principal do create. Recebe os uuids de empresa, contrato, cronogramas e fiscais e aplica as regras de negócio (na ordem):Campos obrigatórios:
empresa,contrato,cronogramas(não pode ser vazio —allow_empty=False),fiscal_1,fiscal_2,fiscal_3etexto_termo.Empresa com ficha assinada: a empresa deve possuir ao menos uma ficha de recebimento “Assinado CODAE”.
Contrato da empresa:
contrato.terceirizadadeve ser a empresa selecionada.Cronogramas: não podem repetir uuid no mesmo payload; cada cronograma deve pertencer ao contrato selecionado (
cronograma.contrato) e à empresa selecionada (cronograma.empresa).Fiscais: cada um deve possuir vínculo ativo com o perfil
DILOG_QUALIDADE.Valores por cronograma:
valor_contratoequantidade_total_recebidadevem ser maiores que zero.Texto do termo: obrigatório e deve conter conteúdo textual após a remoção das tags HTML (
validate_texto_termo).
Mensagens de erro padrão por campo não encontrado: “Empresa não encontrada.”, “Contrato não encontrado.”, “Cronograma não encontrado.” e “Fiscal N não encontrado.”.