defmodule DaProductApp.Repo.Migrations.CreateStaticQr do use Ecto.Migration def change do create table(:static_qr) do # Core identifiers add :qr_id, :string, null: false add :tr, :string, null: false # Transaction reference from QR string add :tn, :string, null: false # Transaction note from QR string # Partner and merchant information add :partner_id, :string, null: false add :merchant_id, :string, null: false add :merchant_name, :string add :merchant_category, :string, default: "5411" # Amount and currency details add :foreign_amount, :decimal, precision: 18, scale: 6, null: false add :foreign_currency, :string, size: 3, null: false add :inr_amount, :decimal, precision: 18, scale: 2, null: false add :fx_rate, :decimal, precision: 18, scale: 8, null: false add :markup_percentage, :decimal, precision: 7, scale: 4, default: "0.00" # Corridor and purpose information add :corridor, :string, null: false add :purpose_code, :string, default: "P0101" add :initiation_mode, :string, default: "02" # Static QR (mode 02 as per UPI spec) # QR properties add :qr_string, :text, null: false add :qr_type, :string, default: "static" add :max_usage_count, :integer, default: 1 add :usage_count, :integer, default: 0 add :status, :string, null: false, default: "active" # Validity and expiry add :validity_minutes, :integer, default: 300 add :expires_at, :utc_datetime add :last_used_at, :utc_datetime # Customer reference and metadata add :customer_ref, :string add :metadata, :map, default: %{} # Transaction linking (nullable - only set when QR is used in ReqValqr) add :txn_id, :bigint, null: true timestamps() end # Unique constraints and indexes create unique_index(:static_qr, [:qr_id]) create unique_index(:static_qr, [:tr, :tn]) # For QR validation lookup # Performance indexes create index(:static_qr, [:partner_id]) create index(:static_qr, [:merchant_id]) create index(:static_qr, [:status]) create index(:static_qr, [:corridor]) create index(:static_qr, [:expires_at]) create index(:static_qr, [:txn_id]) end end