From 77a4ad47f857d1cffb5f2c8f336d4e6effdb2540 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 25 Nov 2023 10:16:29 +0100 Subject: [PATCH] Validate CcyAmt: add .00 to integer numbers fixes https://github.com/stapelberg/qrbill/issues/8 --- qrbill.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/qrbill.go b/qrbill.go index d1b9018..8abeea1 100644 --- a/qrbill.go +++ b/qrbill.go @@ -124,6 +124,20 @@ type QRCHCcyAmt struct { Ccy string // Currency } +func (a QRCHCcyAmt) Validate() QRCHCcyAmt { + c := a + + if c.Amt != "" { + // Some banking apps are picky regarding integer numbers (e.g. 50) and + // require a separator plus two digits (e.g. 50.00). + if !strings.Contains(c.Amt, ".") { + c.Amt += ".00" + } + } + + return c +} + type QRCHRmtInfAddInf struct { Ustrd string // Unstructured message Trailer string // Trailer @@ -194,6 +208,8 @@ func (q *QRCH) Validate() *QRCH { clone.UltmtDbtr = clone.UltmtDbtr.Validate() + clone.CcyAmt = clone.CcyAmt.Validate() + clone.RmtInf.Tp = nonAlphanumericRe.ReplaceAllString(clone.RmtInf.Tp, "") if v := clone.RmtInf.Tp; len(v) > 4 { clone.RmtInf.Tp = v[:4]