types.ts 3.56 KB
// 本体可视化中间表示(IR)。
// 这是把当前项目的 M0–M8 / ME / MetaRule 本体“投影”成一份统一、视图友好的对象模型;
// 由 build.ts 从后端 /api/meta/model/{code} 返回的解析后 YAML(JSON)在浏览器端合成,
// 供 ER 图 / 本体网络图 / 场景流程图三个视图共用(等价于 onto-app 里 Python 侧的 IR,改为 TS 实现)。

export type RelKind = 'ONE_TO_ONE' | 'ONE_TO_MANY' | 'MANY_TO_ONE' | 'MANY_TO_MANY'

/** 属性(字段)。identifier / localIdentifier 会被前置成 is_primary_key 的合成属性。 */
export interface OntoAttribute {
  name: string
  label?: string
  type: string
  required?: boolean
  unique?: boolean
  is_primary_key?: boolean
  is_foreign_key?: boolean
  /** 跨聚合引用目标(来自 M1 refAggregate/refRoot/refIdentifier)。 */
  ref?: { aggregate: string; root: string; identifier: string }
  constraints?: Record<string, any>
  /** 瞬态字段:无 M3 列,不落库(据 description 启发式识别,仅作展示标注)。 */
  transient?: boolean
  description?: string
}

/** 对象间关联:跨聚合引用(reference)或聚合内组合(composition)。 */
export interface OntoRelationship {
  name: string
  label?: string
  target_object_id: string
  kind: RelKind
  refType: 'reference' | 'composition'
  /** reference 时为持有外键的字段名(在源对象 attributes 内)。 */
  fk_field?: string
}

/** 一个业务对象:聚合根(parent_id 为空)或其组合子实体(parent_id 指向根)。 */
export interface OntoObject {
  id: string
  name: string
  alias: string
  description?: string
  is_aggregate_root: boolean
  parent_id?: string | null
  aggregateId: string
  attributes: OntoAttribute[]
  relationships: OntoRelationship[]
}

/** 行为(M2 命令)。 */
export interface OntoBehavior {
  id: string
  name: string
  owner_object_id: string
  type: 'COMMAND' | 'QUERY'
  commandType?: string
  description?: string
  applied_rules: string[]
  produced_events: string[]
  preconditions: string[]
  effects: string[]
}

/** 规则(MetaRule ruleGroups[].rules[])。 */
export interface OntoRule {
  id: string
  name: string
  type: string        // effect: REJECT / ALERT / COMPENSATE
  expression?: string // matchCondition
  enforced?: boolean
  bindScene?: string
  description?: string
}

/** 领域事件(ME aggregateEventDefinitions)。 */
export interface OntoEvent {
  id: string
  name: string
  description?: string
  topic?: string
  aggregate?: string
  payload?: string[]
  consumers?: string[]
}

/** 导航目录节点(本项目无显式导航树,可为空;网络图退化为按聚合平铺)。 */
export interface NavNode {
  id: string
  name: string
  zh: string
  link?: string | null
  children: NavNode[]
}

/** BPMN 语义骨架(由 M4 flowSteps 合成,不含坐标)。 */
export interface ProcessNode {
  id: string
  type: 'startEvent' | 'endEvent' | 'task' | 'userTask' | 'exclusiveGateway' | 'parallelGateway' | 'intermediateCatchEvent'
  name: string
  behaviorId?: string
  lane?: string
}
export interface ProcessFlow {
  id: string
  source: string
  target: string
  name?: string
  condition?: string
}
export interface ProcessModel {
  id: string
  name: string
  nodes: ProcessNode[]
  flows: ProcessFlow[]
}

/** 顶层:一个本体 = 全部建模产物的视图投影。 */
export interface Ontology {
  domain: string
  version: string
  objects: OntoObject[]
  behaviors: OntoBehavior[]
  rules: OntoRule[]
  events: OntoEvent[]
  navigations: NavNode[]
  processModels: ProcessModel[]
}