写在前面:家政小程序的技术难度不高,难点在业务建模。本文从四个决定架构的判断出发------经营模式、服务品类、派单约束、信用与留痕------给出可落地的数据模型、算法与合规要点,配套建表 SQL、派单脚本、地址脱敏脚本与工序清单配置。
写在前面:核心立场与读者对象
核心立场 :家政小程序不是「预约 + 派单」,而是一门关于人的生意------商品库存可以复制,服务人员不能。架构上须先定三件事:人怎么管、责任怎么划、进门怎么让人放心,它们决定订单表、结算表、评价表的形状,定错后返工成本接近重做。
适合的读者:
- 正在开发家政 / 上门服务类小程序的开发者
- 为传统家政公司做线上化的产品经理
- 做多租户家政 SaaS、需抽象通用模型的技术负责人
先纠正的三个认知:
| 常见认知 | 实际情况 | 影响 |
|---|---|---|
| 家政是统一品类 | 钟点保洁与母婴护理复杂度差数倍 | 一次全做,每类都不深 |
| 排期就是「有空就能派」 | 需叠加技能、区域、时段三约束 | 派单错误率直接落在履约上 |
| 信任靠文案包装 | 信任应来自可核验的官方信用记录 | 转化率上不去,价格上不去 |
目录
- 一、第一分叉:经营模式决定数据模型
- 二、品类矩阵:先做一个,跑通再扩
- 三、核心数据模型与建表
- 四、派单:三重约束与匹配脚本
- 五、信任的可核验化
- 六、服务留痕与验收清单
- 七、复购、归属与预付
- 八、分期计划与交付清单
一、第一分叉:经营模式决定数据模型
家政行业存在三种经营模式,法律定义清晰,系统实现差异巨大。中介制 只做居间撮合、收介绍费,三方签约,服务关系发生在客户与服务人员之间。员工制 依《国务院办公厅关于促进家政服务业提质扩容的意见》(国办发〔2019〕30 号)的定义------企业直接与消费者签订服务合同,与服务人员依法签订劳动合同或服务协议并缴纳社会保险费,统一安排服务,直接支付或代发不低于当地最低工资标准的劳动报酬,并持续培训管理。平台制提供撮合与交易工具,双方在平台内成交,平台收佣金,对资质要求最高。
三者的系统差异:
| 维度 | 中介制 | 员工制 | 平台制 |
|---|---|---|---|
| 合同关系 | 三方 | 两方(客户与企业) | 三方(平台内成交) |
| 资金流向 | 客户付服务人员,企业收介绍费 | 客户付企业,企业发薪 | 客户付款进平台,平台分账 |
| 结算对象 | 介绍费 | 工资(底薪 + 提成或计件) | 佣金 |
| 评价归属 | 服务人员 | 服务人员,责任归企业 | 服务人员 |
| 责任首问 | 服务人员 | 企业 | 平台按规则划分 |
| 核心表 | 介绍记录、介绍费 | 排班、工时、薪资、社保台账 | 佣金、分账、保证金 |
| 发票开具方 | 通常由服务人员或代开 | 企业 | 平台或服务人员 |
架构影响:中介制改员工制,订单主体(个人→企业)、结算对象(介绍费→工资)、评价归属三者全部重构,工作量不低于重做。该问题必须在需求阶段首个确认。
二、品类矩阵:先做一个,跑通再扩
家政内部的品类差异远大于外行直觉。以下矩阵可直接用于立项范围决策:
| 品类 | 计价单位 | 单次时长 | 验收方式 | 资质要求 | 系统重点 |
|---|---|---|---|---|---|
| 钟点保洁 | 小时 | 2---4 小时 | 前后照片 | 健康证 | 排期、派单 |
| 深度保洁 / 家电清洗 | 件 / 房型 | 4---8 小时 | 工序勾选 | 健康证 + 培训 | 工序模板、留痕 |
| 母婴护理 | 周期(26 天起) | 全天或白班 | 日志 + 客户确认 | 健康证 + 技能等级 + 分类体检 | 长周期记录 |
| 居家照护 | 周期(按月) | 全天或白班 | 日志 + 家属确认 | 同上 | 长周期记录 |
| 维修安装 | 次 + 材料 | 1---3 小时 | 报价确认 + 验收单 | 相关作业资质 | 报价单、二次上门 |
| 整理收纳 | 小时 / 空间 | 4---8 小时 | 前后对比 | 健康证 + 培训 | 空间清单 |
立项建议:首期只做一个品类,跑到复购率稳定后再扩第二个。品类数量直接决定工序模板、资质校验、验收表单的数量,是排期成本的主要来源。
三、核心数据模型与建表
围绕「人---位---单---账」四类实体建模,以下为核心表结构(PostgreSQL 语法):
sql
-- staff:服务人员档案(对外展示字段与内部管理字段分离)
CREATE TABLE staff (
id BIGSERIAL PRIMARY KEY,
tenant_id BIGINT NOT NULL,
name VARCHAR(32) NOT NULL,
phone VARCHAR(20) NOT NULL,
id_verified BOOLEAN DEFAULT FALSE, -- 身份核验
credit_no VARCHAR(64), -- 信用凭证编号
health_expire DATE, -- 健康证有效期
skill_tags TEXT[] DEFAULT '{}', -- 保洁/母婴/维修
service_area VARCHAR(64)[], -- 行政区或商圈
employ_type SMALLINT NOT NULL, -- 1 中介 2 员工 3 平台
status SMALLINT DEFAULT 1, -- 1 可派单 2 休息 3 停用
UNIQUE (tenant_id, phone)
);
-- service_slot:可售服务时段(人 × 时段 唯一占位)
CREATE TABLE service_slot (
id BIGSERIAL PRIMARY KEY,
staff_id BIGINT NOT NULL REFERENCES staff(id),
slot_date DATE NOT NULL,
start_min SMALLINT NOT NULL, -- 以 0 点起算
end_min SMALLINT NOT NULL,
order_id BIGINT,
state SMALLINT DEFAULT 0, -- 0 空闲 1 锁定 2 占用
UNIQUE (staff_id, slot_date, start_min) -- 防同时段重复派单
);
CREATE INDEX idx_slot_date_state ON service_slot (slot_date, state);
-- service_order:服务订单
CREATE TABLE service_order (
id BIGSERIAL PRIMARY KEY,
order_no VARCHAR(32) NOT NULL UNIQUE,
tenant_id BIGINT NOT NULL,
category VARCHAR(32) NOT NULL,
customer_id BIGINT NOT NULL,
staff_id BIGINT,
addr_region VARCHAR(128) NOT NULL, -- 小区/楼栋级
addr_detail VARCHAR(128), -- 门牌,接单后可见
addr_secret VARCHAR(256), -- 门锁信息,加密限时
amount NUMERIC(10,2) NOT NULL,
state SMALLINT NOT NULL, -- 待派/已派/服务中/待验收/完成
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_order_staff_state ON service_order (staff_id, state);
设计要点:
service_slot的UNIQUE (staff_id, slot_date, start_min)是防重复派单的核心约束,靠数据库而非应用层保证------并发下应用层判断必然有竞态窗口。- 地址拆三段(
addr_region/addr_detail/addr_secret),按权限返回不同字段,实现分级可见。 staff表按状态区分展示字段与管理字段,展示层只读取通过校验的部分。
四、派单:三重约束与匹配脚本
「有空就能派」是最常见的实现错误。真实约束有三重:
| 约束 | 内容 | 违反后果 |
|---|---|---|
| 技能 | 服务人员具备该品类技能标签 | 服务无法完成,需换人 |
| 区域 | 服务地址在其服务半径内 | 通勤过长,单均效率下降 |
| 时段 | 目标时段未被占用且在岗 | 撞单,客户等待 |
派单匹配脚本(打分排序,非单纯就近):
python
# dispatch.py ------ 派单候选排序
# 约束过滤 + 打分:技能 > 时段 > 区域 > 历史服务过该客户
def candidates(staffs, slots, order, prefer_staff_id=None):
scored = []
for s in staffs:
if s["status"] != 1 or order["category"] not in s["skill_tags"]:
continue
if order["region"] not in s["service_area"]:
continue
ok = any(
sl["staff_id"] == s["id"] and sl["slot_date"] == order["slot_date"]
and sl["state"] == 0
and sl["start_min"] <= order["start_min"] and sl["end_min"] >= order["end_min"]
for sl in slots
)
if not ok:
continue
score = 60
if prefer_staff_id and s["id"] == prefer_staff_id:
score += 30 # 老客户指定优先
if s["id"] in (order.get("history_staff_ids") or []):
score += 15 # 服务过该客户
score -= len(s["service_area"]) * 2 # 服务面越广,单点熟悉度略降
scored.append((score, s["id"]))
return sorted(scored, reverse=True)
def lock_slot(conn, staff_id, slot_date, start_min, order_id):
"""条件更新抢占时段;返回 0 表示已被占,需回退重选"""
cur = conn.cursor()
cur.execute(
"""UPDATE service_slot SET state = 2, order_id = %s
WHERE staff_id = %s AND slot_date = %s
AND start_min = %s AND state = 0""",
(order_id, staff_id, slot_date, start_min),
)
conn.commit()
return cur.rowcount
lock_slot 返回 0 时须回退重选候选,不要直接抛错------重匹配的成功率远高于让客户重下单。
五、信任的可核验化
家政的转化障碍是「让陌生人进门」。文案解决不了,可核验的记录可以。商务部牵头的全国家政服务信用信息平台(移动端「家政信用查」)归集企业与服务人员信用记录,服务人员部分包含身份核验、犯罪背景核查结果、从业经历、培训、健康与保险信息;2026 年已与人社、公安、市场监管数据互通。截至 2024 年 1 月,平台归集 2 万余家企业、1500 多万条服务人员信用信息。
**授权是硬约束:服务人员信息须经本人授权方可查看。产品形态为------服务人员端生成带二维码的信用查询凭证,客户扫码后由服务人员刷脸授权,客户方可查看。四个环节的实现要求:
| 环节 | 实现要求 |
|---|---|
| 凭证生成 | 由服务人员端发起,绑定其本人账号,不可由平台代发 |
| 授权确认 | 刷脸或活体校验,授权记录留痕(时间、IP、查看方) |
| 信息展示 | 仅展示平台返回字段,本地不缓存完整信息 |
| 撤回 | 支持服务人员撤回授权,撤回后立即停止展示 |
上门地址属高风险个人信息,《个人信息保护法》将行踪轨迹列为敏感个人信息,处理需单独同意。分级展示实现:
python
# addr_mask.py ------ 地址分级展示
import re
def mask_for_staff(order, staff_viewing: bool) -> str:
"""派单前仅到楼栋;派单后到门牌;完成后 T+7 隐藏门牌"""
region = order["addr_region"] # 例:XX花园3号楼
if not staff_viewing:
return region
if order["state"] in ("已完成", "已取消") and order.get("days_since_done", 0) > 7:
return region
return f"{region} {order.get('addr_detail') or ''}"
def mask_for_admin(addr: str) -> str:
"""客服/后台列表默认脱敏,仅工单详情按需申请"""
return re.sub(r"\d+", "*", addr)
三条原则:最小必要 、分级可见 (按角色与订单状态放开)、限期留存。门锁密码尤其不能长期明文存储。
六、服务留痕与验收清单
非标服务无法验收是家政纠纷主要来源,解法是把服务内容清单化:
yaml
# sop_cleaning.yaml ------ 钟点保洁工序清单(运营可维护)
category: hourly_cleaning
duration_hours: 3
items:
- {id: C01, name: 卧室地面清扫拖洗, photo: before_after}
- {id: C02, name: 客厅地面清扫拖洗, photo: before_after}
- {id: C03, name: 卫生间洁具清洁除垢, photo: required}
- {id: C04, name: 厨房台面与灶具清洁, photo: required}
- {id: C05, name: 垃圾清运, photo: none}
addons:
- {id: A01, name: 抽油烟机拆洗, price: 120}
留痕字段与用途:
| 留痕项 | 采集时点 | 解决的争议 |
|---|---|---|
| 到家打卡(定位 + 时间) | 到达 | 是否按时到场 |
| 服务前照片 | 开工前 | 原始状态基线 |
| 工序项勾选 | 服务中 | 清单项是否完成 |
| 服务后照片 | 完工 | 完成质量 |
| 客户确认(签字或点击) | 验收 | 是否认可 |
边界要求:照片只拍作业区域,不拍人与私人物品,此条须写入服务规范。
七、复购、归属与预付
家政第一单通常不赚钱,利润在复购。系统需支持三件事:
| 能力 | 说明 | 数据要求 |
|---|---|---|
| 指定服务人员 | 客户可选上次服务者 | 订单记录 staff_id 并可查询历史 |
| 固定档期 | 每周固定时间自动生成订单 | 周期任务表 + 生成幂等 |
| 次卡 / 套餐 | 预付多次服务 | 预付余额表 + 核销流水 |
两个须提前约定的问题:
**其一,服务人员离职后的客户归属。**客户认的是人,人走了客户可能跟着走。协议应约定服务期内及服务期后一段时间内的归属与承接方式;发生后再说,谈的往往不是条款而是情绪。
**其二,预付的性质。**次卡、年卡本质是预付消费。单用途预付卡有备案与限额要求(适用范围限于零售、住宿餐饮、居民服务等特定行业的企业法人,个体经营者不在其内,记名卡限额 5000 元、不记名卡 1000 元);2025 年 5 月施行的预付式消费司法解释对「收款不退」类条款的效力作了明确。产品设计至少要区分「服务承诺型」与「储值余额型」。
八、分期计划与交付清单
分三期推进,每期有可上线闭环:
| 期次 | 范围 | 周期 | 验收标准 |
|---|---|---|---|
| 一期 | 单品类下单 + 派单 + 留痕 + 支付 | 6---8 周 | 完整跑通 50 单无人工干预 |
| 二期 | 信用展示 + 指定人员 + 次卡 | 4---6 周 | 复购率可统计、次卡核销无差错 |
| 三期 | 多品类 + 固定档期 + 员工制薪资核算 | 6---10 周 | 排班、工时、薪资三方对账一致 |
需求评审易漏六项:
| # | 易漏项 | 后果 |
|---|---|---|
| 1 | 改约取消的时间分档规则 | 争议集中,客服成本上升 |
| 2 | 服务人员端易用性(大字、少步骤) | 履约混乱,培训成本高 |
| 3 | 品类资质校验(健康证到期拦截) | 合规风险,服务中断 |
| 4 | 评价维度拆分(人 vs 平台) | 数据无意义,无法定位问题 |
| 5 | 服务半径与通勤时间 | 单均效率低,人员流失 |
| 6 | 保险与订单的绑定关系 | 出险时无法举证覆盖范围 |
参考资料
- 国务院办公厅《关于促进家政服务业提质扩容的意见》(国办发〔2019〕30 号) --- https://www.gov.cn/zhengce/content/2019-06/26/content_5403340.htm
- 商务部:家政服务业信用体系建设有关答复(全国家政服务信用信息平台) --- https://www.mofcom.gov.cn/zfxxgk/gkml/art/2022/art_b3536a7a9b144adeb6c065bb91366536.html
- 国务院政策例行吹风会(2024 年 1 月 22 日,家政信用信息平台数据) --- https://www.gov.cn/xinwen/2024zccfh/1
- 《中华人民共和国个人信息保护法》(国家法律法规数据库) --- https://flk.npc.gov.cn/
- 商务部《单用途商业预付卡管理办法(试行)》 --- https://www.gov.cn/gongbao/content/2012/content_2245842.htm
- 最高人民法院《关于审理预付式消费民事纠纷案件适用法律若干问题的解释》(法释〔2025〕4 号) --- https://www.court.gov.cn/
- 微信小程序开放文档(订阅消息、位置接口) --- https://developers.weixin.qq.com/miniprogram/dev/framework/