From 2706330d9c7c75aa30e06b92fa3b326c97ea9757 Mon Sep 17 00:00:00 2001 From: Nathan Lisgo Date: Wed, 19 Jun 2024 18:55:01 +0100 Subject: [PATCH] Added support for corrected assertions in docmap Implemented parsing and generation of corrected assertions in docmap. Tests and fixtures were updated to verify this new feature. An additional correctedDate field was added to preprints and reviewed preprints. A new corrected status was also added to AssertionStatus. --- src/generators/docmap-generators.ts | 6 ++++ src/parser/docmap-parser.test.ts | 22 ++++++++++++ src/parser/docmap-parser.ts | 14 ++++++++ src/test-fixtures/docmap-parser.ts | 52 ++++++++++++++++++++++++++++- src/types/docmap.ts | 1 + 5 files changed, 94 insertions(+), 1 deletion(-) diff --git a/src/generators/docmap-generators.ts b/src/generators/docmap-generators.ts index 786694a..7c81d93 100644 --- a/src/generators/docmap-generators.ts +++ b/src/generators/docmap-generators.ts @@ -209,6 +209,12 @@ export const generatePeerReviewedAssertion = (item: Item, date?: Date): Assertio happened: date, }); +export const generateCorrectedAssertion = (item: Item, date?: Date): Assertion => ({ + item, + status: AssertionStatus.Corrected, + happened: date, +}); + export const generateEnhancedAssertion = (item: Item, date?: Date): Assertion => ({ item, status: AssertionStatus.Enhanced, diff --git a/src/parser/docmap-parser.test.ts b/src/parser/docmap-parser.test.ts index b70ef5f..cd76ac9 100644 --- a/src/parser/docmap-parser.test.ts +++ b/src/parser/docmap-parser.test.ts @@ -445,6 +445,28 @@ describe('docmap-parser', () => { }); }); + it('can parse a docmap with an inference of version of record corrected from input/outputs', () => { + const parsedData = parseDocMap(fixtures.inferredVersionOfRecordCorrected()); + + expect(parsedData.versions.length).toStrictEqual(1); + expect(parsedData.versions[0]).toMatchObject({ + doi: 'vor/article1', + id: 'vor/article1', + publishedDate: new Date('2024-05-09'), + url: 'https://version-of-record', + content: [ + 'https://doi.org/version-of-record', + 'https://doi.org/version-of-record-corrected', + 'https://doi.org/version-of-record-corrected-again', + ], + versionIdentifier: '1', + correctedDate: [ + new Date('2024-06-09'), + new Date('2024-06-10'), + ], + }); + }); + it('inference of reviewed preprint from input/outputs', () => { const parsedData = parseDocMap(fixtures.inferredReviewedPreprint()); diff --git a/src/parser/docmap-parser.ts b/src/parser/docmap-parser.ts index b477eff..b75af61 100644 --- a/src/parser/docmap-parser.ts +++ b/src/parser/docmap-parser.ts @@ -67,6 +67,7 @@ type Preprint = { url?: string, content?: string[], license?: string, + correctedDate?: Date[], }; type ReviewedPreprint = { @@ -80,6 +81,7 @@ type ReviewedPreprint = { reviewedDate?: Date, authorResponseDate?: Date, license?: string, + correctedDate?: Date[], }; type RelatedContentItem = { @@ -454,6 +456,18 @@ const parseStep = (step: Step, preprints: Array, manuscript: M preprint.sentForReviewDate = preprintUnderReviewAssertion.happened; } + const preprintCorrectedAssertion = step.assertions.find((assertion) => assertion.status === AssertionStatus.Corrected); + if (preprintCorrectedAssertion) { + // Update type and sent for review date + const preprint = findAndUpdateOrAddPreprintDescribedBy(preprintCorrectedAssertion.item, preprints, manuscript); + if (preprintCorrectedAssertion.happened) { + if (!Array.isArray(preprint.correctedDate)) { + preprint.correctedDate = []; + } + preprint.correctedDate.push(preprintCorrectedAssertion.happened); + } + } + const inferredRepublished = getRepublishedPreprint(step); if (inferredRepublished) { // preprint input, preprint output, but no evaluations = supersede input preprint with output Reviewed Preprint diff --git a/src/test-fixtures/docmap-parser.ts b/src/test-fixtures/docmap-parser.ts index 28d49db..044b505 100644 --- a/src/test-fixtures/docmap-parser.ts +++ b/src/test-fixtures/docmap-parser.ts @@ -19,7 +19,7 @@ import { generateUnderReviewAssertion, generateWebContent, generateManuscript, - generateInsight, generateVersionOfRecord, + generateInsight, generateVersionOfRecord, generateCorrectedAssertion, } from '../generators/docmap-generators'; const publisher = { @@ -548,6 +548,56 @@ export const fixtures = { return generateDocMap('test', publisher, firstStep); }, + inferredVersionOfRecordCorrected: (): DocMap => { + const versionOfRecordOutput = generateVersionOfRecord(new Date('2024-05-09'), [generateWebContent('https://doi.org/version-of-record')], 'vor/article1', 'https://version-of-record'); + const versionOfRecord = { + type: versionOfRecordOutput.type, + doi: versionOfRecordOutput.doi, + versionIdentifier: versionOfRecordOutput.versionIdentifier, + }; + const firstStep = generateStep([], [generateAction([], [versionOfRecordOutput])], []); + const nextStep = addNextStep(firstStep, generateStep( + [{ + ...versionOfRecord, + identifier: versionOfRecordOutput.identifier, + }], + [ + generateAction([], [ + { + ...versionOfRecord, + content: [ + generateWebContent('https://doi.org/version-of-record-corrected') + ], + }, + ]), + ], + [ + generateCorrectedAssertion(versionOfRecord, new Date('2024-06-09')), + ], + )); + addNextStep(nextStep, generateStep( + [{ + ...versionOfRecord, + identifier: versionOfRecordOutput.identifier, + }], + [ + generateAction([], [ + { + ...versionOfRecord, + content: [ + generateWebContent('https://doi.org/version-of-record-corrected-again') + ], + }, + ]), + ], + [ + generateCorrectedAssertion(versionOfRecord, new Date('2024-06-10')), + ], + )); + + return generateDocMap('test', publisher, firstStep); + }, + preprintWithPublishedDateAndNoAssertedPublishDate: (): DocMap => { const preprint = generatePreprint('preprint/article1'); const preprintWithDate = generatePreprint('preprint/article1', new Date('2022-03-01')); diff --git a/src/types/docmap.ts b/src/types/docmap.ts index ae85f26..0a8e1f1 100644 --- a/src/types/docmap.ts +++ b/src/types/docmap.ts @@ -49,6 +49,7 @@ export enum AssertionStatus { VersionOfRecord = 'version-of-record', Revised = 'revised', Republished = 'republished', + Corrected = 'corrected', } export type Assertion = {