Skip to content

Add <sec> element validation (SPS 1.10, 7/10 rules)#1137

Draft
Copilot wants to merge 2 commits intomasterfrom
copilot/create-validations-for-sec-element
Draft

Add <sec> element validation (SPS 1.10, 7/10 rules)#1137
Copilot wants to merge 2 commits intomasterfrom
copilot/create-validations-for-sec-element

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 19, 2026

O que esse PR faz?

Implementa validações para o elemento <sec> conforme SPS 1.10, cobrindo 7 de 10 regras (70%):

Regra Nível Descrição
<title> obrigatório CRITICAL Acessibilidade
@sec-type valores válidos ERROR Lista permitida (cases, conclusions, intro, methods, etc.)
@id em transcript ERROR <sec sec-type="transcript"> exige @id
data-availability obrigatório ERROR Para research-article, case-report, etc.
Formato combinado com pipe WARNING `materials
Tipos não-combináveis WARNING transcript, supplementary-material, data-availability
Conteúdo <p> WARNING Ao menos um parágrafo

Novos arquivos:

  • packtools/sps/models/sec.pySec, ArticleSecs
  • packtools/sps/validation/sec.pySecValidation, XMLSecValidation
  • packtools/sps/validation_rules/sec_rules.json
  • tests/sps/validation/test_sec.py — 29 testes

Modificados:

  • xml_validations.pyvalidate_secs()
  • xml_validator.py — grupo sec no pipeline

Onde a revisão poderia começar?

packtools/sps/validation/sec.py — contém toda a lógica de validação. O modelo em packtools/sps/models/sec.py é a dependência principal.

Como este poderia ser testado manualmente?

python -m pytest tests/sps/validation/test_sec.py -v

Ou via pipeline completo:

from lxml import etree
from packtools.sps.validation.sec import XMLSecValidation

xml = '''<article article-type="research-article">
    <body>
        <sec sec-type="intro">
            <title>Introduction</title>
            <p>Content.</p>
        </sec>
    </body>
</article>'''

tree = etree.fromstring(xml.encode())
params = {"valid_sec_types": ["cases","conclusions","data-availability","discussion","intro","materials","methods","results","subjects","supplementary-material","transcript"],
          "data_availability_required_article_types": ["research-article"],
          "non_combinable_sec_types": ["data-availability","supplementary-material","transcript"],
          "title_error_level": "CRITICAL", "sec_type_value_error_level": "ERROR",
          "transcript_id_error_level": "ERROR", "data_availability_error_level": "ERROR",
          "combined_format_error_level": "WARNING", "non_combinable_error_level": "WARNING",
          "content_error_level": "WARNING"}

for r in XMLSecValidation(tree, params).validate():
    if r: print(f"{r['title']}: {r['response']}")

Algum cenário de contexto que queira dar?

Segue os mesmos padrões de GraphicValidation/XMLGraphicValidation: modelo extrai dados, validação individual por elemento via SecValidation, e XMLSecValidation orquestra + adiciona validação de nível de documento (presença de data-availability). Regras P2 (hierarquia de @sec-type, @specific-use, ordem lógica) ficam fora do escopo conforme definido na issue.

Screenshots

N/A — validação backend sem componente visual.

Quais são tickets relevantes?

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

Nota: Algumas validações para <sec> 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 <sec> representa seções de texto do documento. Para acessibilidade, cada seção deve obrigatoriamente conter <title>. Seções de primeiro nível que correspondem a tipos específicos (métodos, resultados, etc.) devem ter o atributo @sec-type. Alguns tipos de documentos requerem obrigatoriamente seção de disponibilidade de dados (@sec-type="data-availability"). Validações corretas garantem acessibilidade, presença de elementos obrigatórios, e conformidade com requisitos de tipos de documentos.

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.sec

Regras principais conforme SPS 1.10:

  1. Ocorrência:

    • <sec> pode aparecer zero ou mais vezes em: <abstract>, <app>, <back>, <bio>, <body>, <boxed-text>, <sec>, <trans-abstract>
  2. Elemento obrigatório (Acessibilidade):

    • <title> é mandatório em <sec> para criar títulos acessíveis
  3. Atributo @sec-type:

    • Obrigatório apenas para seções de primeiro nível que correspondem aos valores da lista
    • Caso haja seção de primeiro nível diferente, o atributo não deve ser inserido
  4. Valores permitidos para @sec-type:

    • cases - Relatos/casos/estudos de caso
    • conclusions - Conclusões/considerações finais/comentários
    • data-availability - Declaração de Disponibilidade de Dados
    • discussion - Discussões/interpretações
    • intro - Introdução/sinopse
    • materials - Materiais
    • methods - Metodologias/métodos/procedimentos
    • results - Resultados/descobertas
    • subjects - Participantes/Pacientes
    • supplementary-material - Material suplementar/material adicional
    • transcript - Transcrição de vídeo ou áudio
  5. Seções combinadas:

    • Quando título é composto por mais de um item, usar pipe | como separador
    • Exemplo: materials|methods
    • Exceção: supplementary-material, transcript e data-availability não podem ser combinados
  6. @sec-type="data-availability" obrigatório:

    • Mandatório para tipos de documentos: data-article, brief-report, case-report, rapid-communication, research-article, review-article
    • Deve também ter @specific-use
  7. @sec-type="transcript" exige @id:

    • Seções de transcrição devem ter atributo @id obrigatório
  8. Estrutura:

    • Título (<title>) seguido de um ou mais parágrafos (<p>)

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de <title> CRITICAL O elemento <title> é mandatório em <sec> (requisito de acessibilidade)
2 Validar valores permitidos de @sec-type ERROR Quando presente, @sec-type deve ter valor da lista permitida
3 Validar presença de @id em transcript ERROR Seção com @sec-type="transcript" deve ter atributo @id
4 Validar presença de data-availability em documentos indexáveis ERROR Documentos indexáveis (research-article, case-report, etc.) devem ter seção @sec-type="data-availability"

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
5 Validar formato de seções combinadas WARNING Seções combinadas devem usar pipe `
6 Validar que transcript, supplementary-material e data-availability não são combinados WARNING Tipos especiais não devem aparecer em seções combinadas (sem pipe)
7 Validar presença de conteúdo WARNING Seção deve conter pelo menos um parágrafo <p> após <title>

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
8 Validar que @sec-type só é usado em seções de primeiro nível Média complexidade - requer análise de hierarquia de elementos
9 Validar presença de @specific-use quando @sec-type="data-availability" Baixa prioridade - validação específica de data-availability
10 Validar ordem lógica de seções (intro, methods, results, discussion, conclusions) Baixa prioridade - ordem é recomendação, não regra rígida

Arquivos a Criar/Modificar

Avaliar existentes (podem ter validações parciais...


🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.

Implements validation for <sec> elements:
- Rule 1: <title> presence (CRITICAL)
- Rule 2: @sec-type valid values (ERROR)
- Rule 3: @id for transcript sections (ERROR)
- Rule 4: data-availability section for indexable articles (ERROR)
- Rule 5: Combined sec-type pipe format (WARNING)
- Rule 6: Non-combinable sec-types (WARNING)
- Rule 7: Content presence (WARNING)

New files:
- packtools/sps/models/sec.py - Model for <sec> data extraction
- packtools/sps/validation/sec.py - Validation logic
- packtools/sps/validation_rules/sec_rules.json - Rules config
- tests/sps/validation/test_sec.py - 29 unit tests

Modified files:
- packtools/sps/validation/xml_validations.py - Added validate_secs()
- packtools/sps/validation/xml_validator.py - Added sec group

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

2 participants