@@ -273,6 +273,57 @@ def transform(self, data):
273273 return data
274274
275275
276+ class XMLArticleMetaAuthorNotesPipe (plumber .Pipe ):
277+ """
278+ Pipe para criar author-notes como irmão de contrib-group.
279+ Move elementos corresp de back para dentro de author-notes.
280+ Executa após XMLArticleMetacontribGroupPipe.
281+ """
282+
283+ def precond (data ):
284+ raw , xml = data
285+
286+ # Verifica se existe corresp em back
287+ corresp_elements = xml .xpath (".//back//corresp|.//body//corresp" )
288+ if not corresp_elements :
289+ raise plumber .UnmetPrecondition ()
290+
291+ @plumber .precondition (precond )
292+ def transform (self , data ):
293+ raw , xml = data
294+
295+ # Encontra elementos corresp em back
296+ corresp_elements = xml .xpath (".//back//corresp|.//body//corresp" )
297+
298+ if corresp_elements :
299+ # Cria author-notes
300+ author_notes = ET .Element ("author-notes" )
301+
302+ # Move cada corresp para dentro de author-notes
303+ for corresp in corresp_elements :
304+ # Remove corresp de sua localização atual
305+ parent = corresp .getparent ()
306+ if parent is not None :
307+ parent .remove (corresp )
308+
309+ # Adiciona corresp ao author-notes
310+ author_notes .append (corresp )
311+
312+ # Insere author-notes como irmão de contrib-group
313+ article_meta = xml .find ("./front/article-meta" )
314+ contrib_group = article_meta .find ("contrib-group" )
315+
316+ if contrib_group is not None :
317+ # Insere author-notes após contrib-group
318+ contrib_group_index = list (article_meta ).index (contrib_group )
319+ article_meta .insert (contrib_group_index + 1 , author_notes )
320+ else :
321+ # Se não há contrib-group, adiciona ao final de article-meta
322+ article_meta .append (author_notes )
323+
324+ return data
325+
326+
276327class XMLArticleMetaAffiliationPipe (plumber .Pipe ):
277328 def _addrline (self , affiliation ):
278329 addrline = None
0 commit comments