Company OS

架构评审

docs/02-ontology-v0.md

本体论 v0:对象、关系、命令、事件、谓词

人与组织只有 Party 一套户籍。每个对象类型有且只有一个 owner 模块。施工节点名称不在本仓写死。命令走网关;本页的试探接口会校验形状、算出管线并返回 501。

本体关系图 v0mermaid
正在绘制…

细施工规则种子/待对齐,不在此编造。

对象目录(由模块 manifest 聚合)

类型中文owner 模块被扩展对齐说明
ObjectRecord对象户籍kernel本仓所有业务对象的登记头:type、id、owner 模块、创建者、软删除。
Relation关系kernel本仓有类型的边,禁止用对方表里的姓名字符串当外键。
Command命令kernel本仓人或 Agent 的意图,必须进命令网关。
DomainEvent领域事件kernel本仓已发生事实,只追加。数仓只消费事件。
PolicyPredicate权限谓词kernel本仓can_read / can_command / can_approve,不是角色名列表。多模块贡献取交集。
AuditRecord审计记录kernel本仓谁对何对象做了何命令、经过哪些模块钩子。人与 Agent 同一时间线。
ApprovalCase人机审批kernel本仓跨模块共享的审批壳;通知走外购 IM/邮件。
AgentSessionAgent 会话kernel本仓一次 Agent 运行。只经本体 API,无数据库后门。
ModuleRecord模块登记kernel本仓已启用模块、版本、已跑迁移。禁用不删数据。
Party参与方partyscm, fin本仓全公司唯一户籍。业主、供应商、员工都是 Party + 角色。
Person自然人party本仓Party 的自然人细分。
Organization组织party本仓Party 的组织细分。供应商也走这里。
PartyRole参与方角色party本仓owner / supplier / foreman / worker / employee / manager。角色不是新的人表。
Property房屋partyeng本仓空置房 / 工地房屋。线索、合同、项目都指向它。
Lead线索crm本仓找到空置房业主。必须同时挂 Party 与 Property。
DesignScheme装修方案/效果crm种子/待对齐方案对象;文件存对象存储,本体只留指针。细规则待对齐。
Quote报价crm本仓评估价格。签发后改金额只能出新 Quote。
Contract合同crmfin本仓签约事实。工程与财务只读并引用,不复制客户。
Employee员工hr本仓在职人员 = Person + 雇佣关系。
OfficeDoc文档指针hr本仓合同扫描件、验收 PDF。不存邮件正文仓库。
Project工程项目eng种子/待对齐一次交付。必须挂已签署 Contract。与 DMS「项目」对齐。
ConstructionNode施工节点eng种子/待对齐节点类型来自 seeds/construction-node-types.json(DMS 过程图对齐后填入),禁止写死工艺名。
WorkInstruction现场指令eng种子/待对齐可选。v0 可空,不编造表单字段。
Acceptance验收eng种子/待对齐交付验收事实。细项清单种子/待对齐。
Crew施工团队eng种子/待对齐项目班组。成员是 Party,不是工程库私有用户。
Requisition要货eng本仓从项目/节点提出。工程发起(owner),scm 承接并挂钩子校验。
Material材料scm本仓材料主数据:名称、规格、单位。
PurchaseOrder采购单scm本仓必须指向要货与供应商 Party。
GoodsReceipt到货scm本仓MVP 可后置。
Receivable应收fin本仓必须指向 Contract。禁止财务自建客户编码。
Payment回款fin本仓必须指向 Receivable。
CostEntry成本入账fin本仓来自采购或人工。MVP 可后置明细。
FinanceReview财务复核fin本仓对某合同的财务复核事实。大额合同签署前必须存在。

关系

approves审批挂载kernel
ApprovalCaseObjectRecord · n:1 · 可挂任意对象
declared_by对象归属模块kernel
ObjectRecordModuleRecord · n:1 · 每个业务对象类型有且只有一个 owner 模块
is_person自然人细分party
PersonParty · 1:1 · 见本体文档
is_organization组织细分party
OrganizationParty · 1:1 · 见本体文档
plays扮演角色party
PartyRoleParty · n:1 · 同一人可同时是业主与供应商
owns权属party
PartyProperty · n:n · 允许共有
subject_of线索主体crm
LeadParty · n:1 · 业主
about_property关于房屋crm
Lead | Quote | ContractProperty · n:1 · 同一套房
proposed_as方案所属crm
DesignSchemeLead · n:1 · 见本体文档
priced_as报价针对方案crm
QuoteDesignScheme · n:1 · 见本体文档
quoted_to报价对象crm
QuoteParty · n:1 · 见本体文档
supersedes替代旧报价crm
QuoteQuote · 1:1 · 改价只能出新报价,旧的标 superseded
agreed_in合同来自报价crm
ContractQuote · 1:1 · 变更另开对象
customer_of合同客户crm
ContractParty · n:1 · 不是财务客户编码
employed_as雇佣hr
EmployeePerson · 1:1 · 见本体文档
delivered_by项目履行合同eng
ProjectContract · n:1 · 默认一合同一项目
project_property项目所在房屋eng
ProjectProperty · n:1 · 与合同同一套房
node_of节点属于项目eng
ConstructionNodeProject · n:1 · 种子/待对齐
staffed_by项目班组eng
CrewProject · n:1 · 见本体文档
member_of班组成员eng
PartyCrew · n:n · 角色名待与 DMS 对齐
accepts验收项目eng
AcceptanceProject · n:1 · 种子/待对齐
requests要货属于项目eng
RequisitionProject · n:1 · 见本体文档
requests_material要货材料scm
RequisitionMaterial · n:n · Requisition 属 eng,Material 属 scm
fulfills采购履行要货scm
PurchaseOrderRequisition · n:1 · 见本体文档
sold_by供应商scm
PurchaseOrderParty · n:1 · 见本体文档
receives到货针对采购单scm
GoodsReceiptPurchaseOrder · n:1 · 见本体文档
due_from应收来自合同fin
ReceivableContract · n:1 · 见本体文档
settles回款核销fin
PaymentReceivable · n:1 · 见本体文档
costs成本来源fin
CostEntryPurchaseOrder | Project · n:1 · 见本体文档
reviews复核针对合同fin
FinanceReviewContract · n:1 · 见本体文档

命令与事件

命令owner审批钩子事件Agent 可提交
RegisterParty
登记参与方
partynonePartyRegistered
RegisterProperty
登记房屋
partynonePropertyRegistered
UpdateParty
更新参与方
partynonefin:afterPartyUpdated
GrantPartyRole
授予角色
partynonePartyRoleGranted
MergeParty
合并参与方
partyrequiredPartyMerged
CaptureLead
捕获线索
crmnoneLeadCaptured
ProposeScheme
提出方案
crmnoneSchemeProposed
IssueQuote
签发报价
crmrecommendedQuoteIssued
DraftContract
起草合同
crmnonefin:afterContractDrafted
SignContract
签署合同
crmrequiredfin:validate, fin:afterContractSigned
OpenProject
打开项目
engnoneProjectOpened
RequestMaterials
要货
engrecommendedscm:validateMaterialsRequested
AssignCrew
召集施工团队
engnoneCrewAssigned
StartNode
开始施工节点
engnoneNodeStarted
CompleteNode
完成施工节点
engrecommendedNodeCompleted
AcceptHandover
交付验收
engrequiredHandoverAccepted
RegisterMaterial
登记材料
scmnoneMaterialRegistered
PlacePurchaseOrder
下采购单
scmrequiredPurchaseOrderPlaced
ReviewContractFinance
财务复核合同
finnoneContractFinanceReviewed
RecordPayment
登记回款
finrecommendedPaymentRecorded
权限谓词

can_read能否看见该对象。

can_command能否对该对象提交某类命令。

can_approve能否批准挂在该对象上的审批。

can_export能否导出(默认严于 can_read)。

agent_may_proposeAgent 可否生成命令草案。

agent_may_commitAgent 可否直接提交。v0 默认 false。

模块贡献的谓词片段: party 收紧 can_command(*); party 收紧 can_approve(*); party 收紧 can_read(*); party 收紧 can_export(*); fin 收紧 can_command(SignContract)。只能收紧,不能放宽。

不变量

· Lead 必须同时指向 Party 与 Property。

· Quote 必须指向 Party;签发后金额变更只能出新 Quote。

· Contract 必须指向 Party、Property、Quote。

· Project 必须指向已签署 Contract。

· Requisition 必须指向 Project;PO 必须指向 Requisition 与供应商 Party。

· Receivable 必须指向 Contract;Payment 必须指向 Receivable。

· 任何工作台不得插入「姓名+手机」而不登记 Party。

· Agent 对 SignContract / PlacePurchaseOrder / AcceptHandover / RecordPayment 不可 commit。

· 每个业务对象类型有且只有一个 owner 模块;命令的主 handler 只能属于 owner 模块。

· 模块只能通过 manifest 声明的依赖引用别人的对象;模块之间零源码 import。

· 扩展别人的对象只能落 1:1 扩展表;扩展别人的命令只能挂 validate / before / after 钩子。

· 权限贡献只能收紧;禁用模块不删数据。

命令网关桩

试一条命令:合法命令返回 501 并附带执行管线(哪个模块的 handler、哪些钩子、谁订阅);带 customerName 返回 409;Agent 提交签约返回 403。

注册表中共 20 条命令,来自 5 个模块。以当前登录身份提交(未登录 → 401,非员工 → 403,都留审计)。party / crm / fin 已实现的命令真写库;其余模块解析管线后停在 501。

尚未试探。选一条预设,看网关如何放行、拒绝或停住一条命令。