电子发票校验规则与故障排除
提交电子发票时,LHDN 的 MyInvois 系统会先校验再受理。如果缺少必填字段,单据不会被提交,而是停放在池中等待补正(见电子发票池与提交路由)。如果字段齐全但内容有误,LHDN 可能先受理提交、随后把单据标记为 Invalid —— 你需要修复后重新提交。
本指南两者都涵盖:哪些字段必须有,以及最常见错误怎么修。
必填字段
单据表头
每张电子发票至少需要:
- 供应方:名称、TIN、ID 类型 + ID 值(如 BRN)、行业分类代码、经营活动描述、地址、联系电话
- 购买方:名称、TIN、ID 类型 + ID 值、地址、联系电话
- 单据:电子发票类型与版本、签发日期时间、币种代码
- 金额:小计、不含税总额、含税总额
行项目
每一行需要:
- 商品分类代码(LHDN 约 45 个分类;留空时系统默认为
022 – Others) - 商品名称
- 单价
- 税种代码
- 税额
行上无税时,税种自动设为 06 – Not Applicable;有税但未填税种时,默认为 01 – Sales Tax。
004 专用于合并电子发票。切勿在单独电子发票的行上使用 —— 即使买方 TIN 等其他信息全部正确,LHDN 也会将单据标记为 Invalid。地址
供应方和购买方地址至少必须包含:
| 字段 | 必填 | 最大长度 |
|---|---|---|
| 地址行 1 | 是 | 150 字符 |
| 城市 | 是 | 50 字符 |
| 州属 | 是 | — |
| 地址行 2–3 | 否 | 150 字符 |
| 邮编 | 否 | 5 字符 |
地址行 1、城市或州属缺失时,单据不会被提交,而是进入池中等待补全。
马来西亚州属代码
LHDN 要求州属以数字代码提交。系统会自动解析自由文本的州名 —— 包括 KL、WPKL、Penang、N9、Johore、Malacca 等常见缩写 —— 无法匹配时会提示人工更正。
| 代码 | 州属 | 代码 | 州属 |
|---|---|---|---|
| 01 | 柔佛 Johor | 09 | 玻璃市 Perlis |
| 02 | 吉打 Kedah | 10 | 雪兰莪 Selangor |
| 03 | 吉兰丹 Kelantan | 11 | 登嘉楼 Terengganu |
| 04 | 马六甲 Melaka | 12 | 沙巴 Sabah |
| 05 | 森美兰 Negeri Sembilan | 13 | 砂拉越 Sarawak |
| 06 | 彭亨 Pahang | 14 | 吉隆坡联邦直辖区 |
| 07 | 槟城 Pulau Pinang | 15 | 纳闽联邦直辖区 |
| 08 | 霹雳 Perak | 16 | 布城联邦直辖区 |
外国地址的州属字段按文本原样传递,国家从地址数据推导(无法确定时默认马来西亚)。
General TIN:没有买方 TIN 时怎么办
LHDN 公布了四个 General TIN,用于无法取得真实 TIN 的场景:
| General TIN | 适用对象 |
|---|---|
EI00000000010 | 一般公众 / 本地买方(主要用于合并电子发票) |
EI00000000020 | 外国买方 |
EI00000000030 | 外国供应商(自开票采购) |
EI00000000040 | 政府 / 军队 |
容易踩坑的规则:
- 单独电子发票应优先使用买方的真实 TIN。
- 本地无 TIN 买方的单独电子发票可以使用
EI00000000010—— 但必须同时满足ID 类型 = NRIC且提供有效的 NRIC 号码。其他组合会被拒绝。 - 买方 ID 类型为 BRN 或护照时,不能使用 General Public TIN —— 必须取得买方真实 TIN。
- 买方有 TIN 但无 ID 值时,系统自动以
000000000000填充 ID 值,LHDN 可接受。
常见校验错误与修复
1. 外币发票的币种设置错误
现象: USD(或其他外币)发票因币种错误被拒。
原因: 外币单据的单据币种应为外币(如 USD),而本位币必须是 MYR。两者都被设成外币时就会报错。
修复: 把源单据的本位币改回 MYR,然后重新处理电子发票。
示例: GadgetSphere Sdn Bhd 用 USD 向新加坡经销商开票。单据币种 USD、本位币 MYR、记录汇率 —— 顺利提交。误将本位币设为 USD 时,LHDN 拒绝了该单据。
2. General TIN 误用
现象: LHDN 将单据标记为 Invalid,报 TIN 相关错误(例如"不允许使用 general TIN"类的提示)。
原因与修复: 违反了上文 General TIN 的四条规则之一 —— 最常见的是 EI00000000010 搭配了 NRIC 以外的 ID 类型,或 NRIC 无效。更正买方 TIN/ID 组合后执行 Save and Resubmit。
3. 贷记单/借记单引用了失效的原始电子发票
现象: 贷记单、借记单、退款单或销售退货本身数据无误,却被拒绝。
原因: 这类单据必须引用原始电子发票的 LHDN 单据。如果原始发票先被拒(Invalid)、后重新提交成功,它会获得新的 LHDN 单据号 —— 而你的贷记单可能仍指向旧的失效单据。
修复: 把贷记单的原始发票引用更新为当前 Valid 的 LHDN 单据,然后 Save and Resubmit。若不存在有效的原始发票:
| 方案 | 操作 |
|---|---|
| 不带引用提交 | 清空原始发票引用字段后重新提交(在允许的场景下) |
| 先修复原始发票 | 先重新提交原始发票使其变为 Valid,再让贷记单指向它 |
4. 重复提交 —— 同一笔销售在 LHDN 被计了两次
现象: 同一张源单据同时出现在两张 Valid 电子发票中(例如先单独提交了一次,又被并入了当月合并电子发票),导致 LHDN 记录的销售额虚高。
原因:
- 手工"推入批次池"操作执行了两次(双击或超时重试),产生两条池记录,分别被扫入不同的合并电子发票。
- 单据已单独提交,但它在批次池中的副本仍处于未处理状态,被月度合并再次收入。
修复:
| 情形 | 操作 |
|---|---|
| 距错误电子发票通过校验不足 72 小时 | 取消含重复的那张电子发票,将其余合法单据重新合并提交。提交前核对替换发票的总额。 |
| 已超过 72 小时 | 对重复金额开具贷记单,引用含重复的那张电子发票。请与会计确认 —— 通常账面是正确的,只是 LHDN 申报虚高。 |
预防: 任何手工推送或超时后,先核对池中的单据数量再合并 —— 切勿盲目重试。
5. 倒填日期单据因签发时间被拒
现象: 历史日期的单据因日期/时间问题被拒绝。
原因: LHDN 要求电子发票的签发日期时间为实际提交时间,而不是原交易日期。交易日期在单据上另行保留。
修复: 无需手工处理 —— 系统自动以提交时刻为准。若外部集成的单据出现此错误,请确认集成没有用历史交易日期覆盖签发时间。往月 B2C 单据的合并见池与提交路由。
修复流程
无论哪种错误,恢复流程都一样:
- 在相应的池或提交界面找到单据(单据上会显示 LHDN 错误代码和消息)。
- 更正数据 —— 买方信息、币种、引用或行分类。
- 执行 Save and Resubmit。
- 跟踪状态直至变为 Valid。