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 = {