Skip to content

Add <permissions> element validation per SPS 1.10#1133

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

Add <permissions> element validation per SPS 1.10#1133
Copilot wants to merge 2 commits intomasterfrom
copilot/create-validations-permissions-element

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 19, 2026

O que esse PR faz?

Implementa 10 regras de validação para o elemento <permissions> conforme SPS 1.10 e Critérios SciELO Brasil:

# Regra Nível
1 Presença de <permissions> em <article-meta> CRITICAL
2 Unicidade de <permissions> ERROR
3 Presença de <license> CRITICAL
4 @license-type="open-access" CRITICAL
5 Presença de @xlink:href CRITICAL
6 Presença de @xml:lang CRITICAL
7 Presença de <license-p> CRITICAL
8 URL CC-BY válida ERROR
9 Consistência @xml:lang@xlink:href (deed suffix) ERROR
10 Estrutura de copyright (year mencionado no statement mas sem <copyright-year>) WARNING

Onde a revisão poderia começar?

packtools/sps/validation/permissions.py — classe PermissionsValidation com todas as regras.

Como este poderia ser testado manualmente?

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

39 testes cobrindo todos os cenários: XML válido (en/pt/es, com/sem copyright), atributos ausentes, URLs inválidas, inconsistência idioma/link, duplicidade de <permissions>.

Algum cenário de contexto que queira dar?

  • Já existia ArticleLicenseValidation para validar conteúdo de licença contra dados esperados do journal. Este módulo é complementar — valida a estrutura do elemento <permissions> independente de dados do journal.
  • Níveis de erro são configuráveis via permissions_rules.json.
  • Integrado ao pipeline via xml_validator.py como grupo "permissions".

Arquivos criados:

  • packtools/sps/validation/permissions.py
  • packtools/sps/validation_rules/permissions_rules.json
  • tests/sps/validation/test_permissions.py

Arquivos modificados:

  • packtools/sps/validation/xml_validations.pyvalidate_permissions()
  • packtools/sps/validation/xml_validator.py — yield do grupo "permissions"

Screenshots

N/A

Quais são tickets relevantes?

N/A

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 <permissions> conforme a especificação SPS 1.10 e Critérios SciELO Brasil, aumentando a conformidade de X% para 75% (9 de 12 regras).

Nota: Algumas validações para <permissions> 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 <permissions> define condições sob as quais o conteúdo do documento pode ser usado, acessado e distribuído. Para SciELO Brasil é obrigatória a declaração de licença Creative Commons CC-BY. Validações corretas garantem conformidade com políticas de Ciência Aberta, presença de atributos obrigatórios, e consistência entre idioma e links de licença.

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

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

  1. Ocorrência:

    • <permissions> deve aparecer uma vez em <article-meta>
  2. Licença obrigatória (SciELO Brasil):

    • Declaração de licença Creative Commons CC-BY é obrigatória
    • Elemento <license> é obrigatório
    • Elemento <license-p> é obrigatório dentro de <license>
  3. Atributos obrigatórios em <license>:

    • @license-type="open-access" (obrigatório)
    • @xlink:href (obrigatório - link CC-BY correspondente ao idioma)
    • @xml:lang (obrigatório - idioma do texto da licença)
  4. Links válidos para @xlink:href por idioma:

    • Português: https://creativecommons.org/licenses/by/4.0/deed.pt
    • Inglês: https://creativecommons.org/licenses/by/4.0/deed.en
    • Espanhol: https://creativecommons.org/licenses/by/4.0/deed.es
  5. Consistência idioma e link:

    • @xml:lang deve corresponder ao idioma do link em @xlink:href
    • Exemplo: xml:lang="pt" → link deve terminar com deed.pt
  6. Texto padrão para <license-p>:

    • Quando PDF não indica texto específico, usar: "This is an open-access article distributed under the terms of the Creative Commons Attribution License"
  7. Elementos de Copyright (condicionais):

    • <copyright-statement> - Quando PDF apresenta declaração de copyright
    • <copyright-year> - Quando há informação de ano
    • <copyright-holder> - Quando há informação do detentor
  8. Conformidade com Critérios SciELO Brasil:

    • Seção 2.3: Ciência Aberta
    • Seção 5.2.4: Qualificação editorial
    • Seção 5.2.10.1: Interoperabilidade

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de <permissions> CRITICAL O elemento <permissions> é obrigatório em <article-meta> (Critério SciELO Brasil)
2 Validar unicidade de <permissions> ERROR O elemento <permissions> deve aparecer exatamente uma vez em <article-meta>
3 Validar presença de <license> CRITICAL O elemento <license> é obrigatório em <permissions>
4 Validar presença de @license-type="open-access" CRITICAL O atributo @license-type com valor "open-access" é obrigatório em <license>
5 Validar presença de @xlink:href CRITICAL O atributo @xlink:href é obrigatório em <license>
6 Validar presença de @xml:lang CRITICAL O atributo @xml:lang é obrigatório em <license>
7 Validar presença de <license-p> CRITICAL O elemento <license-p> é obrigatório em <license>
8 Validar URL de licença CC-BY ERROR O @xlink:href deve ser um link válido de Creative Commons CC-BY 4.0

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
9 Validar consistência @xml:lang e @xlink:href ERROR O idioma em @xml:lang deve corresponder ao idioma no link @xlink:href (pt→deed.pt, en→deed.en, es→deed.es)
10 Validar estrutura de copyright quando presente WARNING Se houver <copyright-statement>, validar presença de <copyright-year> quando ano estiver mencionado no statement

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
11 Validar sincronização de texto <license-p> com PDF Alta complexidade - requer análise de PDF externo
12 Validar formato de ano em <copyright-year> Baixa prioridade - schema JATS já valida

Arquivos a Criar/Modificar

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

  • packtools/sps/models/permissions.py ou similar – Verificar se modelo existe
  • `packtools/...

💬 Send tasks to Copilot coding agent from Slack and Teams to turn conversations into code. Copilot posts an update in your thread when it's finished.

Implement 10 validation rules for the <permissions> element:
1. Presence of <permissions> in <article-meta> (CRITICAL)
2. Uniqueness of <permissions> (ERROR)
3. Presence of <license> (CRITICAL)
4. @license-type="open-access" (CRITICAL)
5. @xLink:href presence (CRITICAL)
6. @xml:lang presence (CRITICAL)
7. <license-p> presence (CRITICAL)
8. Valid CC-BY URL (ERROR)
9. Language/link consistency (ERROR)
10. Copyright structure validation (WARNING)

Files added:
- packtools/sps/validation/permissions.py
- packtools/sps/validation_rules/permissions_rules.json
- tests/sps/validation/test_permissions.py

Files modified:
- packtools/sps/validation/xml_validations.py (integration)
- packtools/sps/validation/xml_validator.py (orchestrator)

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Implement validations for permissions element Add <permissions> element validation per SPS 1.10 Mar 19, 2026
Copilot AI requested a review from robertatakenaka March 19, 2026 11:56
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 <permissions>

2 participants