Skip to content

Add ref-list validations for SPS 1.10 (rules 1-14)#1135

Draft
Copilot wants to merge 2 commits intomasterfrom
copilot/create-validations-ref-list
Draft

Add ref-list validations for SPS 1.10 (rules 1-14)#1135
Copilot wants to merge 2 commits intomasterfrom
copilot/create-validations-ref-list

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 19, 2026

O que esse PR faz?

Implementa 9 novas validações para <ref-list> conforme SPS 1.10 e Critérios SciELO Brasil, atingindo 14 de 20 regras (70%). As 5 regras restantes já existiam (mixed-citation, publication-type, source, year).

Novas validações:

  • Nível documento: presença de <ref-list> em docs indexáveis (exceto correction/retraction/addendum/expression-of-concern/reviewer-report), presença de <ref> em <ref-list>
  • Nível referência: presença de <element-citation>, máximo 1 <ext-link> em element-citation e mixed-citation, <lpage> obrigatório quando <fpage> existe, @units="pages" em <size>, @content-type="access-date" em <date-in-citation>, <surname> obrigatório em <name>

Também corrige null safety em get_publication_type() quando <element-citation> está ausente.

Onde a revisão poderia começar?

packtools/sps/validation/references.py — novos métodos em ReferenceValidation (regras per-ref) e ReferencesValidation (regras ref-list level).

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.references import ReferencesValidation

xml = """<article xmlns:xlink="http://www.w3.org/1999/xlink"
  article-type="research-article" xml:lang="en">
  <front><article-meta>
    <pub-date date-type="pub"><year>2024</year></pub-date>
  </article-meta></front>
  <back>
    <ref-list>
      <ref id="B1">
        <mixed-citation>Author. Title. 2020.</mixed-citation>
        <element-citation publication-type="journal">
          <source>Journal</source><year>2020</year>
          <fpage>31</fpage><!-- missing lpage triggers ERROR -->
        </element-citation>
      </ref>
    </ref-list>
  </back>
</article>"""

tree = etree.fromstring(xml)
for r in ReferencesValidation(tree, {"publication_type_requires": {"journal": ["source","year"]}}).validate():
    if r["response"] != "OK":
        print(f'{r["response"]}: {r["title"]}{r["advice"]}')

Testes automatizados: python -m pytest tests/sps/validation/test_ref_list.py -v (42 testes).

Algum cenário de contexto que queira dar?

Arquivos modificados:

  • packtools/sps/models/references.py — 5 novos métodos de extração de dados (has_element_citation, ext_link_count_*, date_in_citation_content_type, names_without_surname)
  • packtools/sps/validation/references.py — 9 novos métodos de validação
  • packtools/sps/validation_rules/references_rules.json — 9 novos parâmetros de error level + lista de article types isentos
  • tests/sps/validation/test_ref_list.py — 42 novos testes (unitários + integração)
  • tests/sps/validation/test_references.py — ajuste em 1 teste que usava índice fixo (quebrou com novas validações, agora filtra por título)

Screenshots

N/A — validações backend sem componente visual.

Quais são tickets relevantes?

Criar validações para o elemento <ref-list>

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 <ref-list> conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 70% (14 de 20 regras).

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


Contexto

O elemento <ref-list> representa o conjunto de referências bibliográficas de um documento. Para SciELO Brasil, é obrigatório em todos os documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação e parecer). Cada referência deve conter <mixed-citation> (apresentação) e <element-citation> (dados estruturados para métricas). Validações corretas garantem conformidade com critérios SciELO Brasil, presença de elementos obrigatórios, e qualidade dos metadados bibliográficos.

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


Documentação SPS

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

Regras principais conforme SPS 1.10 e Critérios SciELO Brasil:

  1. Ocorrência:

    • <ref-list> aparece em <back> uma ou mais vezes
    • Pode aparecer aninhado dentro de <ref-list>
  2. Obrigatoriedade (Critério SciELO Brasil):

    • <ref-list> é obrigatório em documentos indexáveis
    • Exceções: errata, retratação, adendo, manifestação de preocupação, parecer
  3. Estrutura obrigatória:

    • <ref-list> deve conter pelo menos um <ref>
    • <ref> deve conter <mixed-citation> E <element-citation>
  4. Atributo obrigatório em <element-citation>:

    • @publication-type (obrigatório)
  5. Valores permitidos para @publication-type:

    • book - Livros, capítulos de livros
    • confproc - Atas, anais, proceedings de eventos
    • data - Dados de pesquisa (datasets)
    • database - Bases de dados
    • journal - Artigos de periódicos científicos
    • legal-doc - Normas jurídicas
    • letter - Cartas e comunicações pessoais
    • newspaper - Artigos de jornal
    • patent - Patentes
    • preprint - Preprints
    • report - Relatórios técnicos
    • software - Software
    • thesis - Monografias, dissertações, teses
    • webpage - Sites, blogs
    • other - Tipos não previstos
  6. Restrições em <element-citation>:

    • Proibido: dois ou mais <ext-link>
    • Proibido: pontuação entre elementos (ponto, vírgula, etc.)
    • Proibido: <comment> abarcando apenas <ext-link>
    • Proibido: formatação completa em <italic> ou <bold>
  7. Restrições em <mixed-citation>:

    • Proibido: dois ou mais <ext-link>
    • Permitido apenas tags de formatação: <bold>, <italic>, <sup>, <sub>
  8. Elementos esperados em <element-citation>:

    • <source> - Título da fonte (esperado em todas as referências)
    • <year> - Ano (esperado em todas as referências)
  9. Regras de elementos específicos:

    • Quando há <fpage>, <lpage> é obrigatório
    • <size> deve ter @units="pages"
    • <date-in-citation> deve ter @content-type="access-date"
    • <person-group> deve ter @person-group-type quando presente
    • <name> dentro de <person-group> deve ter <surname>

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de <ref-list> em documentos indexáveis CRITICAL <ref-list> é obrigatório em <back> para documentos indexáveis (exceto errata, retratação, adendo, manifestação de preocupação, parecer)
2 Validar presença de <ref> CRITICAL <ref-list> deve conter pelo menos um elemento <ref>
3 Validar presença de <mixed-citation> CRITICAL Cada <ref> deve conter <mixed-citation>
4 Validar presença de <element-citation> CRITICAL Cada <ref> deve conter <element-citation>
5 Validar presença de @publication-type CRITICAL O atributo @publication-type é obrigatório em <element-citation>
6 Validar valores permitidos de @publication-type ERROR O valor de @publication-type deve estar na lista de valores permitidos
7 Validar ausência de múltiplos <ext-link> em <element-citation> ERROR É proibida a ocorrência de dois ou mais <ext-link> em <element-citation>
8 Validar ausência de múltiplos <ext-link> em <mixed-citation> ERROR É proibida a ocorrência de dois ou mais <ext-link> em <mixed-citation>

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
9 Validar pr...

📍 Connect Copilot coding agent with Jira, Azure Boards or Linear to delegate work to Copilot in one click without leaving your project management tool.

- Model: Add has_element_citation, ext_link counts, date_in_citation_content_type, names_without_surname
- Validation: Add validate_ref_list_presence, validate_ref_presence, validate_element_citation,
  validate_ext_link_count_*, validate_lpage_when_fpage, validate_size_units,
  validate_date_in_citation_content_type, validate_surname_in_name
- Rules: Add new error levels for all new validations
- Tests: 42 new tests in test_ref_list.py

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Implement validations for <ref-list> element Add ref-list validations for SPS 1.10 (rules 1-14) Mar 19, 2026
Copilot AI requested a review from robertatakenaka March 19, 2026 12:01
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 <ref-list>

2 participants