Skip to content

Implementar validações para elemento <journal-meta> (SPS 1.10)#1098

Draft
Copilot wants to merge 4 commits intomasterfrom
copilot/add-validations-for-journal-meta
Draft

Implementar validações para elemento <journal-meta> (SPS 1.10)#1098
Copilot wants to merge 4 commits intomasterfrom
copilot/add-validations-for-journal-meta

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

O que esse PR faz?

Implementa 11 validações estruturais, de formato e atributos para <journal-meta> conforme especificação SPS 1.10, excedendo meta de 75% (11/11 regras planejadas vs 9/12 mínimo).

Classes adicionadas:

  • JournalMetaPresenceValidation: Valida presença/unicidade de elementos obrigatórios (7 métodos, nível CRITICAL)
  • ISSNFormatValidation: Valida formato ISSN XXXX-XXXX com 'X' maiúsculo (ISO 3297)
  • JournalMetaAttributeValidation: Valida valores permitidos de atributos e unicidade de tipos

Regras implementadas:

  • P0 (8/8): presença de journal-meta, publisher-id, journal-title, abbrev-journal-title, ISSN, publisher-name + formato ISSN
  • P1 (3/3): validação de valores @journal-id-type, @pub-type, unicidade de tipos ISSN

Onde a revisão poderia começar?

  1. packtools/sps/validation/journal_meta.py - linhas 387-775 (classes novas)
  2. tests/sps/validation/test_journal_meta.py - linhas 721+ (23 novos testes)

Padrão de implementação:

class JournalMetaPresenceValidation:
    def validate_journal_meta_presence(self, error_level="CRITICAL"):
        journal_meta = self.xmltree.find('.//front/journal-meta')
        is_valid = journal_meta is not None
        yield format_response(...)

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.journal_meta import (
    JournalMetaPresenceValidation,
    ISSNFormatValidation,
    JournalMetaAttributeValidation
)

xmltree = etree.parse('artigo.xml')

# Validar presença de elementos obrigatórios
for result in JournalMetaPresenceValidation(xmltree).validate_journal_meta_presence():
    print(f"{result['response']}: {result['title']}")

# Validar formato de ISSN
for result in ISSNFormatValidation(xmltree).validate_issn_format():
    print(f"{result['response']}: {result['got_value']}")

# Validar valores de atributos
for result in JournalMetaAttributeValidation(xmltree).validate_issn_pub_type_values():
    print(f"{result['response']}: {result['data']}")

Testes unitários:

python -m unittest tests.sps.validation.test_journal_meta.JournalMetaPresenceTest
python -m unittest tests.sps.validation.test_journal_meta.ISSNFormatTest
python -m unittest tests.sps.validation.test_journal_meta.JournalMetaAttributeTest

Algum cenário de contexto que queira dar?

Validações seguem padrão existente usando format_response() e retornam generators com estrutura padronizada:

{
    'response': 'OK|CRITICAL|ERROR|WARNING',
    'title': 'Validation title',
    'validation_type': 'exist|format|value in list|uniqueness',
    'advice': 'Como corrigir (se inválido)',
    'data': {...}
}

Decisões de implementação:

  • ISSN regex ^\d{4}-\d{3}[\dX]$ (uppercase X apenas, conforme ISO 3297)
  • Campo data inclui valores apenas quando is_valid=True (consistência)
  • Nível CRITICAL para elementos obrigatórios, ERROR para formato/valores, WARNING para duplicatas

CodeQL: 0 vulnerabilidades
Testes: 23/23 passing
Cobertura: 100% das regras planejadas (P0 + P1)

Referências

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar validações para o elemento </issue_title>
<issue_description>## Objetivo

Implementar validações para o elemento <journal-meta> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 75% (9 de 12 regras).

Nota: Algumas validações para <journal-meta> podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10.


Contexto

O elemento <journal-meta> identifica os metadados do periódico registrados na SciELO, incluindo IDs, títulos, ISSNs e publisher. Validações corretas garantem que todos os elementos obrigatórios estejam presentes, que ISSNs tenham formato válido, e que atributos obrigatórios estejam corretos.

Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 9 de 12 regras (75%)


Documentação SPS

Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.journalmeta

Regras principais conforme SPS 1.10:

  1. Ocorrência:

    • <journal-meta> deve aparecer exatamente uma vez em <front>
  2. Elementos obrigatórios:

    • <journal-id journal-id-type="publisher-id"> - Acrônimo oficial do periódico na SciELO
    • <journal-title> - Título do periódico registrado na SciELO
    • <abbrev-journal-title abbrev-type="publisher"> - Título abreviado registrado na SciELO
    • Pelo menos um <issn> (epub ou ppub)
    • <publisher-name> - Nome do publisher registrado na SciELO
  3. Elementos condicionais:

    • <journal-id journal-id-type="nlm-ta"> - Obrigatório se o periódico for indexado no PubMed (usar título abreviado do PubMed)
  4. Valores permitidos para @journal-id-type:

    • publisher-id - Acrônimo oficial SciELO (obrigatório)
    • nlm-ta - Título abreviado PubMed (condicional)
  5. Valores permitidos para @pub-type em <issn>:

    • epub - ISSN online
    • ppub - ISSN print
  6. Valores permitidos para @abbrev-type em <abbrev-journal-title>:

    • publisher - Título abreviado do publisher (obrigatório)
  7. Formato de ISSN:

    • Padrão: XXXX-XXXX (4 dígitos, hífen, 4 dígitos)
    • Total de 8 dígitos + 1 hífen (9 caracteres)
  8. Fonte de dados:

    • Metadados disponíveis em CSV: title-tab-v2 (atualização semanal)

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de <journal-meta> CRITICAL O elemento <journal-meta> é obrigatório em <front>
2 Validar unicidade de <journal-meta> CRITICAL O elemento <journal-meta> deve aparecer exatamente uma vez em <front>
3 Validar presença de <journal-id @journal-id-type="publisher-id"> CRITICAL O elemento <journal-id> com @journal-id-type="publisher-id" é obrigatório
4 Validar presença de <journal-title> CRITICAL O elemento <journal-title> é obrigatório
5 Validar presença de <abbrev-journal-title @abbrev-type="publisher"> CRITICAL O elemento <abbrev-journal-title> com @abbrev-type="publisher" é obrigatório
6 Validar presença de pelo menos um <issn> CRITICAL Pelo menos um elemento <issn> (epub ou ppub) é obrigatório
7 Validar presença de <publisher-name> CRITICAL O elemento <publisher-name> é obrigatório
8 Validar formato de ISSN ERROR Valor de <issn> deve seguir formato XXXX-XXXX (4 dígitos, hífen, 4 dígitos)

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
9 Validar valores permitidos de @journal-id-type ERROR Quando presente, @journal-id-type deve ser publisher-id ou nlm-ta
10 Validar valores permitidos de @pub-type em <issn> ERROR Quando presente, @pub-type deve ser epub ou ppub
11 Validar unicidade de tipos de <issn> WARNING Não deve haver múltiplos <issn> com o mesmo @pub-type

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
12 Validar presença de nlm-ta quando indexado no PubMed Alta complexidade - requer integração com API do PubMed ou base de dados externa
13 Validar consistência com title-tab-v2 Média complexidade - requer download e parsing de CSV externo
14 Validar checksum de ISSN Baixa prioridade - formato básico já é validado

Arquivos a Criar/Modificar

Avaliar existentes (podem ter validações parciais):

  • packtools/sps/models/journal_meta.py ou similar – Verificar se modelo existe
  • packtools/sps/validation/journal_meta.py – Verificar validações existentes
  • packtools/sps/validation/rules/journal_meta_rules.json ou similar – Verificar configuração

Criar (se não existirem):

  • `packtools/sps/mod...

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 3 commits February 13, 2026 12:31
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
…ata fields

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Implement validations for the <journal-meta> element Implementar validações para elemento <journal-meta> (SPS 1.10) Feb 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Criar validações para o elemento <journal-meta>

2 participants