Skip to content

Valida pub-date "pub" contra hoje e contra collection (#1268) - #1273

Open
Rossi-Luciano wants to merge 1 commit into
scieloorg:masterfrom
Rossi-Luciano:feat/1268-pub-date-future-collection-tolerance
Open

Valida pub-date "pub" contra hoje e contra collection (#1268)#1273
Rossi-Luciano wants to merge 1 commit into
scieloorg:masterfrom
Rossi-Luciano:feat/1268-pub-date-future-collection-tolerance

Conversation

@Rossi-Luciano

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Adiciona duas novas regras de validação em FulltextDatesValidation (packtools/sps/validation/dates.py), especificamente para pub-date[@date-type="pub"]:

  1. validate_pub_date_not_in_futurepub não pode estar no futuro além de uma tolerância em dias (pub_date_future_tolerance_days, default 0).
  2. validate_pub_date_not_too_far_before_collectionpub não pode ser mais de N meses anterior ao ano de pub-date[@date-type="collection"] (pub_date_past_collection_tolerance_months, default 12).

Ambas as tolerâncias são parametrizáveis via article_dates_rules.json (novas chaves pub_date_future_tolerance_days, pub_date_past_collection_tolerance_months, e os respectivos *_error_level, default CRITICAL).

Coleções retrospectivas (pub muito posterior ao collection, mas não no futuro) continuam permitidas — não há checagem que bloqueie esse caso, comportamento coberto por teste de regressão.

Também adiciona as mensagens de advice correspondentes aos catálogos de i18n (pt_BR e es).

Onde a revisão poderia começar?

  • packtools/sps/validation/dates.py — métodos validate_pub_date_not_in_future e validate_pub_date_not_too_far_before_collection, e o registro delas em FulltextDatesValidation.validate().
  • packtools/sps/validation_rules/article_dates_rules.json — novas chaves de configuração.
  • tests/sps/validation/test_dates.py — classe TestPubDateFutureAndCollectionDistanceValidation.

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.xml_validator import get_validation_results

xml = b'''
<article article-type="research-article" xml:lang="pt">
    <front>
        <article-meta>
            <pub-date publication-format="electronic" date-type="pub">
                <day>27</day><month>07</month><year>2029</year>
            </pub-date>
            <pub-date publication-format="electronic" date-type="collection">
                <year>2026</year>
            </pub-date>
        </article-meta>
    </front>
</article>
'''
tree = etree.fromstring(xml)
results = [r for r in get_validation_results(tree, {}) if r.get("group") == "article dates" and r.get("response") != "OK"]
for r in results:
    print(r["response"], r["title"], r["advice"])

Deve incluir CRITICAL - pub-date pub not in future - ... must not be later than <hoje>.

pytest tests/sps/validation/test_dates.py -v cobre os 8 casos descritos na issue (A–E da tabela), incluindo o cenário exato do bug relatado (pub=2029, collection=2026).

Algum cenário de contexto que queira dar?

A issue relata que o artigo 0102-6720-abcd-39-e1948 (PID S0102-67202026000100609) ficou oculto silenciosamente em produção porque pub-date[@date-type="pub"] foi digitado como 2029 em vez de 2026. O OPAC filtra artigos com pub no futuro (mecanismo de "data de estreia" agendada), e nenhuma validação existente sinalizava isso — as validações atuais (schematron legado e year_value/complete_date do módulo novo) ou não checam valor de data, ou usam tolerâncias amplas (quase 1 ano) que não cobrem todos os casos, e nenhuma compara pub com collection.

As tolerâncias exatas (dias no futuro / meses no passado) ficam parametrizáveis e usam os defaults sugeridos no pseudocódigo da própria issue; a issue menciona que os valores exatos ainda serão confirmados com a equipe editorial.

Quais são tickets relevantes?

Closes #1268

Referências

Pseudocódigo e tabela de casos de teste vieram diretamente da issue #1268.

…on (scieloorg#1268)

Adiciona duas novas regras em FulltextDatesValidation: pub-date[date-type="pub"]
não pode estar no futuro além de uma tolerância em dias, e não pode ser mais de
N meses anterior ao ano de pub-date[date-type="collection"]. Ambas as
tolerâncias são parametrizáveis via article_dates_rules.json.

Resolve o gap relatado na issue: um typo no ano de pub (ex. 2029 em vez de
2026) fazia o OPAC ocultar o artigo silenciosamente, sem gerar erro em
nenhuma validação existente.
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ção de valores aceitáveis para pub-date do tipo pub

2 participants