Skip to content

LEASE-004: 续租与退租管理

优先级: 🟡 中 (15.5分) | 技术复用度: 70% | 实施周期: 1-2周

客户原话

"合同到期前3个月就应该开始沟通续租,但我经常忘记,等企业来问才发现已经过期了。续租的时候,我不记得之前的租金是多少、有没有优惠过,谈判很被动。企业要退租,我们要验收空间、结算费用、退押金,但没有标准流程,经常扯皮。有的企业说墙是原来就坏的,我们说是你们弄坏的,没有证据。押金退还要走财务流程,企业催得很急,我们也没办法。退租后空间要清理、维修,但和招商部门衔接不及时,空置期很长。"

—— 某工业园区物业主管

业务场景描述

典型场景

场景1: 续租提醒与沟通

  • 合同到期前3个月,应该开始沟通续租
  • 物业主管靠Excel表格或记忆,经常遗漏
  • 发现快到期了,匆忙联系企业
  • 企业说"你们怎么现在才说,我们已经找好新地方了"
  • 错过最佳沟通时机,企业流失

场景2: 续租条件谈判

  • 企业要求续租,但希望降低租金
  • 物业主管不记得历史租金、优惠政策
  • 要翻合同、查记录,企业等待时间长
  • 不知道市场行情,报价不合理
  • 谈判被动,要么损失收入,要么失去客户

场景3: 退租申请与验收

  • 企业提出退租,口头或微信通知
  • 没有标准退租流程,不知道要做什么
  • 约定验收时间,但企业没来或物业没去
  • 验收时发现空间有损坏,企业说是原来就坏的
  • 没有入住时的照片,无法证明,扯皮

场景4: 费用结算与押金退还

  • 退租时要结算水电费、物业费、维修费
  • 手工计算,容易出错,企业质疑
  • 押金退还要走财务流程,审批慢
  • 企业催得很急,"押金什么时候退"
  • 退还慢影响口碑,企业投诉

场景5: 空间交接与招商衔接

  • 退租后空间要清理、维修、拍照
  • 物业和招商部门信息不同步
  • 空间清理好了,招商部门不知道
  • 空间空置1-2个月才开始招商
  • 空置期长,损失租金收入

核心痛点

  1. 提醒不及时 - 靠人工记忆,容易遗漏,错过最佳沟通时机
  2. 谈判被动 - 历史信息不清楚,市场行情不了解
  3. 验收无标准 - 没有流程和证据,容易扯皮
  4. 退款流程慢 - 审批环节多,企业不满意
  5. 衔接不及时 - 部门信息不同步,空置期长

业务流程图

当前人工流程

问题点

  • 提醒靠人工,容易遗漏
  • 历史信息查找困难
  • 验收无标准,容易扯皮
  • 退款流程慢,企业不满

自动化流程

改进点

  • 自动提醒,不遗漏
  • 历史数据一键查看
  • 照片对比,责任清晰
  • 在线审批,快速退款
  • 自动衔接,缩短空置期

数据流与依赖

数据输入

  • 合同信息: 来自 LEASE-001 空间资源管理
  • 历史租金: 来自 LEASE-003 合同与账单管理
  • 入住照片: 签约时拍摄的空间照片
  • 费用数据: 水电费、物业费、维修费

数据输出

  • 续租提醒: 提供给物业主管
  • 退租申请: 提供给财务部门
  • 空间状态: 更新到 LEASE-001 空间资源管理
  • 招商线索: 提供给 LEASE-002 招商线索管理

场景依赖关系

技术实现方案

核心功能模块

1. 续租提醒与管理

续租提醒规则:

javascript
// 每天凌晨执行
function checkRenewalReminders() {
  let today = new Date()

  contracts.forEach(contract => {
    let endDate = new Date(contract.end_date)
    let daysToExpire = Math.floor((endDate - today) / (1000 * 60 * 60 * 24))

    // 到期前3个月提醒
    if (daysToExpire === 90) {
      createRenewalTask(contract, '开始沟通续租意向')
      sendNotification(contract.property_manager, {
        title: '续租提醒',
        content: `${contract.company_name} 合同3个月后到期,请开始沟通续租`,
        priority: 'normal'
      })
    }

    // 到期前2个月提醒
    if (daysToExpire === 60) {
      createRenewalTask(contract, '确认续租方案')
      sendNotification(contract.property_manager, {
        title: '续租提醒',
        content: `${contract.company_name} 合同2个月后到期,请确认续租方案`,
        priority: 'high'
      })
    }

    // 到期前1个月提醒
    if (daysToExpire === 30) {
      createRenewalTask(contract, '签订新合同或办理退租')
      sendNotification(contract.property_manager, {
        title: '续租紧急提醒',
        content: `${contract.company_name} 合同1个月后到期,请尽快签约或办理退租`,
        priority: 'urgent'
      })
    }

    // 到期前1周预警
    if (daysToExpire === 7) {
      sendNotification(contract.property_manager, {
        title: '合同即将到期',
        content: `${contract.company_name} 合同1周后到期,请立即处理`,
        priority: 'critical'
      })
      // 同时通知上级领导
      sendNotification(contract.supervisor, {
        title: '合同即将到期预警',
        content: `${contract.company_name} 合同1周后到期,请关注处理进度`,
        priority: 'critical'
      })
    }
  })
}

续租方案推荐:

javascript
function generateRenewalProposal(contract) {
  // 获取历史租金
  let currentRent = contract.rent_price
  let historicalRents = getHistoricalRents(contract.space_id)

  // 获取市场行情
  let marketPrice = getMarketPrice(contract.space_type, contract.area)

  // 获取企业信用
  let creditScore = getCompanyCreditScore(contract.company_id)
  let paymentHistory = getPaymentHistory(contract.company_id)

  // 计算推荐租金
  let recommendedRent = currentRent

  // 市场价格调整
  if (marketPrice > currentRent * 1.1) {
    recommendedRent = currentRent * 1.05 // 涨5%
  } else if (marketPrice < currentRent * 0.9) {
    recommendedRent = currentRent * 0.95 // 降5%
  }

  // 信用调整
  if (creditScore > 90 && paymentHistory.onTimeRate > 0.95) {
    recommendedRent *= 0.98 // 优质客户优惠2%
  }

  // 长期合同优惠
  let discountByTerm = {
    1: 0,
    2: 0.02,
    3: 0.03,
    5: 0.05
  }

  return {
    current_rent: currentRent,
    market_price: marketPrice,
    recommended_rent: recommendedRent,
    discount_options: [
      {
        term: 1,
        rent: recommendedRent,
        discount: 0,
        total: recommendedRent * 12 * contract.area
      },
      {
        term: 2,
        rent: recommendedRent * 0.98,
        discount: 0.02,
        total: recommendedRent * 0.98 * 24 * contract.area
      },
      {
        term: 3,
        rent: recommendedRent * 0.97,
        discount: 0.03,
        total: recommendedRent * 0.97 * 36 * contract.area
      }
    ],
    credit_score: creditScore,
    payment_history: paymentHistory,
    recommendation: '建议续租3年,给予3%优惠,锁定优质客户'
  }
}

2. 退租流程管理

退租申请:

json
{
  "checkout_id": "CO202403001",
  "contract_id": "CT202401001",
  "company_name": "XX科技公司",
  "space_id": "A-3F-301",
  "apply_date": "2024-03-15",
  "expected_checkout_date": "2024-04-30",
  "reason": "业务调整,搬迁到更大的厂房",
  "status": "pending",
  "inspection_scheduled": null,
  "inspection_completed": null,
  "settlement_amount": null,
  "deposit_refunded": null
}

退租流程:

javascript
function processCheckout(checkoutId) {
  let checkout = getCheckout(checkoutId)

  // 1. 自动排期验收
  let inspectionDate = scheduleInspection(checkout.expected_checkout_date)
  checkout.inspection_scheduled = inspectionDate

  // 通知企业和物业
  sendNotification(checkout.company_contact, {
    title: '退租验收通知',
    content: `您的退租验收已安排在 ${inspectionDate},请准时到场`
  })
  sendNotification(checkout.property_manager, {
    title: '退租验收安排',
    content: `${checkout.company_name} 退租验收已安排在 ${inspectionDate}`
  })

  // 2. 验收当天
  // 查看入住时照片
  let checkinPhotos = getCheckinPhotos(checkout.space_id, checkout.contract_id)

  // 现场拍照
  let checkoutPhotos = uploadCheckoutPhotos(checkout.checkout_id)

  // 对比照片,标记损坏
  let damages = compareDamages(checkinPhotos, checkoutPhotos)

  // 3. 费用结算
  let settlement = calculateSettlement(checkout, damages)

  // 4. 发起退款审批
  let approval = createRefundApproval(checkout, settlement)

  // 5. 退款完成后更新空间状态
  if (approval.status === 'approved') {
    refundDeposit(checkout, settlement.refund_amount)
    updateSpaceStatus(checkout.space_id, 'vacant')

    // 通知招商部门
    notifyLeasing(checkout.space_id, {
      status: 'vacant',
      available_date: checkout.expected_checkout_date,
      condition: damages.length > 0 ? 'needs_repair' : 'good'
    })
  }

  return checkout
}

3. 验收与照片对比

入住照片记录:

json
{
  "space_id": "A-3F-301",
  "contract_id": "CT202401001",
  "checkin_date": "2024-01-01",
  "photos": [
    {
      "photo_id": "P001",
      "url": "checkin_001.jpg",
      "location": "入口",
      "timestamp": "2024-01-01 10:00:00"
    },
    {
      "photo_id": "P002",
      "url": "checkin_002.jpg",
      "location": "墙面",
      "timestamp": "2024-01-01 10:05:00"
    },
    {
      "photo_id": "P003",
      "url": "checkin_003.jpg",
      "location": "地面",
      "timestamp": "2024-01-01 10:10:00"
    }
  ],
  "condition": "良好,无明显损坏"
}

退租验收对比:

javascript
function compareDamages(checkinPhotos, checkoutPhotos) {
  let damages = []

  // 人工对比标记损坏
  checkoutPhotos.forEach(checkoutPhoto => {
    let checkinPhoto = checkinPhotos.find(p => p.location === checkoutPhoto.location)

    if (checkoutPhoto.has_damage) {
      damages.push({
        location: checkoutPhoto.location,
        damage_type: checkoutPhoto.damage_type,
        checkin_photo: checkinPhoto ? checkinPhoto.url : null,
        checkout_photo: checkoutPhoto.url,
        estimated_cost: estimateRepairCost(checkoutPhoto.damage_type),
        responsibility: checkinPhoto && checkinPhoto.has_damage ? 'landlord' : 'tenant'
      })
    }
  })

  return damages
}

4. 费用结算

结算计算:

javascript
function calculateSettlement(checkout, damages) {
  let contract = getContract(checkout.contract_id)

  // 1. 计算未缴费用
  let unpaidBills = getUnpaidBills(contract.company_id)
  let unpaidAmount = unpaidBills.reduce((sum, bill) => sum + bill.amount, 0)

  // 2. 计算维修费用
  let repairCost = damages
    .filter(d => d.responsibility === 'tenant')
    .reduce((sum, d) => sum + d.estimated_cost, 0)

  // 3. 计算应退押金
  let deposit = contract.deposit
  let refundAmount = deposit - unpaidAmount - repairCost

  // 4. 如果押金不够,需要补缴
  let additionalPayment = refundAmount < 0 ? Math.abs(refundAmount) : 0
  refundAmount = Math.max(refundAmount, 0)

  return {
    deposit: deposit,
    unpaid_bills: unpaidBills,
    unpaid_amount: unpaidAmount,
    damages: damages,
    repair_cost: repairCost,
    refund_amount: refundAmount,
    additional_payment: additionalPayment,
    breakdown: {
      deposit: deposit,
      minus_unpaid: -unpaidAmount,
      minus_repair: -repairCost,
      final_refund: refundAmount
    }
  }
}

5. 在线审批与退款

退款审批流程:

javascript
function createRefundApproval(checkout, settlement) {
  let approval = {
    approval_id: generateId(),
    checkout_id: checkout.checkout_id,
    company_name: checkout.company_name,
    refund_amount: settlement.refund_amount,
    settlement_detail: settlement,
    status: 'pending',
    created_at: new Date(),
    approvers: []
  }

  // 审批规则
  if (settlement.refund_amount < 10000) {
    // 小于1万,物业主管审批
    approval.approvers.push({
      role: 'property_manager',
      user_id: checkout.property_manager,
      status: 'pending'
    })
  } else if (settlement.refund_amount < 50000) {
    // 1-5万,物业主管+财务经理审批
    approval.approvers.push(
      { role: 'property_manager', user_id: checkout.property_manager, status: 'pending' },
      { role: 'finance_manager', user_id: getFinanceManager(), status: 'pending' }
    )
  } else {
    // 大于5万,物业主管+财务经理+总经理审批
    approval.approvers.push(
      { role: 'property_manager', user_id: checkout.property_manager, status: 'pending' },
      { role: 'finance_manager', user_id: getFinanceManager(), status: 'pending' },
      { role: 'general_manager', user_id: getGeneralManager(), status: 'pending' }
    )
  }

  // 发送审批通知
  approval.approvers.forEach(approver => {
    sendNotification(approver.user_id, {
      title: '退款审批',
      content: `${checkout.company_name} 退租,需审批退款 ${settlement.refund_amount} 元`,
      approval_id: approval.approval_id
    })
  })

  return approval
}

// 审批通过后自动退款
function approveRefund(approvalId, approverId) {
  let approval = getApproval(approvalId)

  // 更新审批状态
  let approver = approval.approvers.find(a => a.user_id === approverId)
  approver.status = 'approved'
  approver.approved_at = new Date()

  // 检查是否所有人都审批通过
  let allApproved = approval.approvers.every(a => a.status === 'approved')

  if (allApproved) {
    approval.status = 'approved'

    // 自动退款
    let checkout = getCheckout(approval.checkout_id)
    refundDeposit(checkout, approval.refund_amount)

    // 通知企业
    sendNotification(checkout.company_contact, {
      title: '押金已退还',
      content: `您的押金 ${approval.refund_amount} 元已退还,请查收`
    })
  }

  return approval
}

技术复用度分析

可复用的技术能力(70%):

技术能力复用场景说明
提醒通知LEASE-001相同的定时提醒能力
审批流程中央厨房PROC-002相同的多级审批逻辑
费用计算LEASE-003相同的费用结算能力
照片管理中央厨房PROC-003相同的图片上传和对比

需要新开发的能力(30%):

  • 续租方案推荐算法
  • 照片对比与损坏识别
  • 退租流程自动化

实施方案

实施步骤

第1周: 系统开发

  • 开发续租提醒功能
  • 开发续租方案推荐
  • 开发退租流程管理
  • 开发照片对比功能
  • 开发在线审批功能

第2周: 试点与上线

  • 选择1个园区试点
  • 培训物业和财务人员
  • 制定退租验收标准
  • 全面上线

成本估算

软件成本:

  • 平台开发: 约4-5万元(可复用现有能力,成本降低70%)
  • 短信通知: 0.05元/条 × 约50条/月 × 12月 = 30元/年

人力成本节省:

  • 续租沟通及时,减少流失: 约5-8万元/年
  • 退租流程自动化,节省时间: 约2万元/年
  • 押金退还加快,减少投诉: 约1万元/年
  • 年节省成本: 约8-11万元

其他收益:

  • 续租率提升10%: 约10-15万元/年
  • 空置期缩短50%: 约5-8万元/年
  • 减少纠纷和投诉: 约2-3万元/年
  • 总收益: 约17-26万元/年

投资回收期: 约2-3个月

预期收益

效率提升:

  • 续租提醒覆盖率: 从70% → 100%
  • 退租流程时间: 从15天 → 7天
  • 押金退还时间: 从10天 → 3天

续租率提升:

  • 续租率: 从60% → 70%(提升17%)
  • 空置期: 从60天 → 30天(缩短50%)

满意度提升:

  • 退租纠纷率: 从20% → 5%(降低75%)
  • 企业满意度: 从70% → 85%(提升21%)

风险与应对

技术风险

风险1: 历史合同没有入住照片

  • 表现: 老合同没有照片,无法对比
  • 应对:
    • 新合同严格要求拍照
    • 老合同退租时以现状为准
    • 逐步补充完善照片库

风险2: 照片对比不准确

  • 表现: 人工对比主观性强,容易争议
  • 应对:
    • 制定详细的验收标准
    • 关键位置必须拍照
    • 验收时企业代表在场确认

业务风险

风险1: 续租方案推荐不合理

  • 表现: 系统推荐的租金企业不接受
  • 应对:
    • 推荐仅供参考,最终人工决策
    • 持续优化推荐算法
    • 收集反馈,调整参数

风险2: 审批流程太慢

  • 表现: 审批人不及时审批,企业等待
  • 应对:
    • 设置审批超时提醒
    • 支持手机端审批
    • 紧急情况可加急处理

风险3: 维修费用争议

  • 表现: 企业不认可维修费用估算
  • 应对:
    • 提供维修报价单
    • 支持第三方评估
    • 协商解决,避免纠纷

实施检查清单

上线前检查

  • [ ] 续租提醒功能已开发
  • [ ] 续租方案推荐已开发
  • [ ] 退租流程管理已开发
  • [ ] 照片对比功能已开发
  • [ ] 在线审批功能已开发
  • [ ] 退租验收标准已制定
  • [ ] 物业和财务人员已培训

上线后监控

  • [ ] 每日检查续租提醒发送情况
  • [ ] 每周检查退租流程进度
  • [ ] 每月分析续租率变化
  • [ ] 每季度优化续租方案推荐
  • [ ] 收集用户反馈,持续改进

成功案例参考

某科技园区(120家企业,年均30个续租/退租)

实施前:

  • 续租提醒覆盖率: 70%(经常遗漏)
  • 续租率: 60%
  • 退租流程时间: 15天
  • 押金退还时间: 10天
  • 退租纠纷率: 20%

实施后(6个月):

  • 续租提醒覆盖率: 100%(零遗漏)
  • 续租率: 70%(提升17%)
  • 退租流程时间: 7天(缩短53%)
  • 押金退还时间: 3天(缩短70%)
  • 退租纠纷率: 5%(降低75%)
  • 空置期: 从60天 → 30天(缩短50%)

相关资源

基于 AI 辅助开发,快速、灵活、可靠