Skip to content

Crossref 5.5.0: exportar peer_review quando v241 indica peer-reviewed-material #335

Description

@samuelveigarangel

Contexto

Com a migração do schema Crossref para 5.5.0, documentos do universo SciELO que representam artefatos de revisão por pares (open peer review) devem ser depositados como record type <peer_review>, e não como <journal><journal_article>.

Hoje o export_crossref.py trata todos os documentos como journal_article. O campo v241 (related_documents) só é usado para emitir relações em rel:program dentro do journal_article existente — não há ramificação de record type.

Caso real no SciELO

Artigo de referência: S2237-96222025000100800

Campo Valor Observação
document_type undefined v71 ausente no registro
v241 t: peer-reviewed-material, i: 10.1590/S2237-96222024v33e20240180.en, n: doi Aponta para o artigo revisado
v337 / v237 DOI próprio do parecer 10.1590/s2237-96222025v34e20240180.a
v12 Título começa com "Reviewed article: ..." Indica conteúdo de peer review

No SPS, pareceres publicados como documento separado usam @object-type="peer-reviewed-material" no <related-object> apontando para o DOI do artigo revisado — exatamente o que v241 representa no ArticleMeta.

Regra de detecção proposta

Tratar o documento corrente como peer_review quando:

  1. document_type == 'undefined' (ou equivalente: v71 ausente / não mapeado); e
  2. Existe ao menos uma entrada em v241 (raw.related_documents) com related_article_type == 'peer-reviewed-material'.
def is_peer_review_document(raw):
    if raw.document_type != 'undefined':
        return False
    related = getattr(raw, 'related_documents', None) or []
    return any(
        r.get('related_article_type') == 'peer-reviewed-material'
        for r in related
    )

Nota: peer-reviewed-material em v241 indica que este documento é a revisão e o i/id é o DOI do artigo revisado → relação Crossref isReviewOf. Isso difere de reviewer-report em v241, que hoje mapeia para hasReview no artigo revisado (lado oposto da relação).

Comportamento atual vs. esperado

Atual (export_crossref.py)

<body>
  <journal>
    <journal_article publication_type="full_text">
      ...
      <program xmlns="http://www.crossref.org/relations.xsd">
        <related_item>
          <inter_work_relation relationship-type="isReviewOf" identifier-type="doi">
            10.1590/S2237-96222024v33e20240180.en
          </inter_work_relation>
        </related_item>
      </program>
      <doi_data>...</doi_data>
    </journal_article>
  </journal>
</body>

A relação isReviewOf já é emitida via RELATED_ARTICLE_TYPE_RELATIONS['peer-reviewed-material'], mas a estrutura do registro está incorreta.

Esperado (Crossref 5.5.0 — exemplo oficial)

<body>
  <peer_review stage="pre-publication" type="referee-report" revision-round="0">
    <contributors>...</contributors>          <!-- role reviewer ou <anonymous/> -->
    <titles><title>...</title></titles>
    <review_date>...</review_date>            <!-- obrigatório; mapear de v65 ou data equivalente -->
    <program xmlns="http://www.crossref.org/relations.xsd">
      <related_item>
        <inter_work_relation relationship-type="isReviewOf" identifier-type="doi">
          10.1590/S2237-96222024v33e20240180.en
        </inter_work_relation>
      </related_item>
    </program>
    <doi_data>
      <doi>10.1590/s2237-96222025v34e20240180.a</doi>
      <resource>...</resource>
    </doi_data>
  </peer_review>
</body>

Escopo de implementação

1. Ramificação de record type

  • Detectar peer review conforme regra acima (antes ou no lugar de XMLJournalArticlePipe)
  • Gerar <peer_review> no <body> em vez de <journal><journal_article>
  • Restrição Crossref: um <body> só pode conter um tipo de registro — batches com mix de artigos e peer reviews precisam ser separados

2. Mapeamento de campos (documento S2237-96222025000100800)

Metadado SciELO Elemento Crossref peer_review
v12 (título) <titles><title>
v10 (autores) <contributors> com contributor_role="reviewer" ou <anonymous/>
v70 (afiliações) <affiliations><institution> (schema 5.5.0)
v65 (data) <review_date> (não publication_date)
v241 peer-reviewed-material rel:programisReviewOf (obrigatório)
v337 / v237 <doi_data>
v40 (idioma) atributo language no peer_review

3. Atributos do <peer_review>

Definir defaults e enriquecer quando houver metadados no SPS:

Atributo Valor sugerido Fonte
type referee-report Default para pareceres SciELO (equivalente SPS referee-report)
stage pre-publication Default; usar post-publication se houver indicador no XML de origem
revision-round 0 Obrigatório no schema; enriquecer se SPS passar rodada

4. O que não incluir em peer_review

Conforme guia Crossref:

  • Crossmark — não suportado
  • citation_list — não suportado
  • Metadados do artigo revisado (autores, título do artigo) — só via isReviewOf

5. Schema 5.5.0

Esta issue assume a migração base para 5.5.0 (cabeçalho, afiliações <affiliations>/<institution>, validação XSD 1.1). Depende da issue de migração de schema.

6. Testes

  • Caso S2237-96222025000100800 (ou fixture equivalente): XML contém <peer_review>, não <journal_article>
  • isReviewOf aponta para 10.1590/S2237-96222024v33e20240180.en
  • review_date presente
  • Documento research-article com v241 sem peer-reviewed-material continua como journal_article
  • Documento undefined sem v241 continua como journal_article
  • Validação contra crossref5.5.0.xsd

Referências

Critérios de aceite

  1. Documentos com document_type == undefined e v241.t == peer-reviewed-material geram <peer_review type="referee-report"> conforme schema 5.5.0
  2. Relação isReviewOf obrigatória apontando para o DOI do artigo revisado
  3. Demais tipos de documento do SciELO não são afetados
  4. Testes automatizados cobrindo o caso de referência e regressões

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions