id: "event-storming-profile"
version: "1.0.0"
name: "Event Storming"
description: "Event Storming is a technique to exploratively collect domain knowledge and process logic"
icon: "Event"

# Metadata
metadata:
  tags:
    - "event-storming"
    - "domain-driven-design"
    - "ddd"
    - "domain-modeling"
    - "collaboration"

# Status Enumerations
statusEnumerations: []

# Element Types
elementTypes:
  - id: "event-storming.domain-event"
    name: "Domain Event"
    description: "A domain event that represents something that happened in the domain"
    descriptionDetailed: "A Domain Event represents something that has happened in the domain. Domain events are the core building blocks of Event Storming and represent business events that occur in the system. They are typically written in past tense (e.g., 'Order Placed', 'Payment Processed'). Domain events help identify the flow of information and business processes."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-domain-event-properties"
    style:
      icon: "Send"
      accentColor: "#ba4e00"
      defaultCanvasStyle: "card"

  - id: "event-storming.read-view-model"
    name: "Read-/View-Model"
    description: "A read model or view model that represents a projection of domain events"
    descriptionDetailed: "A Read-/View-Model represents a read model or view model that is a projection of domain events. Read models are optimized for querying and displaying data, while view models are specifically designed for user interfaces. They help identify how data is consumed and displayed in the system."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-read-view-model-properties"
    style:
      icon: "QMatrix"
      accentColor: "#198038"
      defaultCanvasStyle: "card"

  - id: "event-storming.system"
    name: "System"
    description: "A system that participates in the domain process"
    descriptionDetailed: "A System represents a system that participates in the domain process. Systems can be internal (part of the system being designed) or external (third-party systems). They help identify system boundaries and integration points in the domain."
    baseType: "default-model-element"
    layer: "application"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-system-properties"
    style:
      icon: "ApplicationWeb"
      accentColor: "#d02670"
      defaultCanvasStyle: "card"

  - id: "event-storming.command"
    name: "Command"
    description: "A command that triggers an action or process"
    descriptionDetailed: "A Command represents an intention to perform an action or trigger a process. Commands are typically written in imperative form (e.g., 'Place Order', 'Process Payment'). They represent user actions or system triggers that lead to domain events."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-command-properties"
    style:
      icon: "BlockStorageAlt"
      accentColor: "#0f62fe"
      defaultCanvasStyle: "card"

  - id: "event-storming.actor"
    name: "Actor / User / Role"
    description: "An actor, user, or role that participates in the domain process"
    descriptionDetailed: "An Actor represents a person, user, or role that participates in the domain process. Actors can be internal (employees, system users) or external (customers, partners). They help identify who performs actions and triggers commands in the system."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-actor-properties"
    style:
      icon: "UserRole"
      accentColor: "#8e6a00"
      defaultCanvasStyle: "card"

  - id: "event-storming.problem"
    name: "Problem"
    description: "A problem or issue identified during event storming"
    descriptionDetailed: "A Problem represents an issue, concern, or problem that has been identified during the event storming session. Problems help capture areas that need further investigation, technical challenges, or business concerns that arise during domain exploration."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
    style:
      icon: "Lightning"
      accentColor: "#da1e28"
      defaultCanvasStyle: "card"

  - id: "event-storming.policy"
    name: "Policy"
    description: "A business policy or rule that governs the domain process"
    descriptionDetailed: "A Policy represents a business policy, rule, or constraint that governs the domain process. Policies define business rules, validation rules, or constraints that must be followed. They help capture business logic and rules that influence how commands and events are processed."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
      - "event-storming-policy-properties"
    style:
      icon: "Policy"
      accentColor: "#8a3ffc"
      defaultCanvasStyle: "card"

  - id: "event-storming.aggregate"
    name: "Aggregate"
    description: "A domain aggregate that groups related domain events and commands"
    descriptionDetailed: "An Aggregate represents a cluster of domain objects (entities and value objects) that are treated as a single unit. Aggregates help identify boundaries in the domain model and define consistency boundaries. They group related commands and events together."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
    style:
      icon: "DataStructured"
      accentColor: "#6f6f6f"
      defaultCanvasStyle: "card"

  - id: "event-storming.insight"
    name: "Insight"
    description: "An insight or learning discovered during event storming"
    descriptionDetailed: "An Insight represents a discovery, learning, or insight that emerged during the event storming session. Insights capture important realizations about the domain, business processes, or system design that should be remembered and acted upon."
    baseType: "default-model-element"
    layer: "business"
    trackable: true
    propertiesSchema:
      - "event-storming-common"
    style:
      icon: "Cognitive"
      accentColor: "#697077"
      defaultCanvasStyle: "card"

# Relationship Types
relationshipTypes: []

# Property Groups
propertyGroups:
  - id: "event-storming-common"
    name: "Event Storming Common Properties"
    description: "Common properties for all event storming elements"
    descriptionDetailed: "This property group contains common properties that apply to all Event Storming element types, including business logic descriptions."
    properties:
      - fieldName: "business-logic"
        displayName: "Business logic"
        description: "Logic description of what happens in the implementation"
        descriptionDetailed: "A description of the business logic that describes what happens in the implementation. This helps document the behavior, rules, and processes associated with the element."
        type: "text"
        required: false

  - id: "event-storming-domain-event-properties"
    name: "Domain Event Properties"
    description: "Properties for domain events"
    descriptionDetailed: "This property group contains properties specific to Domain Event elements, including the event type (time-based trigger or manual trigger)."
    properties:
      - fieldName: "event-type"
        displayName: "Event Type"
        description: "The type of trigger for the domain event"
        descriptionDetailed: "Specifies whether the domain event is triggered by time (scheduled events) or manually (user-initiated events)."
        type: "selection"
        required: false
        options:
          - key: "time-based-trigger"
            displayName: "Time-based trigger"
            description: "Event is triggered by time or schedule"
          - key: "manual-trigger"
            displayName: "Manual trigger"
            description: "Event is triggered manually by user action"

  - id: "event-storming-read-view-model-properties"
    name: "Read-/View-Model Properties"
    description: "Properties for read models and view models"
    descriptionDetailed: "This property group contains properties specific to Read-/View-Model elements, including the model type (Read or View)."
    properties:
      - fieldName: "model-type"
        displayName: "Model Type"
        description: "The type of model (Read or View)"
        descriptionDetailed: "Specifies whether this is a Read Model (optimized for querying) or a View Model (designed for user interfaces)."
        type: "selection"
        required: false
        options:
          - key: "read"
            displayName: "Read"
            description: "Read model optimized for querying"
          - key: "view"
            displayName: "View"
            description: "View model designed for user interfaces"

  - id: "event-storming-system-properties"
    name: "System Properties"
    description: "Properties for systems"
    descriptionDetailed: "This property group contains properties specific to System elements, including the system type (internal, external, or new)."
    properties:
      - fieldName: "system-type"
        displayName: "System Type"
        description: "The type of system"
        descriptionDetailed: "Specifies whether the system is internal (part of the system being designed), external (third-party system), or new (system to be built)."
        type: "selection"
        required: false
        options:
          - key: "internal"
            displayName: "Internal"
            description: "Internal system part of the design"
          - key: "external"
            displayName: "External"
            description: "External third-party system"
          - key: "new"
            displayName: "New"
            description: "New system to be built"

  - id: "event-storming-command-properties"
    name: "Command Properties"
    description: "Properties for commands"
    descriptionDetailed: "This property group contains common properties for Command elements. Currently, no specific properties are defined, but this group can be extended with command-specific properties in the future."
    properties: []

  - id: "event-storming-actor-properties"
    name: "Actor Properties"
    description: "Properties for actors, users, and roles"
    descriptionDetailed: "This property group contains properties specific to Actor elements, including the actor type (internal or external)."
    properties:
      - fieldName: "actor-type"
        displayName: "Type"
        description: "The type of actor"
        descriptionDetailed: "Specifies whether the actor is internal (employee, system user) or external (customer, partner)."
        type: "selection"
        required: false
        options:
          - key: "internal"
            displayName: "Internal"
            description: "Internal actor (employee, system user)"
          - key: "external"
            displayName: "External"
            description: "External actor (customer, partner)"

  - id: "event-storming-policy-properties"
    name: "Policy Properties"
    description: "Properties for policies"
    descriptionDetailed: "This property group contains common properties for Policy elements. Currently, no specific properties are defined, but this group can be extended with policy-specific properties in the future."
    properties: []

# Text Templates
textTemplates: []

# Validations
validations: []

