Skip to content

Managing Case Participants

This page is not normative

This page is not considered a core part of the Vultron Protocol as proposed in the main documentation. Although within the page we might provide guidance in terms of SHOULD, MUST, etc., the content here is not normative.

Typically most cases involve multiple participants, having various roles within the case. While the most common activities are inviting and adding participants, we've also included activities for removing participants.

flowchart TB
    subgraph as:Invite 
        RmInviteToCase
    end
    subgraph as:Accept
        RmAcceptInviteToCase
    end
    subgraph as:Reject
        RmRejectInviteToCase
    end
    subgraph as:Create
        RmCreateParticipant
        RmCreateParticipantStatus
    end
    subgraph as:Add
        AddParticipantToCase
        AddStatusToParticipant
    end
    subgraph as:Remove
        RemoveParticipantFromCase
    end
    start([Start])
    start --> RmInviteToCase
    RmInviteToCase --> a{Accept?}
    a -->|y| RmAcceptInviteToCase
    a -->|n| RmRejectInviteToCase
    RmAcceptInviteToCase --> RmCreateParticipant

    RmCreateParticipantStatus --> AddStatusToParticipant
    RmCreateParticipant --> AddParticipantToCase
    AddParticipantToCase --> s{Status?}
    s -->|y| RmCreateParticipantStatus
    s -->|n| r{Remove?}
    AddStatusToParticipant --> r
    r -->|y| RemoveParticipantFromCase
    r -->|n| s

Create or Add?

There appears to be some logical interchangeability of as:Create with as:Add since both include a target property that can be used to specify the object to which the new object is being added. We chose to represent them separately here to acknowledge the difference between creating a new object and adding an existing object to another object, but in an actual implementation it may be acceptable to use either activity for both cases. It seems likely that the general idea should be to use as:Create when creating a new object to add to another object (as the target of the activity), and as:Add when adding an existing object to another object.

That said, our intent is that Vultron be consistent with however ActivityPub does this. If what we're describing here is inconsistent with ActivityPub, please let us know in the form of an issue or pull request.

Invite to Case

A vendor invites a coordinator to a case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Invite",
  "id": "https://vultron.example/cases/VDR-20991514/invitation/1",
  "name": "https://vultron.example/organizations/vendor Invite https://vultron.example/organizations/coordinator to https://vultron.example/cases/VDR-20991514",
  "content": "We're inviting you to participate in VENDOR Case #20991514.",
  "to": "https://vultron.example/organizations/coordinator",
  "actor": "https://vultron.example/organizations/vendor",
  "target": "https://vultron.example/cases/VDR-20991514",
  "object": "https://vultron.example/organizations/coordinator"
}

Accept Invite to Case

A coordinator accepts a vendor's invitation to a case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Accept",
  "id": "https://for.example/d17a1247-6ed0-477a-a8ed-5df34390437b",
  "name": "https://vultron.example/organizations/coordinator Accept https://vultron.example/cases/VDR-20991514",
  "inReplyTo": "https://vultron.example/cases/VDR-20991514/invitation/1",
  "content": "We're accepting your invitation to participate in VENDOR Case #20991514.",
  "to": "https://vultron.example/organizations/vendor",
  "actor": "https://vultron.example/organizations/coordinator",
  "object": "https://vultron.example/cases/VDR-20991514"
}

Reject Invite to Case

A coordinator rejects a vendor's invitation to a case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Reject",
  "id": "https://for.example/1e7531f6-b25a-42b9-9fa6-0634e6a4b24a",
  "name": "https://vultron.example/organizations/coordinator Reject https://vultron.example/cases/VDR-20991514",
  "inReplyTo": "https://vultron.example/cases/VDR-20991514/invitation/1",
  "content": "Thanks for the invitation, but we're declining to participate in VENDOR Case #20991514.",
  "to": "https://vultron.example/organizations/vendor",
  "actor": "https://vultron.example/organizations/coordinator",
  "object": "https://vultron.example/cases/VDR-20991514"
}

Create Participant

In the following example, the vendor actor creates a coordinator participant for a case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Create",
  "id": "https://for.example/3c75a7b9-77b5-4eac-bdfa-4cb6328117a0",
  "name": "https://vultron.example/organizations/vendor Create Coordinator LLC to https://vultron.example/cases/VDR-20991514",
  "content": "We're adding Coordinator LLC to the case.",
  "actor": "https://vultron.example/organizations/vendor",
  "target": "https://vultron.example/cases/VDR-20991514",
  "object": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "CaseParticipant",
    "id": "https://vultron.example/cases/VDR-20991514/participants/https://vultron.example/organizations/coordinator",
    "name": "Coordinator LLC",
    "context": "https://vultron.example/cases/VDR-20991514",
    "published": "2024-07-09T20:17:19+00:00",
    "updated": "2024-07-09T20:17:19+00:00",
    "actor": "https://vultron.example/organizations/coordinator",
    "caseRoles": [
      "COORDINATOR"
    ],
    "participantStatus": [
      {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "ParticipantStatus",
        "id": "https://for.example/3a622aa9-cc33-4bdb-945c-f4c1e8c15da5",
        "name": "REPORT_MANAGEMENT_START vfd",
        "context": "https://vultron.example/cases/VDR-20991514",
        "published": "2024-07-09T20:17:19+00:00",
        "updated": "2024-07-09T20:17:19+00:00",
        "actor": "https://vultron.example/organizations/coordinator",
        "rmState": "REPORT_MANAGEMENT_START",
        "vfdState": "vfd",
        "caseEngagement": true,
        "embargoAdherence": true
      }
    ]
  }
}

Add Participant to Case

The vendor adds a coordinator participant to the case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Add",
  "id": "https://for.example/e7db7d76-fdfb-4e6c-be0c-8e5495b94602",
  "name": "https://vultron.example/organizations/vendor Add Coordinator LLC to https://vultron.example/cases/VDR-20991514",
  "content": "We're adding the coordinator as a participant to this case.",
  "actor": "https://vultron.example/organizations/vendor",
  "target": "https://vultron.example/cases/VDR-20991514",
  "object": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "CaseParticipant",
    "id": "https://vultron.example/cases/VDR-20991514/participants/coordinator",
    "name": "Coordinator LLC",
    "context": "https://vultron.example/cases/VDR-20991514",
    "published": "2024-07-09T20:17:19+00:00",
    "updated": "2024-07-09T20:17:19+00:00",
    "actor": "https://vultron.example/organizations/coordinator",
    "caseRoles": [
      "COORDINATOR"
    ],
    "participantStatus": [
      {
        "@context": "https://www.w3.org/ns/activitystreams",
        "type": "ParticipantStatus",
        "id": "https://for.example/ca33a516-9a1b-41b7-8179-1510bcf03a80",
        "name": "REPORT_MANAGEMENT_START vfd",
        "context": "https://vultron.example/cases/VDR-20991514",
        "published": "2024-07-09T20:17:19+00:00",
        "updated": "2024-07-09T20:17:19+00:00",
        "actor": "https://vultron.example/organizations/coordinator",
        "rmState": "REPORT_MANAGEMENT_START",
        "vfdState": "vfd",
        "caseEngagement": true,
        "embargoAdherence": true
      }
    ]
  }
}

Create Participant Status

The vendor actor is creating a participant status representing the vendor's status in the context of a specific case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Create",
  "id": "https://for.example/77ce374d-78ab-4c0a-a696-d0722645391f",
  "name": "https://vultron.example/organizations/vendor Create REPORT_MANAGEMENT_RECEIVED Vfd EMBARGO_MANAGEMENT_NONE pxa",
  "actor": "https://vultron.example/organizations/vendor",
  "target": null,
  "object": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "ParticipantStatus",
    "id": "https://vultron.example/cases/1/participants/vendor/status/1",
    "name": "REPORT_MANAGEMENT_RECEIVED Vfd EMBARGO_MANAGEMENT_NONE pxa",
    "context": "https://vultron.example/cases/1/participants/vendor",
    "published": "2024-07-09T20:17:19+00:00",
    "updated": "2024-07-09T20:17:19+00:00",
    "actor": "https://vultron.example/organizations/vendor",
    "rmState": "REPORT_MANAGEMENT_RECEIVED",
    "vfdState": "Vfd",
    "caseEngagement": true,
    "embargoAdherence": true,
    "caseStatus": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "CaseStatus",
      "id": "https://vultron.example/cases/1/status/1",
      "name": "EMBARGO_MANAGEMENT_NONE pxa",
      "context": "https://vultron.example/cases/1",
      "published": "2024-07-09T20:17:19+00:00",
      "updated": "2024-07-09T20:17:19+00:00",
      "emState": "EMBARGO_MANAGEMENT_NONE",
      "pxaState": "pxa"
    }
  }
}

Add Status to Participant

The vendor is adding a status to their participant object in the context of the specific case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Add",
  "id": "https://for.example/a600583b-e31c-4b14-8daf-a31d7b48c244",
  "name": "https://vultron.example/organizations/vendor Add REPORT_MANAGEMENT_RECEIVED Vfd EMBARGO_MANAGEMENT_NONE pxa to https://vultron.example/cases/1/participants/vendor",
  "actor": "https://vultron.example/organizations/vendor",
  "target": "https://vultron.example/cases/1/participants/vendor",
  "object": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "ParticipantStatus",
    "id": "https://vultron.example/cases/1/participants/vendor/status/1",
    "name": "REPORT_MANAGEMENT_RECEIVED Vfd EMBARGO_MANAGEMENT_NONE pxa",
    "context": "https://vultron.example/cases/1/participants/vendor",
    "published": "2024-07-09T20:17:19+00:00",
    "updated": "2024-07-09T20:17:19+00:00",
    "actor": "https://vultron.example/organizations/vendor",
    "rmState": "REPORT_MANAGEMENT_RECEIVED",
    "vfdState": "Vfd",
    "caseEngagement": true,
    "embargoAdherence": true,
    "caseStatus": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "CaseStatus",
      "id": "https://vultron.example/cases/1/status/1",
      "name": "EMBARGO_MANAGEMENT_NONE pxa",
      "context": "https://vultron.example/cases/1",
      "published": "2024-07-09T20:17:19+00:00",
      "updated": "2024-07-09T20:17:19+00:00",
      "emState": "EMBARGO_MANAGEMENT_NONE",
      "pxaState": "pxa"
    }
  }
}

Remove Participant from Case

A coordinator is removing a vendor from a case.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "asType": "Remove",
  "id": "https://for.example/b27f5865-77d1-40fc-a0d7-ea385dadc8d0",
  "name": "https://vultron.example/organizations/vendor Remove https://vultron.example/cases/VDR-20991514/participants/coordinator from https://vultron.example/cases/VDR-20991514",
  "summary": "Vendor is removing the coordinator from the case.",
  "actor": "https://vultron.example/organizations/vendor",
  "origin": "https://vultron.example/cases/VDR-20991514",
  "object": "https://vultron.example/cases/VDR-20991514/participants/coordinator"
}