Browse Source

Fix(Reconciliacao): inventario devolve a materia de cada tramitacao AB#1480

O hub nao guarda referencia por tramitacao — ele guarda a referencia da MATERIA.
Devolvendo so o id, o hub comparava id de tramitacao com id de materia e contava
o acervo inteiro como lacuna: em 14/08 foram 500 "ausentes" que eram historico
que a v1 decidiu nao integrar.

A materia e o que diz se aquela tramitacao pertence a algo que o hub deveria ter
integrado. Sem ela a conferencia nao tem como distinguir lacuna de fora-de-escopo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
pull/3858/head
kemuel 1 month ago
parent
commit
126c913b2d
  1. 16
      sapl/integracao_hub/tests/test_reconciliacao.py
  2. 12
      sapl/integracao_hub/views.py

16
sapl/integracao_hub/tests/test_reconciliacao.py

@ -73,7 +73,21 @@ def test_inventario_cursores_independentes_para_tramitacao(cliente_hub):
INVENTARIO, {'id_gt': proposicao.pk - 1, 'tramitacao_id_gt': tramitacao.pk})
assert proposicao.pk in resposta.data['proposicoes']
assert tramitacao.pk not in resposta.data['tramitacoes']
assert tramitacao.pk not in [t['id'] for t in resposta.data['tramitacoes']]
@pytest.mark.django_db(transaction=False)
def test_inventario_traz_a_materia_de_cada_tramitacao(cliente_hub):
# Sem a materia o hub compara id de tramitacao com id de materia e conta o
# acervo inteiro como lacuna (incidente de 14/08). A materia e o que diz se
# aquela tramitacao pertence a algo que o hub deveria ter integrado.
tramitacao = baker.make(Tramitacao)
resposta = cliente_hub.get(INVENTARIO, {'id_gt': 0, 'tramitacao_id_gt': 0})
entrada = next(t for t in resposta.data['tramitacoes']
if t['id'] == tramitacao.pk)
assert entrada['materia'] == tramitacao.materia_id
@pytest.mark.django_db(transaction=False)

12
sapl/integracao_hub/views.py

@ -277,9 +277,15 @@ class InventarioView(PollView):
proposicoes = list(
Proposicao.objects.filter(id__gt=id_gt, cancelado=False)
.order_by('id').values_list('id', flat=True)[:limite])
tramitacoes = list(
Tramitacao.objects.filter(id__gt=tramitacao_id_gt)
.order_by('id').values_list('id', flat=True)[:limite])
# Tramitacao vem com a materia junto porque a conferencia do hub NAO e por
# id de tramitacao: o hub so integra tramitacao de materia que ele conhece
# (proposicao que virou materia depois do marco). Devolver so o id fazia o
# hub contar como lacuna toda tramitacao do acervo — falso positivo eterno,
# visto em 14/08: 500 "ausentes" que na verdade eram historico.
tramitacoes = [
{'id': t['id'], 'materia': t['materia_id']}
for t in Tramitacao.objects.filter(id__gt=tramitacao_id_gt)
.order_by('id').values('id', 'materia_id')[:limite]]
return Response({
'proposicoes': proposicoes,

Loading…
Cancel
Save