Skip to content

Commit

Permalink
Add updated documention about the model from pass-data-model
Browse files Browse the repository at this point in the history
  • Loading branch information
markpatton committed Nov 20, 2023
1 parent 2eb38fa commit 771eaa4
Show file tree
Hide file tree
Showing 15 changed files with 412 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/dev/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ Only Committers on the PASS Eclipse project are able to make changes to the code
* [Docker Dependencies](integration-test-docker-dependencies.md) - Integration Testing and Docker Dependencies
* [Components](components.md) - PASS project components
* [Releasing PASS](release.md) - Releasing the PASS project
* [Data model](model/README.md) - Data model of the PASS project
39 changes: 39 additions & 0 deletions docs/dev/model/Deposit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Deposit

A [Submission](Submission.md) can have multiple Deposits, each to a different [Repository](Repository.md). This entity describes the interaction of PASS with a target [Repository](Repository.md) for an individual [Submission](Submission.md) with the purpose of satisfying one or more [Policies](Policy.md).

| Attribute | Type | Description |
| ---------------- | ------ | -------------
| id* | String | Autogenerated identifier of object. |
| depositStatusRef | String | A URL or some kind of reference that can be dereferenced, entity body parsed, and used to determine the status of Deposit |
| depositStatus* | String | Status of deposit ([_see list below_](#deposit-status-options)) |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| submission* | To One | [Submission](Submission.md) | Submission this Deposit is a part of |
| repository* | To One | [Repository](Repository.md) | Repository being deposited to |
| repositoryCopy | To One | [Repository Copy](RepositoryCopy.md) | Repository Copy for this Deposit |

*required

## Deposit status options

These are the possible statuses for a Deposit in the order they could occur. Note that not all repositories will go through every status.

<dl>
<dt>Intermediate status</dt>
<dd>A Deposit with an <em>intermediate</em> status indicates that the processing of the Deposit is not yet
complete. At some indeterminate point in the future, the status <em>may</em> be updated to a <em>terminal</em>
state.
</dd>
<dt>Terminal status</dt>
<dd>A Deposit with a <em>terminal</em> status indicates that the processing of the Deposit is complete.
</dd>
</dl>

| Value | State | Description |
| --------- | ----- | --- |
| submitted | Intermediate | PASS has sent a package to the target [Repository](Repository.md) and is waiting for an update on the status |
| rejected | Terminal | The target [Repository](Repository.md) has rejected the Deposit |
| failed | Intermediate | A failure occurred while performing the deposit, it may be re-tried later. |
| accepted | Terminal | The target [Repository](Repository.md) has accepted the [Files](File.md) into the repository and they are pending publication if not published already |
30 changes: 30 additions & 0 deletions docs/dev/model/File.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Files

Files are associated with a [Submissions](Submission.md) to be used to form [Deposits](Deposit.md) into [Repositories](Repository.md)

| Attribute | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| name* | String | File name, defaults to filesystem.name |
| uri* | String | Relative URI to the file servive which will return the bytestream |
| description | String | Description of file provided by [User](User.md) |
| fileRole | String | Role of the file ([_see list below_](#file-role-options)) |
| mimeType | String | Mime-type of file |


| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| submission* | To One | [Submission](Submission.md) | Submission the File is a part of |

*required

## File role options

Status options for grant

| Value | Description |
| ------------- | ------------- |
| manuscript | Author accepted manuscript |
| supplemental | Supplemental material for the [Publication](Publication.md) |
| figure | An image, data plot, map, or schematic |
| table | Tabular data |
16 changes: 16 additions & 0 deletions docs/dev/model/Funder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Funder

Funder / sponsor of a [Grant](Grant.md).

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| name* | String | Funder name |
| url | String | Funder URL |
| localKey | String | Local key assigned to the funder within the researcher's institution to support matching between PASS and a local system. The value is in the form of : `domain:type:value`. For a funder at JHU, an example would be`"johnshopkins.edu:funder:8675309"` |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| policy | To One | [Policy](Policy.md) | Policy associated with the Funder |

*required
33 changes: 33 additions & 0 deletions docs/dev/model/Grant.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Grant

Grants are imported from the institutional Grant system (FIBI in the case of JHU). They are associated with the Grant's PIs via their [User](User.md) records. Users of PASS can assign the Grants associated with them to [Submissions](Submission.md).

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| awardNumber* | String | Award number from funder |
| awardStatus | String | Status of award ([_see list below_](#status-options)) |
| localKey | String | A local key assigned to the Grant within the researcher's institution to support matching between PASS and a local system. The value is in the form of : `domain:type:value`. For a grant at JHU, an example would be`"johnshopkins.edu:grant:8675309"` |
| projectName* | String | Title of the research project |
| awardDate* | String | DateTime the grant was awarded |
| startDate | String | DateTime the grant started |
| endDate | String | DateTime the grant ended |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| primaryFunder* | To One | [Funder](Funder.md) | Funder that is the original source of the funds. This will often be the same as directFunder. |
| directFunder* | To One | [Funder](Funder.md) | Funding organization from which funds are directly received. This will often be the same as primaryFunder. |
| pi* | To One | [User](User.md) | User who is the Principal investigator |
| coPis | To Many | [[User](User.md)] | Users who are the co-principal investigators |

*required

## Status options

Status options for grant

| Value | Description |
| ------------- | ------------- |
| active | Grant currently active |
| pre_award | Award not yet received |
| terminated | Grant period is complete |
24 changes: 24 additions & 0 deletions docs/dev/model/Journal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Journal

A Journal is associated with a [Publication](Publication.md). In some cases, the Journal may be important for determining whether the [User](User.md) needs to manually create a [Submission](Submission.md) through PASS or whether the publisher has a pre-existing arrangement with the target [Repository](Repository.md). Specifically, in the case of the National Institutes of Health Public Access Policy, many Journals already make arrangements to submit the author's accepted manuscript to PubMed Central directly.

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| journalName* | String | Name of the journal |
| issns | String[] | Journal ISSNs - Elements are of the form type:value, where type is one of Online or Print, and value is the usual ISSN value xxxx-xxxx. Examples would be Online:1234-5678 and Print:9876-5432. When a type for an ISSN is not known, it should be stored with an empty type (for example :2468-1357).|
| nlmta | String | National Library of Medicine Title Abbreviation |
| pmcParticipation | String | This field indicates whether a journal participates in the NIH Public Access Program by sending final published article to PMC. If so, whether it requires additional processing fee ([see list below](#pmc-participation-options)) |

*required

## PMC Participation options

These are the possible submission methods relating to PMC deposits. A full description of these methods can be found on the [NIH public access website](https://publicaccess.nih.gov/submit_process.htm)

| Value | Description |
| ------------- | ------------- |
| A | PMC deposit route A. Journals automatically post the paper to PMC |
| B | PMC deposit route B. Authors must make special arrangements for some journals and publishers to post the paper directly to PMC |
| C | PMC deposit route C. Authors or their designee must submit manuscripts to NIHMS |
| D | PMC deposit route D. Some publishers will submit manuscripts to NIHMS |
17 changes: 17 additions & 0 deletions docs/dev/model/Policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Policy

A Policy describes the access compliance requirements for a specific [Funder](Funder.md) or Institution. These Policies are used to determine which [Repositories](Repository.md) a [Publication](Publication.md) should be [submitted](Submission.md) to in order to be in compliance with its associated [Grants](Grant.md) and the User's institutional policies.

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| title* | String | Title of policy e.g. "NIH Public Access Policy" |
| description | String | Several sentence description of policy |
| institution | String | URI identifying the Institution whose Policy this is (unused) |
| policyUrl | String | URL to the actual policy on the policy-owner's page |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| repositories* | To Many | [Repositories](Repository.md) | Repositories that satisfy this policy |

*required
18 changes: 18 additions & 0 deletions docs/dev/model/Publication.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Publication
Publication metadata to be associated with one or more [Submission](Submission.md)

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| title* | String | Title of work represented by Submission e.g. the title of the article |
| publicationAbstract | String | Abstract for work represented by Submission |
| doi | String | DOI of item being submitted, if available |
| pmid | String | PMID of item being submitted, if available |
| volume | String | Volume of journal that contains item (if article) |
| issue | String | Issue of journal that contains item (if article) |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| journal | To One | [Journal](Journal.md) | Journal the publication is part of (if article) |

*required
37 changes: 37 additions & 0 deletions docs/dev/model/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# PASS Data Model

The PASS data model is represented using (JSON API)[https://jsonapi.org/].

In this project you will find
* [Model Objects](#model-objects) - a description of the fields for each object in the model
* [Model Diagram](#model-diagram) - a diagram showing the relationships between each object

## Model Objects
The data model consists of the following components. Each is documented in full on its own page, you can see all of these pages in the [model](/docs/dev/model/) folder.

* [Deposit](Deposit.md)
* [File](File.md)
* [Funder](Funder.md)
* [Grant](Grant.md)
* [Journal](Journal.md)
* [Policy](Policy.md)
* [Publication](Publication.md)
* [Repository](Repository.md)
* [RepositoryCopy](RepositoryCopy.md)
* [Submission](Submission.md)
* [SubmissionEvent](SubmissionEvent.md)
* [User](User.md)

## Model Diagram

![data model](pass_data_model.png)

## Notes

### Identifiers

An object is uniquely identified by a tuple consiting of its id attribute and its type.

### DateTime attributes

DateTime attributes are strings formatted as per the Java DateTimeFormatter with pattern `yyyy-MM-dd'T'HH:mm:ss.SSSX`.
39 changes: 39 additions & 0 deletions docs/dev/model/Repository.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Repository

A Repository is the target of a [Deposit](Deposit.md). It is a platform where [copies](RepositoryCopy.md) of [publications](Publication.md) can be [deposited](Deposit.md) in order to comply with [Funder](Funder.md) and institutional access [policies](Policy.md).

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| name* | String | Name of repository e.g. "PubMed Central" |
| description | String | Several sentence description of repository |
| url | String | URL to the homepage of the repository so that PASS users can view the platform before deciding whether to participate in it |
| agreementText | String | The legal text that a `submitter` must agree to in order to submit a publication to this Repository |
| formSchema | String | _(deprecated)_ Stringified JSON representing a form template to be loaded by the front-end when this Repository is selected |
| integrationType | String | Type of integration that PASS has with the Repository ([_see list below_](#integration-type-options)) |
| repositoryKey | String | Key that is unique to this Repository instance within PASS. Used to look up the Repository when its URI is not available (e.g. prior to the creation of this Repository resource in Fedora). See below for a [_list of currently used keys_](#repository-key-values). |
| schemas | String[] | Contains an array of relative URIs that the pass-core metadata service can resolve to JSON schema documents describing the repository's metadata requirements |

*required

## Integration type options

These are the possible types of integration a Repository can have with PASS.

| Value | Description |
| --------------- | ------------- |
| full | PASS can make [Deposits](Deposit.md) to this Repository, and will received updates about its status |
| one-way | PASS can make [Deposits](Deposit.md) to this Repository but will not automatically receive updates about its status |
| web-link | A deposit cannot automatically be made to this Repository from PASS, only a web link can be created. |

## Repository key values

These are the repository keys currently used in PASS. This list will grow as more repositories are supported.

| Value | Repository name |
| --------------- | ------------- |
| pmc | [PubMed Central](https://www.ncbi.nlm.nih.gov/pmc/) |
| jscholarship | [Johns Hopkins JScholarship](https://jscholarship.library.jhu.edu/) |
| eric | [Education Resources Information Center](https://eric.ed.gov/) (ERIC) |
| dec | [Development Experience Clearinghouse](https://dec.usaid.gov/dec/) (DEC) |
| dash | [Harvard DASH](https://dash.harvard.edu/) |
29 changes: 29 additions & 0 deletions docs/dev/model/RepositoryCopy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Repository Copy

A Repository Copy represents a copy of a [Publication](Publication.md) that exists in a target [Repository](Repository.md). The Repository Copy either (1) was the result of an accepted [Deposit](Deposit.md) from PASS, in which case there would be a link to the Copy from the related Deposit record, or (2) was created outside of PASS by some other process. In this second instance, the PASS system stores the information to help determine whether a Publication is already compliance.

| Field | Type | Description |
| ------------- | ------------- | ------------- |
| id* | String | Autogenerated identifier of object |
| externalIds | String[] | IDs assigned to this entity by the target repository |
| copyStatus* | String | Status of the copy in the external repository's workflow ([_see list below_](#copy-status-options)) |
| accessUrl | String | URL to access the item in the repository, could allow Users to see the final result |

| Relationship | Type | Target | Description |
| ---------------- | ------ | --------- | ----------- |
| publication* | To One | [Publication](Publication.md) | Publication that this is a copy of |
| repository* | To One | [Repository](Repository.md) | Repository being deposited to |

*required

## Copy status options

These are the possible statuses for a Deposit in the order they could occur. Note that not all repositories will go through every status.

| Value | Description |
| --------------- | ------------- |
| accepted | The target [Repository](Repository.md) has indicated that the Deposit has been accepted|
| in-progress | The target [Repository](Repository.md) is processing the files |
| stalled | The target [Repository](Repository.md) has detected a problem that has caused the progress to stall. This will likely require some direct interaction with the repository to re-initiate the process. Examples include, when there are incorrect files, or when a user did not respond to a validation request in a resonable time. |
| complete | The target [Repository](Repository.md) has accepted the files, and publication is pending if not already complete |
| rejected | The target [Repository](Repository.md) has rejected the files. |
Loading

0 comments on commit 771eaa4

Please sign in to comment.