Skip to content

Update Openspecimen to 6.3RC8#1

Open
ChristianMUG wants to merge 3484 commits into
bibbox:masterfrom
krishagni:master
Open

Update Openspecimen to 6.3RC8#1
ChristianMUG wants to merge 3484 commits into
bibbox:masterfrom
krishagni:master

Conversation

@ChristianMUG

Copy link
Copy Markdown

Getting the newest branch from openspecimen

1) When no files are selected or validation fails and
2) the file is uploaded asynchronously to the server
when the message is processed successfully.
listing of containers based on the restrictions on the leaf node containers.

Used virtual columns to auto compute free spaces in the container.
500 storage container objects in-memory irrespective of the depth and width
of the container tree/hierarchy.
…m both

container and specimen perspective.

Earlier the API was clearing the position only from the container perspective.
This was causing the position to be resaved by the specimen resulting in
stale update error.
Supports 2 OAuth workflows:

1. Client Credentials Flow: The client obtains JWT by authenticating itself
with the OAuth provider (without involving OpenSpecimen) and then uses
the JWT as a Bearer token for subsequent communication with OpenSpecimen
(invoking APIs).

2. Authorization Code Flow using PKCE: In this case, OpenSpecimen
redirects (human) users to the respective OAuth providers in order to
get consents for sharing their account details (openid) for accessing
OpenSpecimen resources and APIs.

3. JWT Validation: OpenSpecimen validates and resolves the JWT to
a valid user.

The validation involves ensuring the token is:
  3.1: Issued by an OAuth provider registered with OpenSpecimen
  3.2: Not expired
  3.3: Intended for accessing OpenSpecimen

The public keys required for verification of the JWT signature are
fetched from the respective OAuth providers at periodic intervals
and cached in-memory.

The resolution includes mapping the received subject claims to the
user record in OpenSpecimen database by performing lookup on the
login_name attribute.

Tested the implementations using Auth0 and Google OAuth providers.

TODO: Okta and Azure AD.
commit 88a6881
Author: Vinayak Pawar <vinayakapawar@gmail.com>
Date:   Sat Jan 24 17:12:10 2026 +0530

    Invalidate any active (servlet) session and delete all cookies on user logout or session timeout/expiry.
to facilitate faster cancellation of the reservations.

A side effect of this is only the required positions are locked, which helps
in performing concurrent actions on other positions.
to facilitate faster cancellation of the reservations.

A side effect of this is only the required positions are locked, which helps
in performing concurrent actions on other positions.
of CPR visits instead of using the session cached CPR object's visits list.

The visits list is required to find the relevant visit to use for updating
and creating specimens underneath it.
…r a given session) in cache.

This ensures last API call time is used to determine whether the session is active or not.
… not

appear in the dropdown of other rows of the sub-form.

DP add/edit UI fixes
1. Institute is made mandatory
2. Selected institute does not appear in institute dropdown of
   other distributing sites row
3. Filter the distributing sites by the selected institute.

Participant add/edit UI fixes
1. Selected MRN site does not appear in site dropdown of other
   MRNs

To use this filtering capability, the field configuration should
include the following attribute

 "unique": "cpr.participant.pmis.siteName"
update the token access time without a token will result in NPE.

Fixed the API filter to by pass updating the token access time when
no token is present.
1) Participant, Visit, and Specimen overview/detail, edit page header - left and right titles
2) Specimen description
When event point is specified, ensure event point unit is mandatory

Ensure the sorting of events do not break/crash when event point unit
is not specified.
1. Display freezer utilisation using reusable tiles and legend dropdown

2. Load up to 20 freezers at a time with View More

3. Use a flexible layout that fits available tiles per row

4. Reuse utilisation components in freezer and child container maps

5. Add a search interface for displaying freezers by name and site
…ion protocol groups

1. Update CPG API to prevent CP level workflow customisations from being overwritten
   when workflows are uploaded or updated at the CPG level.

2. Track whether a CP's workflows are inherited from its CPG or customised at the
   CP level.

3. When a CP is associated with a group
   3.1. CPs with workflows matching with that of CPG are treated as inherited.

   3.2. CPs with different workflows are treated as customised.

   3.3. CPG workflow updates are propagated only to CPs that inherit CPG workflows.

4. When a CP is added to a group
   4.1. If it has no workflow config, it inherits the CPG workflows and
        is marked inherited.

   4.2. If it has existing workflows matching that of CPG, it is marked inherited
        without rewriting workflows.

   4.3. If it has different workflows then those workflows are preserved and
        marked customised.

5. When a CP is removed from a group, the inheritance state is cleared (=null).

6. Add a "Workflows" source column in the CPG and CP overview to show whether
   CP's workflows are inherited or customised.

7. Add a "Use Group Workflows" row action for customised CPs, allowing CPG admins to
   replace CP level workflows with CPG workflows and resume inheritance.

8. Add the same "Use Group Workflows" menu action on the CP overview page when the
   CP belongs to a group and has customised workflows.

9. Add migration to initialise workflow inheritance state for existing CPs and CPGs.

10. Add normalised workflow comparison utility
    10.1. Compares workflow sections structurally

    10.2. Ignores field ordering, whitespaces

    10.3. Stops on first detected difference

(Ask for a gift if you have read till the end. The first person to send the email
will receive the gift)
Use Types.NUMERIC when setting the nullable workflow inheritance flag.
Oracle stores boolean values as NUMBER(1,0) and does not support
the JDBC BOOLEAN type.
Dynamic extensions library from commit #: 98b97168574f23622fb662b1fc3e026cf57a8be3
Use canonical and friendly attribute names published in SAML assertions
to resolve user login names and email addresses.
Permit metadata and collection status updates, form and event
changes, shipping, and storage transfers for reserved specimens.

Continue to prohibit child and pooled specimen creation,
cross-protocol distribution, disposal, and deletion.
…l event

Add a migration script to close redundant/duplicate active disposal events.
After migration, no active or no deleted specimens will have any active
disposal events. The closed specimens will retain only the latest active
disposal event. Report closed specimens that do no have an active disposal
event.

Soft delete disposal events when reopening specimens.
Add the opsmn_domain_api_only auth setting to restrict local
openspecimen domain access to API users only.

When enabled, non-API local domain users cannot
1) sign in
2) access APIs
3) be created/updated in the local domain.

Hide the local domain from UI sign-in/sign-up flows

Notify super admins when the setting changes.

Block API users from using the UI app (irrespective of setting)
Use a shared DAO helper to read named native SQL from Hibernate mappings
without losing named parameters. This fixes form records export failures
caused by parameters such as formId and entityName being replaced with
JDBC placeholders.

Populate the exported form record status and activity status columns.
Resolve the input specimen disposal reason against the disposal reason
permissible values and update the event row with the corresponding PV ID.
Use event-specific ID message keys in bulk event import schemas so
exported specimen event form records can be imported back without losing
the event ID.
Add a text cell renderer that splits values into plain text and
URL segments. Render plain text as spans and URL segments as anchors
that open in a new tab.
…Enter

Add an opt-in dropdown option to ignore Enter key presses in the
filter input. Enable it for the storage position container dropdown
so scanner entered barcodes can finish filtering before users select
a shortlisted container.
Use the CP group relationship directly when building query restrictions
instead of expanding the group into a large IN clause of CP IDs.

Update the CP query form to include a cpGroup sub form mapped to
OS_CP_GROUPS via CP_GROUP_ID. The new sub form exposes CP Group ID and
CP Group Name fields. This allows restricting the result set by CP group
using the AQL filter expression CollectionProtocol.cpGroup.id

Important Note: The restriction builder no longer performs early existence
or access validation for the input CP or CP group IDs. Invalid, inaccessible,
or mismatched CP/group IDs are handled by the generated query predicates
and existing access restrictions, resulting in an empty result set instead
of an explicit validation error.
1. Users can search fields by label or field id/name.

2. Matching fields are shown with their parent form/subform hierarchy.

3. Matching paths are expanded automatically.

4. Users can select or unselect matching fields from the filtered tree.

5. Existing selection hidden by the active search are preserved.

6. Column ordering is disabled while search filtering is active.

7. Clearing search restores the full tree and normal ordering.
1. Add the primarySpecimen sub-form with the following fields - primary specimen ID,
   label, and barcode.

2. Hyperlink each of the primary specimen fields to navigate to the relevant
   specimen page.

3. For consistency, add barcode field to the parentSpecimen sub-form and hyperlink it.

4. Hyperlink the current specimen barcode.
When a reporting data source is configured, ad-hoc queries run through
the query module and scheduled query tasks are executed against it.
Otherwise, queries continue to use the default application data source.

This decouples data entry workloads from query/reporting workloads.
…rds are

associated with their collection protocol prior to validating custom fields.

Add guard rails to prevent null-pointer dereferencing when CPs do not exist.
…ted children

Avoids Hibernate's "object references transient instance" errors
Return an appropriate HTTP status code and error message when an API
request is malformed or invalid.
Fix endpoint declarations to ensure URL path variables correctly map to
their corresponding function arguments.
Provide utility methods to parse and convert JSON input strings or
InputStreams directly into target Java objects.
…an true and false respectively.

Dynamic Extensions Commit #6b7e78f214c905e30dc56eb03d5e8a1f749e4de6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants