Skip to content

Implementar validações do elemento <issue> conforme SPS 1.10#1097

Draft
Copilot wants to merge 6 commits intomasterfrom
copilot/add-validations-for-issue-element
Draft

Implementar validações do elemento <issue> conforme SPS 1.10#1097
Copilot wants to merge 6 commits intomasterfrom
copilot/add-validations-for-issue-element

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

O que esse PR faz?

Implementa 7 validações para o elemento <issue> em <article-meta>, alcançando 70% de conformidade com SPS 1.10:

Validações Críticas (P0):

  • Unicidade: máximo 1 elemento <issue> por <article-meta> (ERROR)
  • Formato: sem pontuação (., ,, -, /, :, ;) (ERROR)
  • Casing: apenas lowercase (ERROR)
  • Nomenclatura de suplemento: suppl obrigatório, rejeita supl, supplement, sup (ERROR)
  • Nomenclatura de número especial: spe obrigatório, rejeita esp, nesp, nspe, especial (ERROR)
  • Elemento proibido: <supplement> não permitido em <article-meta> (CRITICAL)

Validações Importantes (P1):

  • Zeros à esquerda: números sem zeros à esquerda, ex: 4 não 04 (WARNING)

Exemplos de validação:

# Válido
<issue>4 suppl 1</issue>
<issue>spe1</issue>

# Inválido - detectado
<issue>4 Suppl 1</issue>    # uppercase
<issue>4.5</issue>           # pontuação
<issue>04</issue>            # zero à esquerda
<issue>4 supl 1</issue>      # nomenclatura incorreta

Onde a revisão poderia começar?

  1. packtools/sps/validation/front_articlemeta_issue.py - linhas 245-482: novos métodos de validação
  2. tests/sps/validation/test_front_articlemeta_issue.py - linhas 948-1608: testes unitários

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.front_articlemeta_issue import IssueValidation

# Testar com XML inválido
xml = '<article><front><article-meta><issue>04 Suppl 1</issue></article-meta></front></article>'
tree = etree.fromstring(xml)
validator = IssueValidation(tree, {})

# Executar validações
for result in validator.validate():
    if result and result['response'] != 'OK':
        print(f"{result['title']}: {result['message']}")

# Esperado: 2 erros (uppercase + leading zero)

Algum cenário de contexto que queira dar?

Padrões de implementação seguidos:

  • Uso de regex com word boundaries (\b) para validação precisa de nomenclatura
  • Early return quando elemento não aplicável (evita validações desnecessárias)
  • Níveis de erro conforme criticidade: CRITICAL > ERROR > WARNING
  • Pattern matching com build_response() do repositório

Decisões técnicas:

  • Validação de "s" como suplemento foi removida para evitar falsos positivos com "spe"
  • Detecção de leading zeros trata edge case 000 corretamente
  • Import de re movido para module-level seguindo Python conventions

Cobertura:

  • 31 testes unitários (100% das validações implementadas)
  • Testes incluem casos válidos, inválidos e edge cases
  • Sem regressões introduzidas no código existente

Nota: Existem 11 falhas pré-existentes em PaginationTest e IssueTest não relacionadas a este PR (causadas por mudanças recentes de i18n em build_response()).

Screenshots

N/A - validações de dados XML

Quais são tickets relevantes?

Issue sobre validações do elemento <issue> conforme SPS 1.10

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 <issue> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).

Nota: Algumas validações para <issue> 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 <issue> identifica o número de uma publicação periódica, incluindo suplementos e números especiais. Validações corretas garantem que o formato seja consistente e padronizado conforme especificações SPS, sem pontuação, sem uppercase, sem zeros à esquerda, e usando nomenclaturas corretas para suplementos (suppl) e números especiais (spe).

Conformidade atual: X de 10 regras implementadas (X%)
Meta após implementação: 7 de 10 regras (70%)


Documentação SPS

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

Regras principais conforme SPS 1.10:

  1. Ocorrência:

    • <issue> deve aparecer no máximo uma vez em <article-meta>
  2. Formatos válidos:

    • Número simples: 4
    • Suplemento de número: 4 suppl 1
    • Suplemento de volume: suppl 1
    • Número especial: spe1
  3. Restrições de formato:

    • Sem pontuação: não usar ., ,, -, /, etc.
    • Sem uppercase: usar apenas minúsculas
    • Sem zero à esquerda: usar 4 ao invés de 04
    • Espaçamento específico: um espaço entre número e suppl (ex: 4 suppl 1)
  4. Nomenclatura obrigatória:

    • Para suplemento: usar suppl (não supl, s, supplement)
    • Para número especial: usar spe (não esp, nesp, nspe, especial)
  5. Elemento proibido:

    • Não usar <supplement> em <article-meta> (suplementos devem ser identificados em <issue>)

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar unicidade de <issue> ERROR O elemento <issue> deve aparecer no máximo uma vez em <article-meta>
2 Validar ausência de pontuação ERROR O valor de <issue> não deve conter pontuação (., ,, -, /, :, ;, etc.)
3 Validar ausência de uppercase ERROR O valor de <issue> deve estar em minúsculas (sem letras maiúsculas)
4 Validar nomenclatura de suplemento ERROR Suplementos devem usar suppl (não supl, s, supplement, sup)
5 Validar nomenclatura de número especial ERROR Números especiais devem usar spe (não esp, nesp, nspe, especial, noesp)
6 Validar ausência de <supplement> em <article-meta> CRITICAL O elemento <supplement> não é permitido em <article-meta> (usar <issue> para suplementos)

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
7 Validar ausência de zero à esquerda WARNING Números não devem ter zero à esquerda (usar 4 ao invés de 04)

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
8 Validar espaçamento correto (4 suppl 1 vs 4suppl1) Baixa prioridade - formato já coberto por outras validações
9 Validar consistência com nome de arquivo Alta complexidade - requer validação cruzada com sistema de arquivos
10 Validar que partes numéricas são válidas Baixa prioridade - formato livre permite variações

Arquivos a Criar/Modificar

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

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

Criar (se não existirem):

  • packtools/sps/models/issue.py – Modelo de extração de dados
  • packtools/sps/validation/issue.py – Validações
  • packtools/sps/validation/rules/issue_rules.json – Configuração de níveis de erro
  • tests/sps/validation/test_issue.py – Testes unitários

Referenciar (implementações similares):

  • packtools/sps/validation/article_doi.py – Validação de unicidade
  • packtools/sps/validation/utils.py – Funções auxiliares (build_response)

Exemplos de XML

XML Válido (deve passar sem erros):

<!-- Exemplo 1: Número simples -->
<article-meta>
    <volume>10</volume>
    <issue>4</issue>
</article-meta>

<!-- Exemplo 2: Apenas número sem volume -->
<article-meta>
    <issue>4</issue>
</article-meta>

<!-- Exemplo 3: Suplemento de número -->
<article-meta>
    <volume>10</volume>
    <issue>4 suppl 2</issue>
</article-meta>

<!-- Exemplo 4: Suplemento de volume -->
<article-meta>
    <vol...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes scieloorg/packtools#1088

<!-- START COPILOT CODING AGENT TIPS -->
---

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.

Copilot AI and others added 5 commits February 13, 2026 12:33
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Implement validations for the <issue> element Implementar validações do elemento <issue> conforme 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.

2 participants