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:
document_type == 'undefined' (ou equivalente: v71 ausente / não mapeado); e
- 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.
<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
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:program → isReviewOf (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
Referências
Critérios de aceite
- Documentos com
document_type == undefined e v241.t == peer-reviewed-material geram <peer_review type="referee-report"> conforme schema 5.5.0
- Relação
isReviewOf obrigatória apontando para o DOI do artigo revisado
- Demais tipos de documento do SciELO não são afetados
- Testes automatizados cobrindo o caso de referência e regressões
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.pytrata todos os documentos comojournal_article. O campov241(related_documents) só é usado para emitir relações emrel:programdentro dojournal_articleexistente — não há ramificação de record type.Caso real no SciELO
Artigo de referência: S2237-96222025000100800
document_typeundefinedv71ausente no registrov241t: peer-reviewed-material,i: 10.1590/S2237-96222024v33e20240180.en,n: doiv337/v23710.1590/s2237-96222025v34e20240180.av12No SPS, pareceres publicados como documento separado usam
@object-type="peer-reviewed-material"no<related-object>apontando para o DOI do artigo revisado — exatamente o quev241representa no ArticleMeta.Regra de detecção proposta
Tratar o documento corrente como
peer_reviewquando:document_type == 'undefined'(ou equivalente:v71ausente / não mapeado); ev241(raw.related_documents) comrelated_article_type == 'peer-reviewed-material'.Comportamento atual vs. esperado
Atual (
export_crossref.py)A relação
isReviewOfjá é emitida viaRELATED_ARTICLE_TYPE_RELATIONS['peer-reviewed-material'], mas a estrutura do registro está incorreta.Esperado (Crossref 5.5.0 — exemplo oficial)
Escopo de implementação
1. Ramificação de record type
XMLJournalArticlePipe)<peer_review>no<body>em vez de<journal><journal_article><body>só pode conter um tipo de registro — batches com mix de artigos e peer reviews precisam ser separados2. Mapeamento de campos (documento S2237-96222025000100800)
peer_reviewv12(título)<titles><title>v10(autores)<contributors>comcontributor_role="reviewer"ou<anonymous/>v70(afiliações)<affiliations><institution>(schema 5.5.0)v65(data)<review_date>(nãopublication_date)v241peer-reviewed-materialrel:program→isReviewOf(obrigatório)v337/v237<doi_data>v40(idioma)languagenopeer_review3. Atributos do
<peer_review>Definir defaults e enriquecer quando houver metadados no SPS:
typereferee-reportreferee-report)stagepre-publicationpost-publicationse houver indicador no XML de origemrevision-round04. O que não incluir em
peer_reviewConforme guia Crossref:
citation_list— não suportadoisReviewOf5. 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
S2237-96222025000100800(ou fixture equivalente): XML contém<peer_review>, não<journal_article>isReviewOfaponta para10.1590/S2237-96222024v33e20240180.enreview_datepresenteresearch-articlecomv241sempeer-reviewed-materialcontinua comojournal_articleundefinedsemv241continua comojournal_articlecrossref5.5.0.xsdReferências
articlemeta/export_crossref.py—XMLJournalArticlePipe,XMLProgramRelatedItemPipe(peer-reviewed-material→isReviewOf)Critérios de aceite
document_type == undefinedev241.t == peer-reviewed-materialgeram<peer_review type="referee-report">conforme schema 5.5.0isReviewOfobrigatória apontando para o DOI do artigo revisado