Skip to content

[Silver Pipeline] - Parte 002 - Cria app ETL (Extract, Transform, Load)#650

Merged
pitangainnovare merged 26 commits into
scieloorg:mainfrom
pitangainnovare:scms-oca-etl-base
May 13, 2026
Merged

[Silver Pipeline] - Parte 002 - Cria app ETL (Extract, Transform, Load)#650
pitangainnovare merged 26 commits into
scieloorg:mainfrom
pitangainnovare:scms-oca-etl-base

Conversation

@pitangainnovare
Copy link
Copy Markdown
Contributor

O que esse PR faz?

Adiciona a estrutura base da app etl para geração e controle operacional de documentos Silver: modelo de estado, migration, contratos Bronze/Silver, mapping OpenSearch, orquestrador base, serviços de fila/processamento, command, tasks Celery e admin Wagtail mínimo.

Onde a revisão poderia começar?

etl/models.py, depois etl/pipeline/orchestrator.py e etl/services.py.

Como este poderia ser testado manualmente?

Rodar:

docker compose -f local.yml run --rm django pytest etl/tests search_gateway/tests.py --create-db --no-migrations
docker compose -f local.yml run --rm --no-deps django python manage.py makemigrations etl --check --dry-run

Opcionalmente, validar o command:

docker compose -f local.yml run --rm django python manage.py run_silver_etl --help

Algum cenário de contexto que queira dar?

Esta é a base operacional da história Silver. Ela ainda não implementa estratégias específicas de Article, Books, Preprints ou SciELO Data; esses fluxos devem entrar em PRs separados. Também mantém search_gateway como dono do helper genérico de OpenSearch, enquanto etl consome essa integração.

Screenshots

N/A.

Quais são tickets relevantes?

Resolve parte estrutural de #645.

Referências

@pitangainnovare pitangainnovare self-assigned this May 7, 2026
@pitangainnovare pitangainnovare added the enhancement New feature or request label May 7, 2026
Comment thread etl/indexing/contracts.py
oca_data: dict = field(default_factory=dict)

def __post_init__(self):
if not self.doc_id or not isinstance(self.doc_id, str):
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pode ser um método de OcaModel e em BronzeDocument e SilverDocument faz um super()

class DefaultStandardizer:
"""Default source-agnostic transformation from bronze payload to silver."""

def run(self, bronze_doc: BronzeDocument) -> SilverDocument:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O dado sempre virá de um indice bronze? Se não, mudar o nome dá variável

@pitangainnovare pitangainnovare merged commit ae80130 into scieloorg:main May 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Criar app/estrutura base para geração de índice Silver (docs mesclados)

2 participants