Packages

An Elixir library for ISO 8583, Supports message validation, decoding and encoding with custom field data types and length

Current section

Files

Jump to
iso_8583 lib iso_8583 message response_status.ex
Raw

lib/iso_8583/message/response_status.ex

defmodule ISO8583.Message.ResponseStatus do
@moduledoc false
@message_status %{
"00": "Approved or completed successfully",
"01": "Refer to card issuer",
"02": "Refer to card issuer, special condition",
"03": "Invalid merchant",
"04": "Pick-up card",
"05": "Do not honor",
"06": "Error",
"07": "Pick-up card, special condition",
"08": "Honor with identification",
"09": "Request in progress",
"10": "Approved, partial",
"11": "Approved, VIP",
"12": "Invalid transaction",
"13": "Invalid amount",
"14": "Invalid card number",
"15": "No such issuer",
"16": "Approved, update track 3",
"17": "Customer cancellation",
"18": "Customer dispute",
"19": "Re-enter transaction",
"20": "Invalid response",
"21": "No action taken",
"22": "Suspected malfunction",
"23": "Unacceptable transaction fee",
"24": "File update not supported",
"25": "Unable to locate record",
"26": "Duplicate record",
"27": "File update field edit error",
"28": "File update file locked",
"29": "File update failed",
"30": "Format error",
"31": "Bank not supported",
"32": "Completed partially",
"33": "Expired card, pick-up",
"34": "Suspected fraud, pick-up",
"35": "Contact acquirer, pick-up",
"36": "Restricted card, pick-up",
"37": "Call acquirer security, pick-up",
"38": "PIN tries exceeded, pick-up",
"39": "No credit account",
"40": "Function not supported",
"41": "Lost card, pick-up",
"42": "No universal account",
"43": "Stolen card, pick-up",
"44": "No investment account",
"45": "Account closed",
"46": "Identification required",
"47": "Identification cross-check required",
"48": "to 50 Reserved for future Postilion use",
"51": "Not sufficient funds",
"52": "No check account",
"53": "No savings account",
"54": "Expired card",
"55": "Incorrect PIN",
"56": "No card record",
"57": "Transaction not permitted to cardholder",
"58": "Transaction not permitted on terminal",
"59": "Suspected fraud",
"60": "Contact acquirer",
"61": "Exceeds withdrawal limit",
"62": "Restricted card",
"63": "Security violation",
"64": "Original amount incorrect",
"65": "Exceeds withdrawal frequency",
"66": "Call acquirer security",
"67": "Hard capture",
"68": "Response received too late",
"69": "Advice received too late",
"70": "Reserved for future Postilion use",
"71": "Reserved for future Postilion use",
"72": "Reserved for future Postilion use",
"73": "Reserved for future Postilion use",
"74": "Reserved for future Postilion use",
"75": "PIN tries exceeded",
"76": "Reserved for future Postilion use",
"77": "Intervene, bank approval required",
"78": "Intervene, bank approval required for partial amount",
"79": "Reserved for client-specific use (declined)",
"80": "Reserved for client-specific use (declined)",
"81": "Reserved for client-specific use (declined)",
"82": "Reserved for client-specific use (declined)",
"83": "Reserved for client-specific use (declined)",
"84": "Reserved for client-specific use (declined)",
"85": "Reserved for client-specific use (declined)",
"86": "Reserved for client-specific use (declined)",
"87": "Reserved for client-specific use (declined)",
"88": "Reserved for client-specific use (declined)",
"89": "Reserved for client-specific use (declined)",
"90": "Cut-off in progress",
"91": "Issuer or switch inoperative",
"92": "Routing error",
"93": "Violation of law",
"94": "Duplicate transaction",
"95": "Reconcile error",
"96": "System malfunction",
"97": "Reserved for future Postilion use",
"98": "Exceeds cash limit",
"99": "Reserved for future Postilion use",
A1: "ATC not incremented",
A2: "ATC limit exceeded",
A3: "ATC configuration error",
A4: "CVR check failure",
A5: "CVR configuration error",
A6: "TVR check failure",
A7: "TVR configuration error",
C: "Zero Unacceptable PIN",
C1: "PIN Change failed",
C2: "PIN Unblock failed",
D1: "MAC Error",
E1: "Prepay error"
}
defp invalid(status_code) do
case @message_status[status_code |> String.to_atom()] do
nil -> {:error, "Unknown statuscode"}
m -> {:error, m}
end
end
def ok?(%{"39": "00"}), do: {:ok, @message_status[:"00"]}
def ok?(%{"39" => "00"}), do: {:ok, @message_status[:"00"]}
def ok?(%{"39": status_code}), do: invalid(status_code)
def ok?(%{"39" => status_code}), do: invalid(status_code)
end