写点什么

我从开发计费系统中学到的 5 件事

  • 2021-05-12
  • 本文字数:2449 字

    阅读完需:约 8 分钟

我从开发计费系统中学到的5件事

半年前,我加入了 Pleo,一家拥有大约 1.5 万名客户的 FinTech 初创公司。我的主要工作是负责进一步开发计费系统。


刚加入时,我有点担心计费系统能有多少事情要做?我们会不会在三四个个月后就无事可做呢?


新客户注册,支付每月的订阅费,就这样了……对吧?


是的,但实际上也不是。这只是最基本的场景。除了这个,还有大量的边界情况和陷阱需要考虑。


一个个找出这些边界情况并不是件好差事,我希望有人能提供一份简短的指南。于是,我写了这篇文章。如果你正在考虑构建(甚至只是使用)计费系统,可以看一下。

不是所有货币都有小数位

在设计数据库表结构时,有一个普遍观点是“永远不要用浮点数来表示钱”。一些人建议使用MONEY数据类型,另一些人则告诉你要使用DECIMAL


对于计费系统来说,这两种类型在某些情况下都是错的。当然,在美国和大多数欧洲国家,货币是有小数位的。


在日本,情况就不是这样的——你不能收取 2500.50 日元的费用。除了日本,冰岛的货币也没有小数位。相反,伊拉克第纳尔(伊拉克货币单位)有三个小数位。


从技术上讲,你可以认为整数也是一种小数,但如果你没有考虑到一些情况,有可能会给你的系统带来麻烦。在构建计费系统时,你必须考虑足够的扩展性,以便处理这些国家的货币,即使它们可能不是你当前关注的焦点。


在保存数值时,可以包含可能会使用到的小数位。


例如,在大多数情况下:


  • 100 美元可以存为 10000

  • 2500 日元存为 2500

  • 2500 冰岛克朗存为 2500

  • 100 伊拉克第纳尔存为 100000


以下是部分没有小数位的货币。

ISO 4217 标准规定了世界各国的货币编码,可以在维基百科上找到其他更多内容。

票据一旦创建就无法取消

至少在欧洲大部分地区不能取消。在美国,取消未支付的票据是很常见的事情。然而,这在许多欧盟国家是不合法的。如果你因此犯了错,它将成为一个巨大的痛点!


这属于“标准会计”的一部分,但有时它确实很伤人,因为错误总是会不可避免地发生。票据一旦创建,如果你想要取消,只能再创建一个全额的贷记单。


什么是贷记单?你可以把它看成是一种反向票据。贷记单是一种独特的单据,就像发票一样,它们也有自己的编号。


因此,贷记单是一种可以用来将原始发票标记为“已支付”的文件,即使没有发生金钱转移。

不是所有的计费系统都是合规的

当你进入一个新区域开发业务,你要做的不仅仅是为你的产品和服务定价,还必须确保自己遵守各种规章制度——这可能比你想象的要微妙得多。


很多公司从第三方 SaaS 公司购买服务,我们通常认为这样做是合规的。


但我发现情况并非总是如此(当然,我们有责任去核实)。


这里有两个例子:


1.在欧盟,供应商必须在每次销售前确保客户的增值税号码(如果使用了)是正确的。


例如,Stripe 会做一次增值税信息检查,但不做任何其他后续检查,也不检查与客户详细信息是否匹配。


其他一些服务根本什么都不检查,所以请确保你是合规的!

2.欧盟增值税发票必须包含公司增值税的具体信息。然而,很多发票生成器(包括 Stripe 公司)生成的票据甚至不包含增值税信息。


你可能需要找到一种方法,比如利用地址栏备注税务相关信息。无论使用哪种方式,你都要确保自己是合规的!

当用户变更了付费计划该怎么办

我原以为让一家公司成为付费用户是很容易的。他们注册后,经过短暂的试用,就成为付费用户(“Evergreen”),一切都很棒!



理想情况下,一家公司开始使用产品,在后续的整个生命周期当中都不做付费计划变更(直到退出)。


与很多其他公司一样,我们也提供了不同级别的服务,需要客户预付一个月的使用费。因此,如果客户对服务进行了升级或降级,我们要在未来的某个时刻修改他们的付费计划。



付费计划可以在将来某个时刻发生变化,但客户可能希望立即使用升级后的服务。


这好像没什么问题,直到你开始考虑一些情况:


如果他们想立即使用升级后的服务该怎么办?


我们可以升级他们的付费计划,但不向他们收费。这意味着你需要将计费引擎与指定服务级别的授权引擎分开!



你也可以立即收费,但比例该怎么算呢?


如果他们也想立即为新付费计划付费该怎么办?


这比你想象的要常见得多。我们可以立即进行升级!但是,我们是只收取差价呢,还是把整个月的费用都记在账上,再收取新服务的费用呢?


我们偶然发现了可怕的比例问题,这会导致你、客服和客户很难理解票据上的内容。



一个例子,有时候上面会有几十个细项。


实际上,我们也想把他们的试用期延长一点,这样他们在变更付费计划时就有更长的宽限期。


这个其实没那么难……



但有时候他们在开始付费计划后才想要变更计划。


这真是一个噩梦,你可能还需要赊销一些发票!



可能还会有其他情况发生,虽然可能不是每次都会发生。但随着客户数量的增加,它们就会发生。所以,请提前计划好你要如何处理这些情况!

强行制定规则来应对边界情况?

客户不是公司,他们是人,而且不同的人有不同的需求。


除非你是在非常严格的环境中,否则你必须要考虑强制执行规则的难度。


下面是一些例子:


1.我们只针对英国客户推出折扣。


这样当然可以,但如果一个英国客户在德国有分公司呢?分公司也可以享受这个折扣吗?(答案是肯定的!)


2.我们发起一项活动,每个注册用户都可以免费使用产品,直到 2021 年 4 月 1 日。这适用于所有客户,即使是签订了多年合同的客户。


然而,在签了合同后,一些客户却执意要付费。


3.一些客户想在 2020 年底提前支付 2021 年的费用,因为他们有多余的预算不能在 2021 年使用。


我们的系统不支持提前付费。


除了计划如何应对这些问题,也要考虑是否可以绕过它们,因为这些问题都将可能发生。


在我看来,最好的策略是为业务提供支持,赢得客户,而不是制定太过严苛的规则。

事情从来没那么简单

无论一个问题最初看起来多么简单,它总是有一定的深度和大量需要解答的疑问。


设计和开发计费系统是一件很难的事情,哪怕你只是稍微偏离了“标准”一点点。但如果你努力找到正确的方法,带给你的将是快乐的客户、快乐的销售和支持代表,以及快乐的财务部门!


这些是我在开始开发计费系统前希望知道的 5 件事,当然,它们并不能代表全部。


原文链接:


https://arnon.dk/5-things-i-learned-developing-billing-system/#comments?fileGuid=DxvCG6DLD0MWCpuw

2021-05-12 17:133533
用户头像

发布了 114 篇内容, 共 47.5 次阅读, 收获喜欢 313 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营模块8作业

eoeoeo

架构实战营

闭关三月!啃透美团保姆级分布式进阶技术手册,终入美团定L8

Java 面试

经过一年的不懈努力社招进了阿里,我总结了50个Java面试必考题

Java 程序员 架构 面试

发布60分钟!霸榜Github的阿里面试参考指南,啃透涨薪10k

Java架构师迁哥

点通生活系统软件开发搭建

阿里新出炉爆款的顶配版Spring Security笔记,肝完变秃也变强

Java spring 编程 架构

喜马拉雅亿级用户量的离线消息推送系统架构设计实践

JackJiang

消息推送 即时通讯 IM push

云计算对比IDC的优势简单说明-行云管家

行云管家

云计算 服务器

趣口袋拼团系统APP开发案例

一文读懂大数据实时计算

五分钟学大数据

实时计算 7月日更

架构实战营-模块八-作业

大可

所有前端都要看的2D游戏化互动入门基础知识

蚂蚁集团移动开发平台 mPaaS

大前端

新思科技凭借Coverity Scan帮助NGINX确保代码质量和安全

InfoQ_434670063458

新思科技 软件安全 Coverity 静态代码分析

绍兴服装设计培训到兴德教育!

Geek_196d9f

【kafka实战】分区重分配可能出现的问题和排查问题思路(生产环境实战,干货!!!非常干!!!建议收藏)

石臻臻的杂货铺

Kafk Kafka实战

绍兴柯桥CAD制图培训到兴德教育

Geek_196d9f

CryptoPlace挖矿APP系统开发简介

面试官:你能讲讲栈和队列吗?我:你礼貌吗?

Ayue、

数据结构

高并发应对策略系列文章阶段汇总,提供离线文档下载

Coder的技术之路

你见过最具有代表性的面试是什么样的?大三4面上岸腾讯(Java岗)

Java架构师迁哥

互帮侠系统软件开发公司

搭建 JumpServer 堡垒机管理数万台游戏服务器

学神来啦

云计算 Linux linux运维 运维工程师 运维平台

柯桥PS培训到兴德教育!零基础开始辅导!

Geek_196d9f

从零开始学习3D可视化之摄像机投影方式

ThingJS数字孪生引擎

大前端 可视化 3D 数字孪生

我用Vanilla JS重写了一遍项目,结果……

Faye

大前端 js 原生

CodeDay 北京站报名倒计时

蚂蚁集团移动开发平台 mPaaS

移动开发

hdfs 的集群间拷贝、归档、回收站等功能剖析

大数据技术指南

hdfs 7月日更

智慧海洋三维可视化,科技运维助工业物联网一臂之力

一只数据鲸鱼

数据可视化 3D可视化 智慧工业 海上作业

TY短视频系统APP开发介绍

Flink Runtime架构

Geek_qsftko

flink

万字图文丨最全的Java继承解读

华为云开发者联盟

Java 开发 代码 继承

我从开发计费系统中学到的5件事_语言 & 开发_Arnon Shimoni_InfoQ精选文章