Skip to content

Add SPS 1.10 related-article validations with i18n support#1140

Draft
Copilot wants to merge 4 commits intomasterfrom
copilot/create-validations-for-related-article
Draft

Add SPS 1.10 related-article validations with i18n support#1140
Copilot wants to merge 4 commits intomasterfrom
copilot/create-validations-for-related-article

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 19, 2026

O que esse PR faz?

Implementa 8 das 12 regras de validação para <related-article> conforme SPS 1.10, elevando a conformidade para ~70%.

Novas validações (P0):

  • validate_related_article_type_presence() — CRITICAL
  • validate_ext_link_type_presence() — CRITICAL
  • validate_related_article_type_value() — ERROR (17 valores permitidos, case-sensitive)
  • validate_ext_link_type_value() — ERROR (doi | uri)
  • validate_xlink_href_presence() — ERROR
  • validate_doi_preference() — WARNING (exceções: reviewer-report, preprint)

Melhorias em validações existentes (P1):

  • validate_attrib_order() — rebaixado para INFO, corrigido FIXME, tratamento gracioso de attribs ausentes
  • i18n (advice_text/advice_params) adicionado a todas as mensagens existentes e novas

Configuração: related_article_rules.json atualizado com 6 novos error level keys.

peer-reviewed-material adicionado à lista de tipos permitidos (necessário para contexto de peer review).

Onde a revisão poderia começar?

packtools/sps/validation/related_articles.py — constantes no topo, depois as novas validate_* methods na classe RelatedArticleValidation.

Como este poderia ser testado manualmente?

python -m pytest tests/sps/validation/test_related_articles.py -v
# 119 testes (32 originais + 87 novos)

Exemplo de uso direto:

from lxml import etree
from packtools.sps.validation.related_articles import XMLRelatedArticlesValidation

xml = """<article xmlns:xlink="http://www.w3.org/1999/xlink" article-type="correction" xml:lang="en" id="a1">
    <front><article-meta>
        <related-article related-article-type="corrected-article" id="r1"
                         xlink:href="10.1590/123456" ext-link-type="doi"/>
    </article-meta></front>
</article>"""

validator = XMLRelatedArticlesValidation(etree.fromstring(xml), rules)
for r in validator.validate():
    print(r["response"], r["title"])

Algum cenário de contexto que queira dar?

Validações parciais já existiam (validate_type, validate_ext_link_type, validate_id_presence, validate_doi, validate_uri, validate_attrib_order). Este PR complementa com verificações de presença de atributos obrigatórios, validação contra lista global de valores permitidos, e preferência DOI vs URI.

Testes de peer review (test_peer_review.py) tinham 8 falhas pré-existentes. Este PR corrige 2 delas (testes de related-article); as 6 restantes são problemas não relacionados.

Screenshots

N/A

Quais são tickets relevantes?

Criar validações para o elemento <related-article> — 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 <related-article> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (8 de 12 regras).

Nota: Algumas validações para <related-article> 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 <related-article> indica documentos relacionados ao que está sendo publicado (erratas, retratações, adendos, comentários, cartas, pareceres, preprints). Quando o documento relacionado também está publicado em SciELO, deve-se adicionar o <related-article> em ambos os documentos. Validações corretas garantem presença de atributos obrigatórios, valores corretos, e uso adequado de DOI vs URI.

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


Documentação SPS

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

Regras principais conforme SPS 1.10:

  1. Ocorrência:

    • <related-article> pode aparecer zero ou mais vezes em <article-meta> e <front-stub>
  2. Atributos obrigatórios:

    • @related-article-type (obrigatório)
    • @id (obrigatório)
    • @ext-link-type (obrigatório, valores: doi ou uri)
  3. Valores permitidos para @related-article-type:

    • corrected-article - Errata
    • correction-forward - Documento corrigido pela errata
    • retracted-article - Retratação (total ou parcial)
    • retraction-forward - Documento retratado totalmente
    • partial-retraction - Documento retratado parcialmente
    • addended-article - Adendo
    • addendum - Documento objeto do adendo
    • expression-of-concern - Manifestação de preocupação
    • object-of-concern - Documento objeto de manifestação de preocupação
    • commentary-article - Comentário ou carta
    • commentary - Documento comentado ou resposta
    • reply - Resposta (para comentário ou carta)
    • letter - Carta ou resposta para carta
    • reviewed-article - Parecer (revisão por pares)
    • reviewer-report - Documento com parecer
    • preprint - Manuscrito em servidor de preprints
  4. Regras de @ext-link-type:

    • Padrão: @ext-link-type="doi"
    • Exceções que permitem uri:
      • @related-article-type="reviewer-report" (parecer com link externo)
      • @related-article-type="preprint" (preprint)
    • Preferência: usar doi se existir, mesmo para exceções
  5. Ordem obrigatória de atributos:

    1. @related-article-type
    2. @id
    3. @xlink:href
    4. @ext-link-type
  6. Posicionamento:

    • Deve ser inserido abaixo de <permissions> ou acima de <counts>
  7. Tradução (<sub-article>):

    • Documentos com tradução devem ter <related-article> também no idioma traduzido
    • Não repetir mesmo @id de <article> em <sub-article>

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de @related-article-type CRITICAL O atributo @related-article-type é obrigatório em <related-article>
2 Validar presença de @id CRITICAL O atributo @id é obrigatório em <related-article>
3 Validar presença de @ext-link-type CRITICAL O atributo @ext-link-type é obrigatório em <related-article>
4 Validar valores permitidos de @related-article-type ERROR O valor de @related-article-type deve estar na lista de valores permitidos
5 Validar valores permitidos de @ext-link-type ERROR O valor de @ext-link-type deve ser "doi" ou "uri"
6 Validar uso de doi como padrão WARNING @ext-link-type deve ser "doi" (exceto para reviewer-report e preprint que podem usar "uri")

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
7 Validar presença de @xlink:href ERROR O atributo @xlink:href é obrigatório em <related-article>
8 Recomendar ordem de atributos INFO Atributos devem seguir a ordem: @related-article-type, @id, @xlink:href, @ext-link-type

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
9 Validar posicionamento após <permissions> ou antes de <counts> Média complexidade - requer análise de ordem de elementos irmãos
10 Validar presença em <sub-article> quando há no artigo principal Alta complexidade - requer análise cross-document
11 Validar unicidade de @id entre <article> e <sub-article> Média complexidade - requer análise cross-document
12 Validar fo...

💡 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 in the docs.

Copilot AI and others added 3 commits March 19, 2026 12:09
…hensive tests

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 <related-article> element Add SPS 1.10 related-article validations with i18n support Mar 19, 2026
Copilot AI requested a review from robertatakenaka March 19, 2026 12:17
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 <related-article>

2 participants