1
0
mirror of https://github.com/aclindsa/moneygo.git synced 2024-09-21 04:10:05 -04:00
moneygo/securities.go
Aaron Lindsay 58c7c17727 Initial pass at OFX imports
Still needs some fixups:
 * UI is incomplete
 * Investment transactions are unbalanced initially
 * OFX imports don't detect if one of the description fields for a
   transaction is empty (to fall back on another)
 * I'm sure plenty of other issues I haven't discovered yet
2016-02-02 21:46:27 -05:00

1360 lines
30 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"encoding/json"
"errors"
"log"
"net/http"
)
const (
Currency int64 = 1
Stock = 2
)
type Security struct {
SecurityId int64
Name string
Description string
Symbol string
// Number of decimal digits (to the right of the decimal point) this
// security is precise to
Precision int
Type int64
// AlternateId is CUSIP for Type=Stock
AlternateId string
}
type SecurityList struct {
Securities *[]*Security `json:"securities"`
}
var security_map = map[int64]*Security{
// ISO 4217, from http://www.currency-iso.org/en/home/tables/table-a1.html
8: &Security{
SecurityId: 8,
Name: "ALL",
Description: "Lek",
Symbol: "ALL",
Precision: 2,
Type: Banknote},
12: &Security{
SecurityId: 12,
Name: "DZD",
Description: "Algerian Dinar",
Symbol: "DZD",
Precision: 2,
Type: Banknote},
32: &Security{
SecurityId: 32,
Name: "ARS",
Description: "Argentine Peso",
Symbol: "ARS",
Precision: 2,
Type: Banknote},
36: &Security{
SecurityId: 36,
Name: "AUD",
Description: "Australian Dollar",
Symbol: "AUD",
Precision: 2,
Type: Banknote},
44: &Security{
SecurityId: 44,
Name: "BSD",
Description: "Bahamian Dollar",
Symbol: "BSD",
Precision: 2,
Type: Banknote},
48: &Security{
SecurityId: 48,
Name: "BHD",
Description: "Bahraini Dinar",
Symbol: "BHD",
Precision: 3,
Type: Banknote},
50: &Security{
SecurityId: 50,
Name: "BDT",
Description: "Taka",
Symbol: "BDT",
Precision: 2,
Type: Banknote},
51: &Security{
SecurityId: 51,
Name: "AMD",
Description: "Armenian Dram",
Symbol: "AMD",
Precision: 2,
Type: Banknote},
52: &Security{
SecurityId: 52,
Name: "BBD",
Description: "Barbados Dollar",
Symbol: "BBD",
Precision: 2,
Type: Banknote},
60: &Security{
SecurityId: 60,
Name: "BMD",
Description: "Bermudian Dollar",
Symbol: "BMD",
Precision: 2,
Type: Banknote},
64: &Security{
SecurityId: 64,
Name: "BTN",
Description: "Ngultrum",
Symbol: "BTN",
Precision: 2,
Type: Banknote},
68: &Security{
SecurityId: 68,
Name: "BOB",
Description: "Boliviano",
Symbol: "BOB",
Precision: 2,
Type: Banknote},
72: &Security{
SecurityId: 72,
Name: "BWP",
Description: "Pula",
Symbol: "BWP",
Precision: 2,
Type: Banknote},
84: &Security{
SecurityId: 84,
Name: "BZD",
Description: "Belize Dollar",
Symbol: "BZD",
Precision: 2,
Type: Banknote},
90: &Security{
SecurityId: 90,
Name: "SBD",
Description: "Solomon Islands Dollar",
Symbol: "SBD",
Precision: 2,
Type: Banknote},
96: &Security{
SecurityId: 96,
Name: "BND",
Description: "Brunei Dollar",
Symbol: "BND",
Precision: 2,
Type: Banknote},
104: &Security{
SecurityId: 104,
Name: "MMK",
Description: "Kyat",
Symbol: "MMK",
Precision: 2,
Type: Banknote},
108: &Security{
SecurityId: 108,
Name: "BIF",
Description: "Burundi Franc",
Symbol: "BIF",
Precision: 0,
Type: Banknote},
116: &Security{
SecurityId: 116,
Name: "KHR",
Description: "Riel",
Symbol: "KHR",
Precision: 2,
Type: Banknote},
124: &Security{
SecurityId: 124,
Name: "CAD",
Description: "Canadian Dollar",
Symbol: "CAD",
Precision: 2,
Type: Banknote},
132: &Security{
SecurityId: 132,
Name: "CVE",
Description: "Cabo Verde Escudo",
Symbol: "CVE",
Precision: 2,
Type: Banknote},
136: &Security{
SecurityId: 136,
Name: "KYD",
Description: "Cayman Islands Dollar",
Symbol: "KYD",
Precision: 2,
Type: Banknote},
144: &Security{
SecurityId: 144,
Name: "LKR",
Description: "Sri Lanka Rupee",
Symbol: "LKR",
Precision: 2,
Type: Banknote},
152: &Security{
SecurityId: 152,
Name: "CLP",
Description: "Chilean Peso",
Symbol: "CLP",
Precision: 0,
Type: Banknote},
156: &Security{
SecurityId: 156,
Name: "CNY",
Description: "Yuan Renminbi",
Symbol: "CNY",
Precision: 2,
Type: Banknote},
170: &Security{
SecurityId: 170,
Name: "COP",
Description: "Colombian Peso",
Symbol: "COP",
Precision: 2,
Type: Banknote},
174: &Security{
SecurityId: 174,
Name: "KMF",
Description: "Comoro Franc",
Symbol: "KMF",
Precision: 0,
Type: Banknote},
188: &Security{
SecurityId: 188,
Name: "CRC",
Description: "Costa Rican Colon",
Symbol: "CRC",
Precision: 2,
Type: Banknote},
191: &Security{
SecurityId: 191,
Name: "HRK",
Description: "Kuna",
Symbol: "HRK",
Precision: 2,
Type: Banknote},
192: &Security{
SecurityId: 192,
Name: "CUP",
Description: "Cuban Peso",
Symbol: "CUP",
Precision: 2,
Type: Banknote},
203: &Security{
SecurityId: 203,
Name: "CZK",
Description: "Czech Koruna",
Symbol: "CZK",
Precision: 2,
Type: Banknote},
208: &Security{
SecurityId: 208,
Name: "DKK",
Description: "Danish Krone",
Symbol: "DKK",
Precision: 2,
Type: Banknote},
214: &Security{
SecurityId: 214,
Name: "DOP",
Description: "Dominican Peso",
Symbol: "DOP",
Precision: 2,
Type: Banknote},
222: &Security{
SecurityId: 222,
Name: "SVC",
Description: "El Salvador Colon",
Symbol: "SVC",
Precision: 2,
Type: Banknote},
230: &Security{
SecurityId: 230,
Name: "ETB",
Description: "Ethiopian Birr",
Symbol: "ETB",
Precision: 2,
Type: Banknote},
232: &Security{
SecurityId: 232,
Name: "ERN",
Description: "Nakfa",
Symbol: "ERN",
Precision: 2,
Type: Banknote},
238: &Security{
SecurityId: 238,
Name: "FKP",
Description: "Falkland Islands Pound",
Symbol: "FKP",
Precision: 2,
Type: Banknote},
242: &Security{
SecurityId: 242,
Name: "FJD",
Description: "Fiji Dollar",
Symbol: "FJD",
Precision: 2,
Type: Banknote},
262: &Security{
SecurityId: 262,
Name: "DJF",
Description: "Djibouti Franc",
Symbol: "DJF",
Precision: 0,
Type: Banknote},
270: &Security{
SecurityId: 270,
Name: "GMD",
Description: "Dalasi",
Symbol: "GMD",
Precision: 2,
Type: Banknote},
292: &Security{
SecurityId: 292,
Name: "GIP",
Description: "Gibraltar Pound",
Symbol: "GIP",
Precision: 2,
Type: Banknote},
320: &Security{
SecurityId: 320,
Name: "GTQ",
Description: "Quetzal",
Symbol: "GTQ",
Precision: 2,
Type: Banknote},
324: &Security{
SecurityId: 324,
Name: "GNF",
Description: "Guinea Franc",
Symbol: "GNF",
Precision: 0,
Type: Banknote},
328: &Security{
SecurityId: 328,
Name: "GYD",
Description: "Guyana Dollar",
Symbol: "GYD",
Precision: 2,
Type: Banknote},
332: &Security{
SecurityId: 332,
Name: "HTG",
Description: "Gourde",
Symbol: "HTG",
Precision: 2,
Type: Banknote},
340: &Security{
SecurityId: 340,
Name: "HNL",
Description: "Lempira",
Symbol: "HNL",
Precision: 2,
Type: Banknote},
344: &Security{
SecurityId: 344,
Name: "HKD",
Description: "Hong Kong Dollar",
Symbol: "HKD",
Precision: 2,
Type: Banknote},
348: &Security{
SecurityId: 348,
Name: "HUF",
Description: "Forint",
Symbol: "HUF",
Precision: 2,
Type: Banknote},
352: &Security{
SecurityId: 352,
Name: "ISK",
Description: "Iceland Krona",
Symbol: "ISK",
Precision: 0,
Type: Banknote},
356: &Security{
SecurityId: 356,
Name: "INR",
Description: "Indian Rupee",
Symbol: "INR",
Precision: 2,
Type: Banknote},
360: &Security{
SecurityId: 360,
Name: "IDR",
Description: "Rupiah",
Symbol: "IDR",
Precision: 2,
Type: Banknote},
364: &Security{
SecurityId: 364,
Name: "IRR",
Description: "Iranian Rial",
Symbol: "IRR",
Precision: 2,
Type: Banknote},
368: &Security{
SecurityId: 368,
Name: "IQD",
Description: "Iraqi Dinar",
Symbol: "IQD",
Precision: 3,
Type: Banknote},
376: &Security{
SecurityId: 376,
Name: "ILS",
Description: "New Israeli Sheqel",
Symbol: "ILS",
Precision: 2,
Type: Banknote},
388: &Security{
SecurityId: 388,
Name: "JMD",
Description: "Jamaican Dollar",
Symbol: "JMD",
Precision: 2,
Type: Banknote},
392: &Security{
SecurityId: 392,
Name: "JPY",
Description: "Yen",
Symbol: "JPY",
Precision: 0,
Type: Banknote},
398: &Security{
SecurityId: 398,
Name: "KZT",
Description: "Tenge",
Symbol: "KZT",
Precision: 2,
Type: Banknote},
400: &Security{
SecurityId: 400,
Name: "JOD",
Description: "Jordanian Dinar",
Symbol: "JOD",
Precision: 3,
Type: Banknote},
404: &Security{
SecurityId: 404,
Name: "KES",
Description: "Kenyan Shilling",
Symbol: "KES",
Precision: 2,
Type: Banknote},
408: &Security{
SecurityId: 408,
Name: "KPW",
Description: "North Korean Won",
Symbol: "KPW",
Precision: 2,
Type: Banknote},
410: &Security{
SecurityId: 410,
Name: "KRW",
Description: "Won",
Symbol: "KRW",
Precision: 0,
Type: Banknote},
414: &Security{
SecurityId: 414,
Name: "KWD",
Description: "Kuwaiti Dinar",
Symbol: "KWD",
Precision: 3,
Type: Banknote},
417: &Security{
SecurityId: 417,
Name: "KGS",
Description: "Som",
Symbol: "KGS",
Precision: 2,
Type: Banknote},
418: &Security{
SecurityId: 418,
Name: "LAK",
Description: "Kip",
Symbol: "LAK",
Precision: 2,
Type: Banknote},
422: &Security{
SecurityId: 422,
Name: "LBP",
Description: "Lebanese Pound",
Symbol: "LBP",
Precision: 2,
Type: Banknote},
426: &Security{
SecurityId: 426,
Name: "LSL",
Description: "Loti",
Symbol: "LSL",
Precision: 2,
Type: Banknote},
430: &Security{
SecurityId: 430,
Name: "LRD",
Description: "Liberian Dollar",
Symbol: "LRD",
Precision: 2,
Type: Banknote},
434: &Security{
SecurityId: 434,
Name: "LYD",
Description: "Libyan Dinar",
Symbol: "LYD",
Precision: 3,
Type: Banknote},
446: &Security{
SecurityId: 446,
Name: "MOP",
Description: "Pataca",
Symbol: "MOP",
Precision: 2,
Type: Banknote},
454: &Security{
SecurityId: 454,
Name: "MWK",
Description: "Kwacha",
Symbol: "MWK",
Precision: 2,
Type: Banknote},
458: &Security{
SecurityId: 458,
Name: "MYR",
Description: "Malaysian Ringgit",
Symbol: "MYR",
Precision: 2,
Type: Banknote},
462: &Security{
SecurityId: 462,
Name: "MVR",
Description: "Rufiyaa",
Symbol: "MVR",
Precision: 2,
Type: Banknote},
478: &Security{
SecurityId: 478,
Name: "MRO",
Description: "Ouguiya",
Symbol: "MRO",
Precision: 2,
Type: Banknote},
480: &Security{
SecurityId: 480,
Name: "MUR",
Description: "Mauritius Rupee",
Symbol: "MUR",
Precision: 2,
Type: Banknote},
484: &Security{
SecurityId: 484,
Name: "MXN",
Description: "Mexican Peso",
Symbol: "MXN",
Precision: 2,
Type: Banknote},
496: &Security{
SecurityId: 496,
Name: "MNT",
Description: "Tugrik",
Symbol: "MNT",
Precision: 2,
Type: Banknote},
498: &Security{
SecurityId: 498,
Name: "MDL",
Description: "Moldovan Leu",
Symbol: "MDL",
Precision: 2,
Type: Banknote},
504: &Security{
SecurityId: 504,
Name: "MAD",
Description: "Moroccan Dirham",
Symbol: "MAD",
Precision: 2,
Type: Banknote},
512: &Security{
SecurityId: 512,
Name: "OMR",
Description: "Rial Omani",
Symbol: "OMR",
Precision: 3,
Type: Banknote},
516: &Security{
SecurityId: 516,
Name: "NAD",
Description: "Namibia Dollar",
Symbol: "NAD",
Precision: 2,
Type: Banknote},
524: &Security{
SecurityId: 524,
Name: "NPR",
Description: "Nepalese Rupee",
Symbol: "NPR",
Precision: 2,
Type: Banknote},
532: &Security{
SecurityId: 532,
Name: "ANG",
Description: "Netherlands Antillean Guilder",
Symbol: "ANG",
Precision: 2,
Type: Banknote},
533: &Security{
SecurityId: 533,
Name: "AWG",
Description: "Aruban Florin",
Symbol: "AWG",
Precision: 2,
Type: Banknote},
548: &Security{
SecurityId: 548,
Name: "VUV",
Description: "Vatu",
Symbol: "VUV",
Precision: 0,
Type: Banknote},
554: &Security{
SecurityId: 554,
Name: "NZD",
Description: "New Zealand Dollar",
Symbol: "NZD",
Precision: 2,
Type: Banknote},
558: &Security{
SecurityId: 558,
Name: "NIO",
Description: "Cordoba Oro",
Symbol: "NIO",
Precision: 2,
Type: Banknote},
566: &Security{
SecurityId: 566,
Name: "NGN",
Description: "Naira",
Symbol: "NGN",
Precision: 2,
Type: Banknote},
578: &Security{
SecurityId: 578,
Name: "NOK",
Description: "Norwegian Krone",
Symbol: "NOK",
Precision: 2,
Type: Banknote},
586: &Security{
SecurityId: 586,
Name: "PKR",
Description: "Pakistan Rupee",
Symbol: "PKR",
Precision: 2,
Type: Banknote},
590: &Security{
SecurityId: 590,
Name: "PAB",
Description: "Balboa",
Symbol: "PAB",
Precision: 2,
Type: Banknote},
598: &Security{
SecurityId: 598,
Name: "PGK",
Description: "Kina",
Symbol: "PGK",
Precision: 2,
Type: Banknote},
600: &Security{
SecurityId: 600,
Name: "PYG",
Description: "Guarani",
Symbol: "PYG",
Precision: 0,
Type: Banknote},
604: &Security{
SecurityId: 604,
Name: "PEN",
Description: "Nuevo Sol",
Symbol: "PEN",
Precision: 2,
Type: Banknote},
608: &Security{
SecurityId: 608,
Name: "PHP",
Description: "Philippine Peso",
Symbol: "PHP",
Precision: 2,
Type: Banknote},
634: &Security{
SecurityId: 634,
Name: "QAR",
Description: "Qatari Rial",
Symbol: "QAR",
Precision: 2,
Type: Banknote},
643: &Security{
SecurityId: 643,
Name: "RUB",
Description: "Russian Ruble",
Symbol: "RUB",
Precision: 2,
Type: Banknote},
646: &Security{
SecurityId: 646,
Name: "RWF",
Description: "Rwanda Franc",
Symbol: "RWF",
Precision: 0,
Type: Banknote},
654: &Security{
SecurityId: 654,
Name: "SHP",
Description: "Saint Helena Pound",
Symbol: "SHP",
Precision: 2,
Type: Banknote},
678: &Security{
SecurityId: 678,
Name: "STD",
Description: "Dobra",
Symbol: "STD",
Precision: 2,
Type: Banknote},
682: &Security{
SecurityId: 682,
Name: "SAR",
Description: "Saudi Riyal",
Symbol: "SAR",
Precision: 2,
Type: Banknote},
690: &Security{
SecurityId: 690,
Name: "SCR",
Description: "Seychelles Rupee",
Symbol: "SCR",
Precision: 2,
Type: Banknote},
694: &Security{
SecurityId: 694,
Name: "SLL",
Description: "Leone",
Symbol: "SLL",
Precision: 2,
Type: Banknote},
702: &Security{
SecurityId: 702,
Name: "SGD",
Description: "Singapore Dollar",
Symbol: "SGD",
Precision: 2,
Type: Banknote},
704: &Security{
SecurityId: 704,
Name: "VND",
Description: "Dong",
Symbol: "VND",
Precision: 0,
Type: Banknote},
706: &Security{
SecurityId: 706,
Name: "SOS",
Description: "Somali Shilling",
Symbol: "SOS",
Precision: 2,
Type: Banknote},
710: &Security{
SecurityId: 710,
Name: "ZAR",
Description: "Rand",
Symbol: "ZAR",
Precision: 2,
Type: Banknote},
728: &Security{
SecurityId: 728,
Name: "SSP",
Description: "South Sudanese Pound",
Symbol: "SSP",
Precision: 2,
Type: Banknote},
748: &Security{
SecurityId: 748,
Name: "SZL",
Description: "Lilangeni",
Symbol: "SZL",
Precision: 2,
Type: Banknote},
752: &Security{
SecurityId: 752,
Name: "SEK",
Description: "Swedish Krona",
Symbol: "SEK",
Precision: 2,
Type: Banknote},
756: &Security{
SecurityId: 756,
Name: "CHF",
Description: "Swiss Franc",
Symbol: "CHF",
Precision: 2,
Type: Banknote},
760: &Security{
SecurityId: 760,
Name: "SYP",
Description: "Syrian Pound",
Symbol: "SYP",
Precision: 2,
Type: Banknote},
764: &Security{
SecurityId: 764,
Name: "THB",
Description: "Baht",
Symbol: "THB",
Precision: 2,
Type: Banknote},
776: &Security{
SecurityId: 776,
Name: "TOP",
Description: "Paanga",
Symbol: "TOP",
Precision: 2,
Type: Banknote},
780: &Security{
SecurityId: 780,
Name: "TTD",
Description: "Trinidad and Tobago Dollar",
Symbol: "TTD",
Precision: 2,
Type: Banknote},
784: &Security{
SecurityId: 784,
Name: "AED",
Description: "UAE Dirham",
Symbol: "AED",
Precision: 2,
Type: Banknote},
788: &Security{
SecurityId: 788,
Name: "TND",
Description: "Tunisian Dinar",
Symbol: "TND",
Precision: 3,
Type: Banknote},
800: &Security{
SecurityId: 800,
Name: "UGX",
Description: "Uganda Shilling",
Symbol: "UGX",
Precision: 0,
Type: Banknote},
807: &Security{
SecurityId: 807,
Name: "MKD",
Description: "Denar",
Symbol: "MKD",
Precision: 2,
Type: Banknote},
818: &Security{
SecurityId: 818,
Name: "EGP",
Description: "Egyptian Pound",
Symbol: "EGP",
Precision: 2,
Type: Banknote},
826: &Security{
SecurityId: 826,
Name: "GBP",
Description: "Pound Sterling",
Symbol: "GBP",
Precision: 2,
Type: Banknote},
834: &Security{
SecurityId: 834,
Name: "TZS",
Description: "Tanzanian Shilling",
Symbol: "TZS",
Precision: 2,
Type: Banknote},
840: &Security{
SecurityId: 840,
Name: "USD",
Description: "US Dollar",
Symbol: "USD",
Precision: 2,
Type: Banknote},
858: &Security{
SecurityId: 858,
Name: "UYU",
Description: "Peso Uruguayo",
Symbol: "UYU",
Precision: 2,
Type: Banknote},
860: &Security{
SecurityId: 860,
Name: "UZS",
Description: "Uzbekistan Sum",
Symbol: "UZS",
Precision: 2,
Type: Banknote},
882: &Security{
SecurityId: 882,
Name: "WST",
Description: "Tala",
Symbol: "WST",
Precision: 2,
Type: Banknote},
886: &Security{
SecurityId: 886,
Name: "YER",
Description: "Yemeni Rial",
Symbol: "YER",
Precision: 2,
Type: Banknote},
901: &Security{
SecurityId: 901,
Name: "TWD",
Description: "New Taiwan Dollar",
Symbol: "TWD",
Precision: 2,
Type: Banknote},
931: &Security{
SecurityId: 931,
Name: "CUC",
Description: "Peso Convertible",
Symbol: "CUC",
Precision: 2,
Type: Banknote},
932: &Security{
SecurityId: 932,
Name: "ZWL",
Description: "Zimbabwe Dollar",
Symbol: "ZWL",
Precision: 2,
Type: Banknote},
934: &Security{
SecurityId: 934,
Name: "TMT",
Description: "Turkmenistan New Manat",
Symbol: "TMT",
Precision: 2,
Type: Banknote},
936: &Security{
SecurityId: 936,
Name: "GHS",
Description: "Ghana Cedi",
Symbol: "GHS",
Precision: 2,
Type: Banknote},
937: &Security{
SecurityId: 937,
Name: "VEF",
Description: "Bolivar",
Symbol: "VEF",
Precision: 2,
Type: Banknote},
938: &Security{
SecurityId: 938,
Name: "SDG",
Description: "Sudanese Pound",
Symbol: "SDG",
Precision: 2,
Type: Banknote},
940: &Security{
SecurityId: 940,
Name: "UYI",
Description: "Uruguay Peso en Unidades Indexadas (URUIURUI)",
Symbol: "UYI",
Precision: 0,
Type: Banknote},
941: &Security{
SecurityId: 941,
Name: "RSD",
Description: "Serbian Dinar",
Symbol: "RSD",
Precision: 2,
Type: Banknote},
943: &Security{
SecurityId: 943,
Name: "MZN",
Description: "Mozambique Metical",
Symbol: "MZN",
Precision: 2,
Type: Banknote},
944: &Security{
SecurityId: 944,
Name: "AZN",
Description: "Azerbaijanian Manat",
Symbol: "AZN",
Precision: 2,
Type: Banknote},
946: &Security{
SecurityId: 946,
Name: "RON",
Description: "Romanian Leu",
Symbol: "RON",
Precision: 2,
Type: Banknote},
947: &Security{
SecurityId: 947,
Name: "CHE",
Description: "WIR Euro",
Symbol: "CHE",
Precision: 2,
Type: Banknote},
948: &Security{
SecurityId: 948,
Name: "CHW",
Description: "WIR Franc",
Symbol: "CHW",
Precision: 2,
Type: Banknote},
949: &Security{
SecurityId: 949,
Name: "TRY",
Description: "Turkish Lira",
Symbol: "TRY",
Precision: 2,
Type: Banknote},
950: &Security{
SecurityId: 950,
Name: "XAF",
Description: "CFA Franc BEAC",
Symbol: "XAF",
Precision: 0,
Type: Banknote},
951: &Security{
SecurityId: 951,
Name: "XCD",
Description: "East Caribbean Dollar",
Symbol: "XCD",
Precision: 2,
Type: Banknote},
952: &Security{
SecurityId: 952,
Name: "XOF",
Description: "CFA Franc BCEAO",
Symbol: "XOF",
Precision: 0,
Type: Banknote},
953: &Security{
SecurityId: 953,
Name: "XPF",
Description: "CFP Franc",
Symbol: "XPF",
Precision: 0,
Type: Banknote},
955: &Security{
SecurityId: 955,
Name: "XBA",
Description: "Bond Markets Unit European Composite Unit (EURCO)",
Symbol: "XBA",
Precision: 0,
Type: Banknote},
956: &Security{
SecurityId: 956,
Name: "XBB",
Description: "Bond Markets Unit European Monetary Unit (E.M.U.-6)",
Symbol: "XBB",
Precision: 0,
Type: Banknote},
957: &Security{
SecurityId: 957,
Name: "XBC",
Description: "Bond Markets Unit European Unit of Account 9 (E.U.A.-9)",
Symbol: "XBC",
Precision: 0,
Type: Banknote},
958: &Security{
SecurityId: 958,
Name: "XBD",
Description: "Bond Markets Unit European Unit of Account 17 (E.U.A.-17)",
Symbol: "XBD",
Precision: 0,
Type: Banknote},
959: &Security{
SecurityId: 959,
Name: "XAU",
Description: "Gold",
Symbol: "XAU",
Precision: 0,
Type: Banknote},
960: &Security{
SecurityId: 960,
Name: "XDR",
Description: "SDR (Special Drawing Right)",
Symbol: "XDR",
Precision: 0,
Type: Banknote},
961: &Security{
SecurityId: 961,
Name: "XAG",
Description: "Silver",
Symbol: "XAG",
Precision: 0,
Type: Banknote},
962: &Security{
SecurityId: 962,
Name: "XPT",
Description: "Platinum",
Symbol: "XPT",
Precision: 0,
Type: Banknote},
963: &Security{
SecurityId: 963,
Name: "XTS",
Description: "Codes specifically reserved for testing purposes",
Symbol: "XTS",
Precision: 0,
Type: Banknote},
964: &Security{
SecurityId: 964,
Name: "XPD",
Description: "Palladium",
Symbol: "XPD",
Precision: 0,
Type: Banknote},
965: &Security{
SecurityId: 965,
Name: "XUA",
Description: "ADB Unit of Account",
Symbol: "XUA",
Precision: 0,
Type: Banknote},
967: &Security{
SecurityId: 967,
Name: "ZMW",
Description: "Zambian Kwacha",
Symbol: "ZMW",
Precision: 2,
Type: Banknote},
968: &Security{
SecurityId: 968,
Name: "SRD",
Description: "Surinam Dollar",
Symbol: "SRD",
Precision: 2,
Type: Banknote},
969: &Security{
SecurityId: 969,
Name: "MGA",
Description: "Malagasy Ariary",
Symbol: "MGA",
Precision: 2,
Type: Banknote},
970: &Security{
SecurityId: 970,
Name: "COU",
Description: "Unidad de Valor Real",
Symbol: "COU",
Precision: 2,
Type: Banknote},
971: &Security{
SecurityId: 971,
Name: "AFN",
Description: "Afghani",
Symbol: "AFN",
Precision: 2,
Type: Banknote},
972: &Security{
SecurityId: 972,
Name: "TJS",
Description: "Somoni",
Symbol: "TJS",
Precision: 2,
Type: Banknote},
973: &Security{
SecurityId: 973,
Name: "AOA",
Description: "Kwanza",
Symbol: "AOA",
Precision: 2,
Type: Banknote},
974: &Security{
SecurityId: 974,
Name: "BYR",
Description: "Belarussian Ruble",
Symbol: "BYR",
Precision: 0,
Type: Banknote},
975: &Security{
SecurityId: 975,
Name: "BGN",
Description: "Bulgarian Lev",
Symbol: "BGN",
Precision: 2,
Type: Banknote},
976: &Security{
SecurityId: 976,
Name: "CDF",
Description: "Congolese Franc",
Symbol: "CDF",
Precision: 2,
Type: Banknote},
977: &Security{
SecurityId: 977,
Name: "BAM",
Description: "Convertible Mark",
Symbol: "BAM",
Precision: 2,
Type: Banknote},
978: &Security{
SecurityId: 978,
Name: "EUR",
Description: "Euro",
Symbol: "EUR",
Precision: 2,
Type: Banknote},
979: &Security{
SecurityId: 979,
Name: "MXV",
Description: "Mexican Unidad de Inversion (UDI)",
Symbol: "MXV",
Precision: 2,
Type: Banknote},
980: &Security{
SecurityId: 980,
Name: "UAH",
Description: "Hryvnia",
Symbol: "UAH",
Precision: 2,
Type: Banknote},
981: &Security{
SecurityId: 981,
Name: "GEL",
Description: "Lari",
Symbol: "GEL",
Precision: 2,
Type: Banknote},
984: &Security{
SecurityId: 984,
Name: "BOV",
Description: "Mvdol",
Symbol: "BOV",
Precision: 2,
Type: Banknote},
985: &Security{
SecurityId: 985,
Name: "PLN",
Description: "Zloty",
Symbol: "PLN",
Precision: 2,
Type: Banknote},
986: &Security{
SecurityId: 986,
Name: "BRL",
Description: "Brazilian Real",
Symbol: "BRL",
Precision: 2,
Type: Banknote},
990: &Security{
SecurityId: 990,
Name: "CLF",
Description: "Unidad de Fomento",
Symbol: "CLF",
Precision: 4,
Type: Banknote},
994: &Security{
SecurityId: 994,
Name: "XSU",
Description: "Sucre",
Symbol: "XSU",
Precision: 0,
Type: Banknote},
997: &Security{
SecurityId: 997,
Name: "USN",
Description: "US Dollar (Next day)",
Symbol: "USN",
Precision: 2,
Type: Banknote},
999: &Security{
SecurityId: 999,
Name: "XXX",
Description: "The codes assigned for transactions where no currency is involved",
Symbol: "XXX",
Precision: 0,
Type: Banknote},
// Securities
1000: &Security{
SecurityId: 1000,
Name: "SPY",
Description: "S&P 500 ETF Fund",
Symbol: "SPY",
Precision: 5,
Type: Stock},
}
var security_list []*Security
func init() {
for _, value := range security_map {
security_list = append(security_list, value)
}
}
func GetSecurity(securityid int64) *Security {
s := security_map[securityid]
if s != nil {
return s
}
return nil
}
func GetSecurityByName(name string) (*Security, error) {
for _, value := range security_map {
if value.Name == name {
return value, nil
}
}
return nil, errors.New("Invalid Security Name")
}
func GetSecurities() []*Security {
return security_list
}
func (s *Security) Write(w http.ResponseWriter) error {
enc := json.NewEncoder(w)
return enc.Encode(s)
}
func (sl *SecurityList) Write(w http.ResponseWriter) error {
enc := json.NewEncoder(w)
return enc.Encode(sl)
}
func SecurityHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
securityid, err := GetURLID(r.URL.Path)
if err == nil {
security := GetSecurity(securityid)
if security == nil {
WriteError(w, 3 /*Invalid Request*/)
return
}
err := security.Write(w)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
} else {
var sl SecurityList
securities := GetSecurities()
sl.Securities = &securities
err := (&sl).Write(w)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
}
} else {
WriteError(w, 3 /*Invalid Request*/)
}
}