GST looks simple until you build for it. The rate is on the invoice, the tax is calculated, the total is right. Then the first audit arrives and the questions are about things the system never modelled.
Place of supply determines the split
Whether a transaction attracts CGST and SGST or IGST depends on place of supply, not on the customer's billing address. For goods it is generally where delivery terminates. For services it varies by service category, and for some categories it is the recipient's location while for others it is where the service was performed.
Systems that derive the split from the billing address produce correct invoices for most transactions and incorrect ones for the awkward minority. The awkward minority is what an audit looks at. Store place of supply as its own field, derived by rule and overridable.
HSN and SAC are per line, not per invoice
An invoice mixing goods and services carries different codes and often different rates per line. Return summaries are aggregated by code. A system storing one code per invoice, or worse per customer, cannot produce a correct HSN summary and the gap only becomes visible at filing time.
Reverse charge inverts the liability
On certain supplies the recipient pays the tax rather than the supplier. The invoice shows the taxable value with no tax charged and a reverse charge indicator. If your data model assumes tax is always collected by the seller, reverse charge transactions will be recorded incorrectly and the corresponding input credit will not reconcile.
Credit notes are documents, not adjustments
Reversing a sale requires a credit note with its own number, its own date and a reference to the original invoice, reported separately in returns. Systems that handle a return by editing the original invoice destroy the audit trail and produce return data that cannot be reconciled. Invoices should be immutable once issued; corrections are new documents.
Rounding is specified
Tax is computed per line and rounded per line, not computed on the invoice total. The difference is small per transaction and produces persistent reconciliation mismatches at volume. Decide the rounding rule once, apply it consistently, and store the rounding difference explicitly.
Design for it early
All of this is straightforward to model at the start and expensive to retrofit, because retrofitting means migrating historical documents whose tax treatment was never recorded in enough detail to reconstruct.