Skip to main content

Design ERP

服务分层

  • DB - Entity - EntityService - RemoteService - Controller/GraphQL/RESTful - UI
  • 接口实现的上一层可以是 RemoteService 也可以 EntityService
    • EntityService
      • 能够支持类似 dataloader 这样的加载方式
      • 能够按需查询
    • RemoteService
      • 相对来说功能没那么强大
    • 接口其实大多时候等价于 RemoteService
  • DB - 数据库层面
    • 设计以 schema 优先
  • Entity - 实体映射
  • EntityService - 实体服务层面
    • 基础接口
    • 业务逻辑
  • RemoteService - 远程服务 - 服务界限
    • 暴露 EntityService 为远程服务
    • 客户端通过远程服务访问
  • Controller/GraphQL/RESTful - 控制器
    • 自定义后实现的接口

Resource

  • Resource - 资源
  • 通用概念
  • 主要实体都是资源 - 非主要实体例如: 中间表,中间实体
  • 基本操作
    • 增删改查
    • Owner - 管理者 分配、认领 - 个人 释放、转移
    • 导入导出
  • 扩展关联/信息
    • label - 标签 - 预定义
    • tags - 标记 - 自定义 - 任意字符串
    • notes - 备注
    • task - 任务 - 资源可能被关联到任务
    • todo
    • reminder
    • nofitication
    • activity - 活动
      • comment - 评论
    • state - 系统状态
    • status - 状态阶段、原因
    • cid+rid 外部系统关联
    • eid 内部系统关联
  • 视图
    • 列表 - List
      • 支持 Table 显示
        • 定制 列 显示
        • 搜索、过滤
      • 支持 Kanban 显示 - 基于 status
      • 可定制 条件+列显示
      • Overview - 概览
        • 重要信息
      • Extended Overview - 扩展概览
        • 活动信息、关联信息
      • Quick Stats - 快速统计
    • 详情 - View/Detail
      • Resource Overview + 多 Tab 视图
      • Summary
        • 基本信息加活动跟进
      • Detail
      • Activity
      • File
    • 创建表单
    • 编辑表单 - 如果是 inline 编辑可能会不太一样
    • Mention - 提及 - 显示被关联引用 - ResourceChip
    • Select/Picker - 选择关联引用
    • Popup/Overview/Profile - 弹出层预览
interface GeneralResource {
/// 主键 - <TYPETAG>_<ULID>
id: string;
/// UUID
uid: string;
/// 租户
tid: string;
/// 顺序ID - 对用户友好
sid: number;
/// 外部 ID - 例如 对接已有系统
eid?: string;
/// CID+RID - 平台+平台ID - 组成 vendor 相关的外部资源
cid?: string;
rid?: string;

// 常见的名字字段 - 避免使用 name
fullName?: string; // 全名
displayName?: string; // 用于显示 - 优先显示
title?: string;
description?: string;
topic?: string;

// User
loginName?: string;

// 常见的客户联系信息
contactName?: string;
contactPhone?: string;
contactEmail?: string;
contactAddress?: string;

// 状态 - 粗粒度系统定义
state: string;
// 阶段 - 细粒度业务定义
status: string;

// 排序用
sort: number;
displayOrder: number;

tags?: string[]; // 标记体系 - 自定义
labels?: Label[]; // 标签体系 - 系统定义

// 可归属资源
ownerId?: string;
ownerType?: string | 'User' | 'Team';

// 具体归属 ID 基于 type 生成
owningUserId?: string;
owningTeamId?: string;

// 通用对象关联 Entity
entityId?: string;
entityType?: string;

// 客户所属资源
customerId?: string;
customerType?: string | 'Account' | 'Contact';
accountId?: string;
contactId?: string;

// audit 相关
createdById?: string;
updatedById?: string;
deletedById?: string;

/// 创建时间
createdAt: Date;
/// 更新时间
updatedAt: Date;
/// 删除时间
deletedAt?: Date;

// 面向客户端+服务端
attributes?: Record<string, any>;
// 面向服务端 - 客户端可见
properties?: Record<string, any>;
// 面向客户端 - 客户端不可见
extensions?: Record<string, any>;

// 关联
account?: Account;
contact?: Contact;

owningUser?: User;
owningTeam?: Team;

createdBy?: User;
updatedBy?: User;
deletedBy?: User;
}

Activity

  • Activity - 活动
  • 已经发生的事情或者将要发生的事情
  • 常见活动
    • Comment - 评论

Event

  • Event - 事件
  • 系统内部层面的事件
  • 不直接面向用户

Record

  • Record - 记录
  • 是已经发生的事情
  • 常见记录
    • PhoneCallRecord - 电话记录
    • EmailRecord - 邮件记录
    • ShortMessageRecord - 短信记录

CRM

  • 面向销售
  • Customer - 客户
    • 注意 Customer 可能是 Account 也可能是 Contact
  • 核心实体
    • Account - 客户 - 可以考虑翻译为公司或者企业客户
    • Contact - 联系人
    • Lead - 潜在客户
    • Opportunity - 商机
    • Activity - 活动
  • 辅助
    • Order - 销售订单
    • Product - 产品
  • 公共
    • Task - 任务
    • Event - 事件
    • Note - 备注
    • Attachment - 附件
    • Comment - 评论

UI 状态

  • Nothing/Before - An empty element
  • Loading - A fetch is happening
  • None - No items returned
  • One - A single item comes back
  • Some - A few items comes back
  • Too Many - Too many items, need pagination (or similar)
  • Incorrect - An error occurred
  • Correct - A success happened
  • Done - The operation finished

UI Context

  • React 视角
  • 基础重复独立组建应该有 Context
    • DialogContext
    • PopoverContext
  • 全局状态
    • UserContext
    • ThemeContext
    • LocaleContext
    • AuthContext
  • 数据 Context
    • Query
      • 异步数据
      • 额外操作和状态 refresh/loading
      • query + suspense 也等同于 同步数据
    • Data/Store
      • 同步数据
  • List Context
    • 用户 状态
      • 用户偏好 - 选择的视图
    • 布局 状态
      • 选择 视图
      • 选择 列
      • 列顺序
    • 查询 状态 - 部分可能需要持久化
      • 排序
      • 过滤
      • 分页
      • 搜索
    • 查询 - 查询参数 -> Query -> Result
      • data
      • loading
      • error
    • 数据 状态
      • total
      • items/data
      • hasMore
      • hasBefore
      • hasAfter
  • Detail Context
  • Form Context

Resource View

  • List
    • 筛选、排序、列选择、搜索、分页
    • 自定义视图
  • View/Detail - 详情
    • 展示单个资源的详细信息,常以多Tab形式组织不同维度的数据。
    • Resource Overview + 多 Tab 视图
    • Tabs
      • Summary
        • 基本信息加活动跟进
      • Detail
        • 更多额外详细信息
      • Activity
        • 活动
      • File
        • 附件
  • Create
    • 提供表单或界面以创建新的资源
  • QuickCreate - 快速创建
    • 更简化的表单快速创建资源
    • 通常出现在 侧边栏/Drawer 或者 弹出层
  • Edit
    • 允许修改资源的详情
    • 可能支持行内编辑(Inline Edit)
    • 用户可以直接在列表视图或者详情视图中修改资源
  • Mention
    • 提及
    • 在文档或评论中提及资源,允许快速访问或引用
  • Select/Picker/Search
    • 选择或搜索特定资源以建立关联关系
  • Popup/Overview/Profile
    • 弹出层预览
    • 快速查看资源的关键信息而不离开当前界面
  • Report - 生成报告视图,支持数据分析和决策
  • Assign - 分配资源
  • Import - 批量导入
  • Export - 批量导出
  • Dashboard - 仪表盘
    • 提供资源的汇总视图和关键指标,帮助用户快速获取概览
  • Review/Approve
  • Activity
    • 记录并显示资源相关的所有活动和交互历史。
  • File/Attachment
    • 管理和查看资源相关的文件和附件
  • Notification
    • 提醒用户关于资源的更新、截止日期、审批需求
  • History/Log
    • 记录资源变更的历史或日志,提供完整的审计跟踪
  • TODO

Note vs Comment

  • Note
    • 通常是对资源的描述或者备注
    • used to explain, annotate, or add context to data
  • Comment
    • 通常是对资源的交互或者讨论
    • Reply 功能
    • 强调交互

比如 excel 有 comment 也有 note,note 通常是对单元格的描述,comment 通常是对单元格的多人交互评论。


参考

Reminder vs To-do

  • Reminder - 提醒
    • 触发通知
    • 日期和时间敏感的事件
    • 周期性任务
    • 与日历事件或特定时间点关联,重点是在适当的时候提醒用户采取行动或记住某件事。
  • To-do - 待办
    • 需要被完成但不一定与特定的截止日期或时间绑定
    • 核心是 任务的管理和完成
    • 跟踪需要完成的工作或个人任务

File vs Media vs Attachment vs Document

  • Attachment - 附件
    • 上下文相关的文件
    • 补充或支持主体信息
  • Media - 媒体
    • 内容可感知
    • 强调呈现
    • 图片、视频、音频、文本
  • Document - 文档
    • 强调内容
    • 文档、文件
    • 通常都可以提取为文本
  • File - 文件
    • 通用文件
    • 内容可能不透明 - 不需要感知内容

zIndex

  • 50 - dialog
  • 40 - window host - isolate

Entity

  • User != 员工
    • 员工是 HRM 的概念

State & Status

  • State - 状态 - 系统定义 - 大状态 - 高级状态
  • Status - 状态原因、阶段 - 业务定义 - 小状态 - 低级状态
EntityStateStatusnotes
AccountActiveActive
InactiveInactive
statelabelnotes
Active激活
Inactive未激活
Pending待处理
Open开放
Closed关闭
Completed完成
Canceled取消
Resolved已解决
Expired已过期
OnHold暂停
Qualified合格Lead
Disqualified不合格Lead
Won赢得Opportunity
Lost失去Opportunity
Submitted已提交
Fullfilled已完成
Draft草稿
Published已发布
statuslabelnotes
New新建
  • status+state 不是完整的状态机
    • 因为状态流转不必然
    • 但设计好 state 和 status 可支持实现 事件驱动、工作流、状态机
  • status 可能和 state 完全相等
    • 但 status 可以自定义
    • status 必然对应 一个 state
  • User
    • Active
      • Pending Approval (待审批):用户已注册,但账户正在等待管理员审批。
      • Verified (已验证):用户已通过电子邮件或手机验证过程。
      • Suspended (暂停使用):因违反条款或其他原因,用户账户暂时被禁止使用。
    • Inactive
      • Deactivated by User (用户停用):用户自己选择停用账户。
      • Deactivated by Admin (管理员停用):由于某些原因,管理员停用了用户账户。
      • Expired (已过期):用户账户因长时间未使用或其他原因自动过期。
  • Contract - Draft, Invoiced, Active, OnHold, Canceled, Expired

  • 一个堂食订单,主状态为 已下单 - 制作中 - 请取餐 - 已完成
    • Status -> Ordered -> Making -> Ready -> Completed
  • 一个外卖订单,主状态为 已下单 - 配送中 - 已送达 - 已完成
    • Status -> Ordered -> Delivering -> Delivered -> Completed

MS Dynamics356

  • statecode - State - Status - 状态
  • statuscode - Status - Status Reason - 状态原因、阶段
EntityStateStatusnotes
AccountActiveActive
InactiveInactive
ActivityOpenOpen
CompletedCompleted
CanceledCanceled
ScheduledScheduled
AppointmentOpenFree
Tentative
CompletedCompleted
CanceledCanceled
ScheduledBusy
Out of Office
ArticleDraftDraft
UnapprovedUnapproved
PublishedPublished
CampaignActiveProposed
Ready To Launch
Launched
Completed
Canceled
Suspended
Campaign ActivityOpenInProgress
Proposed
Pending
System Aborted
Completed
ClosedClosed
CanceledCanceled
Campaign ResponseOpenOpen
ClosedClosed
CanceledCanceled
CaseActiveInProgress
OnHold
Waiting for Details
Researching
ResolvedProblem Solved
CanceledCanceled
Case ResolutionOpenOpen
CompletedClosed
CanceledCanceled
ContactActiveActive
InactiveInactive
ContractDraftDraft
InvoicedInvoiced
ActiveActive
OnHoldOnHold
CanceledCanceled
ExpiredExpired
Contract LineExistingNew
RenewedRenewed
CanceledCanceled
ExpiredExpired
CurrencyActiveActive
InactiveInactive
DiscountActiveActive
InactiveInactive
E-mailOpenDraft
Failed
CompletedCompleted
Sent
Received
PendingSend
Sending
CanceledCanceled
FaxOpenOpen
CompletedCompleted
Sent
Received
CanceledCanceled
InvoiceActiveNew
Partially Shipped
Billed
Booked
Installed
~~ Closed~~~~ Canceled~~
~~ Paid in Full~~
PaidComplete
Parial
CanceledCanceled
LeadOpenNew
Contacted
QualifiedQualified
DisqualifiedLost
Cannot Contact
No Longer Interested
Canceled
LetterOpenOpen
Draft
CompletedReceived
Sent
CanceledCanceled
Marketing ListActiveActive
InactiveInactive
OpportunityOpenInProgress
OnHold
WonWon
LostCanceled
Out-Sold
OrderActiveNew
Pending
SubmittedInProgress
CanceledNo Money
FulfilledComplete
Partial
InvoicedInvoiced
Phone CallOpenOpen
CompletedMade
Received
CanceledCanceled
Price ListActiveActive
InactiveInactive
ProductActiveActive
InactiveInactive
QuoteDraftInProgress
ActiveInProgress
Open
WonWon
Out-Sold
ClosedLost
Canceled
Revised
Service ActivityOpenRequested
Tentative
ClosedCompleted
CanceledCanceled
No Show
ScheduledPending
Reserved
InProgress
Arrived
TaskOpenNot Started
InProgress
Waiting on someone else
Deferred
CompletedCompleted
CanceledCanceled

Sales Invoice

StatusLabelDesc
Sent已发送发票已发送给客户
Paid已支付客户已支付发票
Overdue逾期发票已超过付款日期且客户尚未支付
Void作废如果发票开具错误,你可以将其作废。客户无法支付已作废的发票。
Write Off核销只有当你确信客户欠款无法收回时,你才可以对发票进行坏账核销。
Draft草稿你已创建一张未完成的发票,并且它尚未发送给客户。Zoho Billing 无法生成任何草稿发票。

Accounting Invoice

StateStatusLabelDesc
ActiveDraft草稿发票已创建但尚未最终审核或发送。用于初步录入和编辑发票信息。
PendingApproval待审批发票已提交审批流程,等待相关管理者或会计审核。此步骤是确保发票准确无误的关键。
Approved已审批发票已经过审批,等待进一步处理,如记账或支付。
Paid已支付发票已结清款项,表示客户已完成支付,会计处理完毕。
CompletedPosted已过账发票的财务数据已被记入总账,此状态表示发票已在会计记录中正式体现其经济效果。
CancelledCancelled已取消发票在完成所有必要流程前被取消,不再适用或有效,不需进一步操作。
Written-Off已核销发票因确认无法收回款项而被标记为已支付,处理为坏账。
Void作废发票因错误或其他原因被取消,使用作废状态来确保其不会影响财务记录。

TaxDeclaration

StateStatusLabelDesc
DraftNew未填写
Draft草稿填写中
SubmittedPending待审核申报已提交,正在等待税务机关的初步审核。
Query待补充资料税务机关对申报有疑问,需要纳税人提供更多信息或解释。
PendingPayment未缴款
CompletedProcessed已处理申报已经完全处理完成,包括所有必要的审核、调整和确认。
Amended已修正纳税人已根据税务机关的要求修正申报,并重新提交审核。
PartiallyProcessed部分处理申报的部分内容已处理,其余部分可能因特定原因暂未完成处理。
PaymentConfirmed已缴款
ClosedWithdrawn已撤销申报被纳税人撤回或税务机关关闭,无需进一步处理。
Archived已存档申报处理完成后被正式存档,作为税务记录保留。

ServiceOrder

StateStatusLabelDesc
ActiveNew新建订单已创建,尚未开始处理
Pending待处理订单正在等待进一步处理或等待客户信息
AdditionalInfoNeeded需补充信息需要客户提交更多文件或信息以继续处理订单
SubmittedProcessing处理中订单已提交至服务部门,正在进行中
AwaitingReview待审核服务已执行完毕,订单正在内部审核过程中
CanceledInsufficientFunds资金不足因客户资金不足,订单被取消
ClientCanceled客户取消客户主动请求取消订单
ServiceUnavailable服务不可用由于服务限制或不可用,订单无法执行
FulfilledCompleted已完成所有服务已根据订单要求成功提供
PartiallyCompleted部分完成部分服务已提供,其余部分由于特定原因暂未完成
InvoicedInvoiced已开发票服务已提供完毕,相应的发票已生成并发送给客户
AwaitingPayment待支付发票已发出,订单正在等待客户支付

Employee

StateStatusLabelDesc
ActiveProbation试用期员工在试用期内,正接受评估是否适合长期职位。
Regular正式员工员工已完成试用期,成为正式员工。
PartTime兼职员工以兼职形式在组织工作。
Temporary临时工员工被临时雇佣,通常为完成特定项目或季节性工作。
LeaveSickLeave病假员工因病缺勤。
Maternity/PaternityLeave产假/陪产假员工因生育或陪伴配偶生育休假。
AnnualLeave年假员工正在使用法定年假。
UnpaidLeave无薪假员工处于批准的无薪假状态。
SuspendedDisciplinary纪律暂停员工因纪律问题被暂停工作。
Investigation调查中员工因涉及调查被暂停工作,等待结果。
TerminatedResigned自愿离职员工自主决定结束与公司的雇佣关系。
Retired退休员工正式退休,结束职业生涯。
LaidOff裁员因公司重组或缩减人员,员工被解雇。
Fired解雇因员工表现或行为问题,被公司解雇。

Client

  • Client 是 Service 的接受者
    • 不一定直接产生交易关系
    • 不一定直接产生沟通
    • 是服务关系
StateStatusLabelDesc
ActiveNew新建客户服务刚刚创建,尚未开始任何实质性操作。
Onboarding准备阶段客户在此阶段完成必要的准备工作,如资料提交和初步设置。
ServicesProvided服务中客户正在接受服务,正常的服务交付期间。
ReviewPending待复核服务已提供,正在等待内部复核或客户最终确认。
ComplianceCheck合规性检查进行定期的合规性检查,确保服务符合所有相关法规和标准。
SuspendedNonPayment因欠款暂停由于未支付服务费用,客户服务暂停。
ComplianceIssues合规问题由于合规性或法律问题,客户服务被暂停。
ResumedPaymentResolved欠款解决客户已解决支付问题,服务恢复。
ComplianceResolved合规问题解决客户已解决之前的合规问题,服务恢复。
TerminatedClientCanceled客户取消客户决定终止服务关系。
ServiceCompleted服务结束服务合约期满或所有服务项目均已完成,客户状态更新为终止。
Defaulted违约客户由于违反服务条款被终止服务。

Enum

Sex

enumlabel
Unknow未知
Male男性
Female女性
Intersex间性

PaymentMethod

enumlabel
Cash现金支付
CreditCard信用卡支付
DebitCard借记卡支付
BankTransfer银行转账
OnlinePayment在线支付
Check支票支付
MobilePayment移动支付
DirectDebit直接扣款
WireTransfer电汇支付
Cryptocurrency加密货币

OnlinePaymentPlatform

enumlabel
PayPalPayPal
Alipay支付宝支付
WeChatPay微信支付
StripeStripe
SquareSquare
ApplePayApple Pay
GooglePayGoogle Pay

BankAccountType

enumlabel
Savings储蓄账户
Checking支票账户
Business商业账户
JointSavings联名储蓄账户
JointChecking联名支票账户
Investment投资账户
CD定期存款账户
MoneyMarket货币市场账户
Brokerage证券账户
CreditCard信用卡账户
Loan贷款账户
Mortgage抵押贷款账户
LineOfCredit信用额度账户
Other其他账户

EmploymentType

enumlabel
FullTime全职
PartTime兼职
Contract合同工
Temporary临时工

Payment

  • recipient_bank_account
  • beneficiary_account_number
  • payee_account_number
  • receiving_account

  • payer_bank_account
  • sender_account
  • sending_account

FAQ

银行卡 vs 银行账户

  • 银行账户
    • 金融存款账户
    • 类型有 储蓄账户、支票账户、商业账户、投资账户 等
    • 属性不同 - 如 利息率、交易限额、费用结构 等
    • 记录所有交易 - 如 存款、取款、转账 等
    • 用于存款、管理资金和其他财务活动 - 如收入管理、账单支付、定期存款等
  • 银行卡
    • 一种物理或数字的支付工具
    • 允许访问和使用账户中的资金
    • 主要分为 借记卡 和 信用卡
    • 银行卡主要用于消费和支付

服务订单 vs 商品订单

  • 服务订单
    • 无形的服务
    • 服务的时间、地点、持续时长、特定的服务详情
    • 处理流程
      • 服务的预约、人员的安排、服务的执行、后续的服务评价
      • 可能涉及多次与客户的互动,以及服务过程中的调整和确认
    • 客户互动
      • 频繁且持续
    • 物流和库存
      • 不涉及实物库存管理,但需要管理服务资源,如人员和时间
      • 需要考虑服务地点的逻辑安排
    • 定价和收费
      • 定价可能基于时间(如按小时计费)、项目(固定费用)或成果(基于结果的定价)。
      • 收费时点可能在服务前(预付款)、服务中(分期付款)或服务后(后付款)。
  • 商品订单
    • 有形的产品或商品
    • 商品的类型、数量、规格、物理特性
    • 处理流程
      • 订单的接收、商品的拣选、包装、发货以及物流跟踪
    • 客户互动
      • 相对较少
      • 主要是售前、售后
      • 一旦发货,除非出现问题,否则一般不需进一步交互
    • 物流和库存
      • 详尽的库存管理,包括库存水平的监控、仓库管理和库存补充
      • 物流管理是关键部分,包括运输方式的选择、发货时间的控制和货物跟踪。
    • 商品订单
      • 价格通常基于单个或批量商品的固定价格
      • 支付通常在购买时一次性完成,除非涉及分期支付的特殊情况