xeroizer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/.bundle/config +2 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +22 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.md +416 -0
  6. data/Rakefile +39 -0
  7. data/VERSION +1 -0
  8. data/lib/.DS_Store +0 -0
  9. data/lib/big_decimal_to_s.rb +9 -0
  10. data/lib/class_level_inheritable_attributes.rb +25 -0
  11. data/lib/nokogiri_utils.rb +58 -0
  12. data/lib/xeroizer.rb +55 -0
  13. data/lib/xeroizer/ca-certificates.crt +2642 -0
  14. data/lib/xeroizer/exceptions.rb +94 -0
  15. data/lib/xeroizer/generic_application.rb +40 -0
  16. data/lib/xeroizer/http.rb +148 -0
  17. data/lib/xeroizer/http_encoding_helper.rb +49 -0
  18. data/lib/xeroizer/models/account.rb +60 -0
  19. data/lib/xeroizer/models/address.rb +31 -0
  20. data/lib/xeroizer/models/branding_theme.rb +22 -0
  21. data/lib/xeroizer/models/contact.rb +46 -0
  22. data/lib/xeroizer/models/credit_note.rb +113 -0
  23. data/lib/xeroizer/models/currency.rb +18 -0
  24. data/lib/xeroizer/models/invoice.rb +138 -0
  25. data/lib/xeroizer/models/item.rb +27 -0
  26. data/lib/xeroizer/models/item_purchase_sale_details.rb +17 -0
  27. data/lib/xeroizer/models/journal.rb +25 -0
  28. data/lib/xeroizer/models/journal_line.rb +28 -0
  29. data/lib/xeroizer/models/line_item.rb +43 -0
  30. data/lib/xeroizer/models/manual_journal.rb +42 -0
  31. data/lib/xeroizer/models/manual_journal_line.rb +24 -0
  32. data/lib/xeroizer/models/option.rb +15 -0
  33. data/lib/xeroizer/models/organisation.rb +23 -0
  34. data/lib/xeroizer/models/payment.rb +30 -0
  35. data/lib/xeroizer/models/phone.rb +25 -0
  36. data/lib/xeroizer/models/tax_rate.rb +25 -0
  37. data/lib/xeroizer/models/tracking_category.rb +23 -0
  38. data/lib/xeroizer/models/tracking_category_child.rb +17 -0
  39. data/lib/xeroizer/oauth.rb +130 -0
  40. data/lib/xeroizer/partner_application.rb +44 -0
  41. data/lib/xeroizer/private_application.rb +27 -0
  42. data/lib/xeroizer/public_application.rb +21 -0
  43. data/lib/xeroizer/record/application_helper.rb +22 -0
  44. data/lib/xeroizer/record/base.rb +116 -0
  45. data/lib/xeroizer/record/base_model.rb +138 -0
  46. data/lib/xeroizer/record/base_model_http_proxy.rb +134 -0
  47. data/lib/xeroizer/record/model_definition_helper.rb +94 -0
  48. data/lib/xeroizer/record/record_association_helper.rb +94 -0
  49. data/lib/xeroizer/record/validation_helper.rb +59 -0
  50. data/lib/xeroizer/record/validators/associated_validator.rb +33 -0
  51. data/lib/xeroizer/record/validators/inclusion_of_validator.rb +22 -0
  52. data/lib/xeroizer/record/validators/presence_of_validator.rb +19 -0
  53. data/lib/xeroizer/record/validators/validator.rb +24 -0
  54. data/lib/xeroizer/record/xml_helper.rb +113 -0
  55. data/lib/xeroizer/response.rb +17 -0
  56. data/test/stub_responses/accounts.xml +589 -0
  57. data/test/stub_responses/api_exception.xml +153 -0
  58. data/test/stub_responses/bogus_oauth_error +1 -0
  59. data/test/stub_responses/branding_themes.xml +20 -0
  60. data/test/stub_responses/contact.xml +40 -0
  61. data/test/stub_responses/contacts.xml +3349 -0
  62. data/test/stub_responses/create_credit_note.xml +104 -0
  63. data/test/stub_responses/create_invoice.xml +64 -0
  64. data/test/stub_responses/credit_note.xml +69 -0
  65. data/test/stub_responses/credit_note_not_found_error.xml +1 -0
  66. data/test/stub_responses/credit_notes.xml +149 -0
  67. data/test/stub_responses/currencies.xml +12 -0
  68. data/test/stub_responses/invalid_api_key_error.xml +1 -0
  69. data/test/stub_responses/invalid_consumer_key +1 -0
  70. data/test/stub_responses/invalid_request_token +1 -0
  71. data/test/stub_responses/invoice.xml +91 -0
  72. data/test/stub_responses/invoice_not_found_error.xml +1 -0
  73. data/test/stub_responses/invoices.xml +1728 -0
  74. data/test/stub_responses/items.xml +112 -0
  75. data/test/stub_responses/manual_journal.xml +45 -0
  76. data/test/stub_responses/manual_journals.xml +40 -0
  77. data/test/stub_responses/organisation.xml +16 -0
  78. data/test/stub_responses/organisations.xml +16 -0
  79. data/test/stub_responses/rate_limit_exceeded +1 -0
  80. data/test/stub_responses/records/contact-043892a1-aef1-4c18-88d8-b8ccb6d31466.xml +38 -0
  81. data/test/stub_responses/records/contact-09664078-efe2-4a88-89a5-67eac9b0047b.xml +40 -0
  82. data/test/stub_responses/records/contact-0a4cf37b-a1a8-4753-9ee2-f9207f63a8ff.xml +48 -0
  83. data/test/stub_responses/records/contact-0e74f929-11b9-4255-a035-1fdfe573e676.xml +40 -0
  84. data/test/stub_responses/records/contact-0f471ca5-15c9-405e-a1b9-7cc35194b673.xml +38 -0
  85. data/test/stub_responses/records/contact-13cd4c47-baa6-4f07-93f6-6442310df4bf.xml +47 -0
  86. data/test/stub_responses/records/contact-158a2667-82ee-43bf-8f33-a6cc9524092d.xml +38 -0
  87. data/test/stub_responses/records/contact-17465072-6fa3-40bf-bc42-97765d9e1bea.xml +38 -0
  88. data/test/stub_responses/records/contact-1975b0ed-b7ba-4c61-bae8-2aa6d78b0dee.xml +39 -0
  89. data/test/stub_responses/records/contact-1b2be6e9-8d58-4da9-aaf8-4fe5471b653c.xml +53 -0
  90. data/test/stub_responses/records/contact-1c40da58-fe1d-4e97-b729-b2abdae94d9e.xml +38 -0
  91. data/test/stub_responses/records/contact-258176a5-c622-4394-9c94-6f88c3ea12e5.xml +40 -0
  92. data/test/stub_responses/records/contact-299dd3a0-a417-4a37-8a04-2f55e91963e5.xml +40 -0
  93. data/test/stub_responses/records/contact-2be39278-5154-4ed1-8eb0-676f25acfc66.xml +40 -0
  94. data/test/stub_responses/records/contact-2e58cff6-488c-4a32-884b-baf848010229.xml +40 -0
  95. data/test/stub_responses/records/contact-2faccd41-935e-40aa-b74e-e2fc28ac34c3.xml +38 -0
  96. data/test/stub_responses/records/contact-31af01e7-2ca7-45b9-a500-b02db996568e.xml +38 -0
  97. data/test/stub_responses/records/contact-344f1113-a25b-4344-b82e-bedeacc17c8e.xml +40 -0
  98. data/test/stub_responses/records/contact-3e776c4b-ea9e-4bb1-96be-6b0c7a71a37f.xml +39 -0
  99. data/test/stub_responses/records/contact-3fc1fc6c-e5ff-4e40-b6f3-7eb535637d87.xml +38 -0
  100. data/test/stub_responses/records/contact-416ab20c-5357-4beb-a740-e8d175d71efb.xml +38 -0
  101. data/test/stub_responses/records/contact-41a42865-f15a-4fa1-b643-47877608f557.xml +54 -0
  102. data/test/stub_responses/records/contact-42771b60-19a7-4692-af81-dd9f9b9362d4.xml +43 -0
  103. data/test/stub_responses/records/contact-451ceb28-9610-44c9-8f35-3225482f2413.xml +40 -0
  104. data/test/stub_responses/records/contact-4ab343ad-1ebb-4afe-9d48-1814a93c2081.xml +38 -0
  105. data/test/stub_responses/records/contact-4bb77692-42d4-4565-85a0-8849eb85e039.xml +39 -0
  106. data/test/stub_responses/records/contact-4dec292f-3ab7-46a8-83e4-5fb5eac42c7f.xml +40 -0
  107. data/test/stub_responses/records/contact-4e2f192e-8397-4d4d-97ca-a4fc5ac531bf.xml +38 -0
  108. data/test/stub_responses/records/contact-5188c17c-7786-4436-ad6e-9da2997386d0.xml +40 -0
  109. data/test/stub_responses/records/contact-52442753-b1c4-40b7-9b79-c33997de5837.xml +40 -0
  110. data/test/stub_responses/records/contact-565acaa9-e7f3-4fbf-80c3-16b081ddae10.xml +38 -0
  111. data/test/stub_responses/records/contact-571a2414-81ff-4f8f-8498-d91d83793131.xml +44 -0
  112. data/test/stub_responses/records/contact-58697449-85ef-46ae-83fc-6a9446f037fb.xml +40 -0
  113. data/test/stub_responses/records/contact-58bf2ae3-5144-4628-8de2-e165ac2bcdc6.xml +40 -0
  114. data/test/stub_responses/records/contact-5d41dafd-eb7e-42c1-bd5a-ba3be1da0960.xml +38 -0
  115. data/test/stub_responses/records/contact-5f005a09-5ce4-4fb4-8096-e69c18be636e.xml +38 -0
  116. data/test/stub_responses/records/contact-60d578d9-3e10-4aef-b5dc-9d9fd60a3633.xml +47 -0
  117. data/test/stub_responses/records/contact-62392126-dba4-4a75-b907-5875ebf75259.xml +40 -0
  118. data/test/stub_responses/records/contact-642c7fb5-e8e5-48e1-a710-39a18c6c3217.xml +40 -0
  119. data/test/stub_responses/records/contact-64aebf9c-bb89-4b38-b99b-405bd1ece6fd.xml +40 -0
  120. data/test/stub_responses/records/contact-64eedbc9-1fa0-485a-837f-705f23188161.xml +38 -0
  121. data/test/stub_responses/records/contact-65e96c9f-1595-4653-9a8a-2a36d49223c2.xml +40 -0
  122. data/test/stub_responses/records/contact-67d26b93-ccb4-4890-9bf1-284b70ea755d.xml +38 -0
  123. data/test/stub_responses/records/contact-69d3e538-44b3-4e00-a5f6-7dddcb6e0656.xml +40 -0
  124. data/test/stub_responses/records/contact-6a8450bc-f81a-4bb0-a8f6-aa4afe9497c7.xml +40 -0
  125. data/test/stub_responses/records/contact-6c70e424-41d6-4b9b-af3e-b3a9f3589106.xml +40 -0
  126. data/test/stub_responses/records/contact-6de0b0cf-560c-4503-aab3-e1543c329deb.xml +54 -0
  127. data/test/stub_responses/records/contact-72dd6a02-396e-42a2-a4d6-cc3fa75dfece.xml +41 -0
  128. data/test/stub_responses/records/contact-755f1475-d255-43a8-bedc-5ea7fd26c71f.xml +51 -0
  129. data/test/stub_responses/records/contact-78a9d0a0-3d8c-4f84-af3e-f260bf4a9dc0.xml +38 -0
  130. data/test/stub_responses/records/contact-79aa39ca-22b0-42c2-9026-78757a29d665.xml +42 -0
  131. data/test/stub_responses/records/contact-804f4140-5978-48fe-ba20-b56e5b834b18.xml +40 -0
  132. data/test/stub_responses/records/contact-812d4f28-1681-4241-8e34-d15c5520ba35.xml +38 -0
  133. data/test/stub_responses/records/contact-860b99a9-0958-4c8d-a98f-bb1f092b16bb.xml +60 -0
  134. data/test/stub_responses/records/contact-87c8da45-97cc-46be-b170-398da0eacfb8.xml +40 -0
  135. data/test/stub_responses/records/contact-8a154a19-6c6c-404b-bbc9-6deae2d18251.xml +38 -0
  136. data/test/stub_responses/records/contact-8bb6931d-2865-44e9-9a23-ed1fb9c7a46c.xml +40 -0
  137. data/test/stub_responses/records/contact-936c9759-01da-4063-b472-424ab9f48212.xml +38 -0
  138. data/test/stub_responses/records/contact-9d12a994-9640-4b75-95cc-3de1e9d0ef09.xml +38 -0
  139. data/test/stub_responses/records/contact-9fe59245-1fbb-4157-93c3-dc97388f3746.xml +40 -0
  140. data/test/stub_responses/records/contact-a06a7225-6f8a-4522-8400-c534dd43a16e.xml +40 -0
  141. data/test/stub_responses/records/contact-a76a85fe-73a2-46fa-aba7-791f36103cdb.xml +40 -0
  142. data/test/stub_responses/records/contact-a93b5f40-0346-4d21-9181-431e129911c0.xml +40 -0
  143. data/test/stub_responses/records/contact-abf272dd-6b1d-4829-af88-c57bf55855e3.xml +38 -0
  144. data/test/stub_responses/records/contact-ad24c33b-256b-4157-ad56-cbcf0e8db7b1.xml +47 -0
  145. data/test/stub_responses/records/contact-b107129d-f4c9-438e-9573-64b778527f4a.xml +40 -0
  146. data/test/stub_responses/records/contact-b233288a-aa26-4b26-9fc7-779d797dd56f.xml +40 -0
  147. data/test/stub_responses/records/contact-b2b5333a-2546-4975-891f-d71a8a640d23.xml +38 -0
  148. data/test/stub_responses/records/contact-b4d149bf-1823-4bd2-96da-9032388c9686.xml +40 -0
  149. data/test/stub_responses/records/contact-b78d4fd1-4306-4d83-a0b9-61458d1c53a2.xml +40 -0
  150. data/test/stub_responses/records/contact-b7d108a8-d5f7-4f16-a7c9-26eaed98e8de.xml +40 -0
  151. data/test/stub_responses/records/contact-baeed0f3-7989-4874-99b3-59f23032cb73.xml +38 -0
  152. data/test/stub_responses/records/contact-bc51a3a1-b7f6-46ca-ac9e-19b87e6ca100.xml +40 -0
  153. data/test/stub_responses/records/contact-be9f3aab-52f5-4d9c-94b4-87f7d9e5ee8b.xml +38 -0
  154. data/test/stub_responses/records/contact-c135f994-01e4-427b-9e15-acfe8a477c16.xml +49 -0
  155. data/test/stub_responses/records/contact-c14edf75-15e4-4a9c-86e4-f52e2fe7cfa4.xml +40 -0
  156. data/test/stub_responses/records/contact-ca9b9abc-c2dc-4221-8101-31f464d314cc.xml +44 -0
  157. data/test/stub_responses/records/contact-cc4db604-9ed8-4eef-8a29-51b5b70496a0.xml +38 -0
  158. data/test/stub_responses/records/contact-cce9b044-be4a-43b3-9dc7-c027d8dd35b2.xml +38 -0
  159. data/test/stub_responses/records/contact-d0cd2c4f-18a0-4f7c-a32a-2db00f29d298.xml +43 -0
  160. data/test/stub_responses/records/contact-d6851dc2-9ed9-4515-bc0b-810b09c06a6a.xml +38 -0
  161. data/test/stub_responses/records/contact-d6a384fb-f46f-41a3-8ac7-b7bc9e0b5efa.xml +46 -0
  162. data/test/stub_responses/records/contact-d74e61cf-2ad0-4f0d-b9d1-6a808e3f70cf.xml +40 -0
  163. data/test/stub_responses/records/contact-d9ab0f61-3b56-4e2b-be39-f33c11bd99e3.xml +40 -0
  164. data/test/stub_responses/records/contact-dbb1f0b5-a71b-4458-8462-104acd0fec6b.xml +38 -0
  165. data/test/stub_responses/records/contact-dd981bd6-40dd-496d-a282-bf7d3391b8b9.xml +40 -0
  166. data/test/stub_responses/records/contact-e1826204-cc0a-42a5-a6d0-4b352d9d5953.xml +40 -0
  167. data/test/stub_responses/records/contact-e2d955db-f366-42dd-87f7-fbdb4da2306f.xml +40 -0
  168. data/test/stub_responses/records/contact-e32e2130-3d27-443a-8313-48fffa03cf53.xml +40 -0
  169. data/test/stub_responses/records/contact-e3a68332-d322-4816-8678-73a537c8cd33.xml +38 -0
  170. data/test/stub_responses/records/contact-e6ac76a3-ca32-4fa1-8ef9-6a4bf8b0ec2a.xml +40 -0
  171. data/test/stub_responses/records/contact-e6ca965d-7c48-480e-be39-e847307f474a.xml +38 -0
  172. data/test/stub_responses/records/contact-e77d1f20-2e8e-46ec-9a10-50335a216724.xml +40 -0
  173. data/test/stub_responses/records/contact-e8b98c13-a424-41d2-ba0e-7b7621411e7a.xml +38 -0
  174. data/test/stub_responses/records/contact-e8e9a2c2-3e7e-48ed-8528-c3d61b28f276.xml +39 -0
  175. data/test/stub_responses/records/contact-eb43fcc6-87ec-4a0a-b243-d718bee4e2cb.xml +38 -0
  176. data/test/stub_responses/records/contact-ef6f54c1-eb45-4956-b8cd-1be82ad665f2.xml +43 -0
  177. data/test/stub_responses/records/contact-efdb3600-f233-42e2-8f18-ce7e2a95e4b1.xml +38 -0
  178. data/test/stub_responses/records/contact-f7eca431-5c97-4d24-93fd-004bb8a6c644.xml +40 -0
  179. data/test/stub_responses/records/contact-fb078879-5d6d-474f-825f-61dc90689349.xml +38 -0
  180. data/test/stub_responses/records/contact-fc39b273-4aa2-4785-99ca-24672f6c0000.xml +38 -0
  181. data/test/stub_responses/records/contact-fc9ec3a6-a2fe-4300-a8cb-ca8a0b3662e0.xml +40 -0
  182. data/test/stub_responses/records/contact-fdf96102-7491-44b6-bf4d-7a77ff25f890.xml +40 -0
  183. data/test/stub_responses/records/contact-fe61ead1-8afc-4f0b-beda-066620227aad.xml +38 -0
  184. data/test/stub_responses/records/credit_note-371cd138-1e5c-4ec1-a8c6-a1c10e8bdab1.xml +69 -0
  185. data/test/stub_responses/records/credit_note-3bffc09b-79f2-490d-b91b-c59b700b43a4.xml +91 -0
  186. data/test/stub_responses/records/credit_note-43c678ee-f357-48e2-b192-b6e3634762f9.xml +90 -0
  187. data/test/stub_responses/records/credit_note-482c018b-d329-4e05-9b4f-7a4cfc695aa0.xml +73 -0
  188. data/test/stub_responses/records/credit_note-4f67130a-749a-4ee6-98b2-743adbc11245.xml +60 -0
  189. data/test/stub_responses/records/credit_note-50e98404-2fba-4031-af67-8ba4bb227c44.xml +74 -0
  190. data/test/stub_responses/records/credit_note-7df8949c-b71f-40c0-bbcf-39f2f450f286.xml +73 -0
  191. data/test/stub_responses/records/credit_note-b356e488-2678-4be4-ad4b-d294df2d48d6.xml +76 -0
  192. data/test/stub_responses/records/invoice-0032f627-3156-4d30-9b1c-4d3b994dc921.xml +82 -0
  193. data/test/stub_responses/records/invoice-00c9511b-24b9-4190-a90a-8abf2fe9f4a0.xml +74 -0
  194. data/test/stub_responses/records/invoice-024d7994-a26c-4c20-9894-13934840fc31.xml +73 -0
  195. data/test/stub_responses/records/invoice-0e64a623-c2a1-446a-93ed-eb897f118cbc.xml +96 -0
  196. data/test/stub_responses/records/invoice-15e88e57-2554-4496-a18e-eb3f5c622345.xml +73 -0
  197. data/test/stub_responses/records/invoice-166f0588-d0ba-458c-b28a-8edd4c8fc463.xml +73 -0
  198. data/test/stub_responses/records/invoice-1d1ba340-afa2-4f4c-8ff7-a147bda9a47b.xml +91 -0
  199. data/test/stub_responses/records/invoice-290ef4c4-baec-492b-b4dd-c102826470ae.xml +85 -0
  200. data/test/stub_responses/records/invoice-30a87092-31b5-4a2c-831e-327486533dd2.xml +77 -0
  201. data/test/stub_responses/records/invoice-30dbd181-72a8-43df-b392-4241bf43d5fc.xml +68 -0
  202. data/test/stub_responses/records/invoice-33e4123e-7cdd-4f05-9a0a-eb8adeb2b868.xml +92 -0
  203. data/test/stub_responses/records/invoice-387db692-26ac-47e6-b6cc-015343809bda.xml +73 -0
  204. data/test/stub_responses/records/invoice-3b28bf11-ed2f-4cf4-8e9e-fcae730cc292.xml +89 -0
  205. data/test/stub_responses/records/invoice-3fcb9847-b350-412e-ab90-7d9d774ad881.xml +89 -0
  206. data/test/stub_responses/records/invoice-4602eda6-abe9-448e-b65f-ae6bea21f0eb.xml +96 -0
  207. data/test/stub_responses/records/invoice-46441f63-873f-4cdc-a278-b8fe516f3abb.xml +91 -0
  208. data/test/stub_responses/records/invoice-4ad1ec01-f4a3-41d7-bbb4-d2ab2fec8e65.xml +73 -0
  209. data/test/stub_responses/records/invoice-4b9afceb-f7c7-4e64-8aac-7b009971fd52.xml +84 -0
  210. data/test/stub_responses/records/invoice-4edbf6d5-4e92-43af-bedd-7effc0b86833.xml +68 -0
  211. data/test/stub_responses/records/invoice-4fad1af2-b871-4ac5-a15a-3c5e32d2e2c4.xml +83 -0
  212. data/test/stub_responses/records/invoice-52ee4d67-cae4-462c-adb2-182c39017f3d.xml +81 -0
  213. data/test/stub_responses/records/invoice-54585f46-c1a0-4432-bd4f-c1fae2fba59b.xml +66 -0
  214. data/test/stub_responses/records/invoice-5613938b-9e27-472e-92ae-3b038b669d10.xml +85 -0
  215. data/test/stub_responses/records/invoice-5aa9451d-95d1-4f95-a966-bbab2573f71c.xml +73 -0
  216. data/test/stub_responses/records/invoice-5aadcd34-01a9-4b8d-a2bb-d7cc1de9fa45.xml +87 -0
  217. data/test/stub_responses/records/invoice-5f6deadf-36a2-495a-9980-ceb11e8af9a9.xml +83 -0
  218. data/test/stub_responses/records/invoice-625ffe1b-f5d8-438e-a376-981de5f5a733.xml +75 -0
  219. data/test/stub_responses/records/invoice-64cd559e-8e03-46af-b461-8555285cee71.xml +84 -0
  220. data/test/stub_responses/records/invoice-666f8dbb-bc9a-476c-8ec4-4665d7f83190.xml +63 -0
  221. data/test/stub_responses/records/invoice-66fbe37f-49b1-43fd-97ed-85114022cd2f.xml +77 -0
  222. data/test/stub_responses/records/invoice-673dd7cc-beb7-4697-83d4-0c47cb400cc2.xml +85 -0
  223. data/test/stub_responses/records/invoice-69fc971e-9b37-41c5-9c87-174330f22343.xml +65 -0
  224. data/test/stub_responses/records/invoice-70e6db69-e5a4-42c7-a397-aa3212c2945f.xml +73 -0
  225. data/test/stub_responses/records/invoice-766d1289-b440-4675-a656-1a0612ecac77.xml +74 -0
  226. data/test/stub_responses/records/invoice-76bcb361-f93b-4513-b312-5a4af306d276.xml +66 -0
  227. data/test/stub_responses/records/invoice-76e3f056-479f-417c-a72b-f3d767899b87.xml +89 -0
  228. data/test/stub_responses/records/invoice-77b338ef-ecc0-4b95-a0d7-2617b0054611.xml +103 -0
  229. data/test/stub_responses/records/invoice-7be9956d-5316-4f6b-a66a-d355b3f159b2.xml +82 -0
  230. data/test/stub_responses/records/invoice-7dae876a-b424-436b-a4e6-17b3fdeec80c.xml +82 -0
  231. data/test/stub_responses/records/invoice-7e862d93-8dab-4856-8b0c-d844e09d750f.xml +66 -0
  232. data/test/stub_responses/records/invoice-803f70b0-56d9-4157-9787-41df271777a0.xml +82 -0
  233. data/test/stub_responses/records/invoice-86102312-aa3f-438c-9938-6840f4d8dda6.xml +74 -0
  234. data/test/stub_responses/records/invoice-8694c9c5-7097-4449-a708-b8c1982921a4.xml +68 -0
  235. data/test/stub_responses/records/invoice-86d6e00f-ef56-49f7-9a54-796ccd5ca057.xml +83 -0
  236. data/test/stub_responses/records/invoice-88e77f0f-54a5-4efc-a979-7e22223cc4d7.xml +65 -0
  237. data/test/stub_responses/records/invoice-8b0ccb6a-d9b7-4da5-8360-ef7fb157b5aa.xml +65 -0
  238. data/test/stub_responses/records/invoice-935fc854-8037-4111-8d91-993010c331cc.xml +73 -0
  239. data/test/stub_responses/records/invoice-95ef3000-c764-4ba9-a66a-b6e2d161f839.xml +62 -0
  240. data/test/stub_responses/records/invoice-962ef33f-c9d2-4602-9b9f-93a02bea23b3.xml +90 -0
  241. data/test/stub_responses/records/invoice-9868b472-1983-48e9-8edf-7e81ddf2c03a.xml +83 -0
  242. data/test/stub_responses/records/invoice-9a448e9b-a9fa-4a8b-98f5-6dc892a37374.xml +62 -0
  243. data/test/stub_responses/records/invoice-a1d04a14-96a8-4067-a0ff-8136990a354f.xml +91 -0
  244. data/test/stub_responses/records/invoice-a3bc62ef-f11b-4a9c-a4f9-a342bda371b5.xml +65 -0
  245. data/test/stub_responses/records/invoice-a6894ca0-60ee-4d45-9dd4-b44fcba46ec5.xml +88 -0
  246. data/test/stub_responses/records/invoice-a9f765e6-b9bc-4505-a47b-fb3ecb327e7b.xml +85 -0
  247. data/test/stub_responses/records/invoice-aa0173af-8707-4e7f-8dde-4c7a357bd312.xml +92 -0
  248. data/test/stub_responses/records/invoice-ab63738a-370a-43a5-bfa3-620d684e66d0.xml +81 -0
  249. data/test/stub_responses/records/invoice-b0344791-5a8a-40dd-a208-d99a461a6c10.xml +82 -0
  250. data/test/stub_responses/records/invoice-b1e53910-473c-46a3-b3cb-38ece571220e.xml +66 -0
  251. data/test/stub_responses/records/invoice-b2c02d0b-41a8-4d4d-97d7-014c78b3547d.xml +91 -0
  252. data/test/stub_responses/records/invoice-b75b3928-ab72-4424-8b93-9cdbbde4cd72.xml +80 -0
  253. data/test/stub_responses/records/invoice-bcd8a71f-aa31-4d0f-8a01-13ea26363ddf.xml +92 -0
  254. data/test/stub_responses/records/invoice-bfbb7c45-de02-45e7-b065-d9863ecfb0d8.xml +65 -0
  255. data/test/stub_responses/records/invoice-c12aff7e-12bf-4185-8702-460929f19674.xml +76 -0
  256. data/test/stub_responses/records/invoice-c3380b96-976d-4b3e-8b26-8d01eb6a3742.xml +85 -0
  257. data/test/stub_responses/records/invoice-c963f2b0-cbe1-4abd-9ccc-7e512c942068.xml +66 -0
  258. data/test/stub_responses/records/invoice-d62646b9-d0a9-4fdb-9561-756a8b7eba45.xml +63 -0
  259. data/test/stub_responses/records/invoice-dba2f021-f149-4191-a126-5351d587ab0e.xml +74 -0
  260. data/test/stub_responses/records/invoice-de5d9c29-21b3-4342-958b-ed72c4bd7ab0.xml +106 -0
  261. data/test/stub_responses/records/invoice-e3d96555-2876-4364-a46a-7551a4f52611.xml +119 -0
  262. data/test/stub_responses/records/invoice-e4a0afbd-aea0-450b-ae23-0ce921e84a77.xml +99 -0
  263. data/test/stub_responses/records/invoice-e9cb9ecb-58ef-43a8-bd20-69a85338142d.xml +74 -0
  264. data/test/stub_responses/records/invoice-ec9a6f67-7128-4a63-8ba3-5e516f455f9b.xml +92 -0
  265. data/test/stub_responses/records/invoice-ed0f2587-84fc-4aef-bc4b-b1a262e24484.xml +78 -0
  266. data/test/stub_responses/records/invoice-f362ca53-8ade-4047-865a-bb64bee5863d.xml +73 -0
  267. data/test/stub_responses/records/invoice-f571c38b-5be1-41e1-ad5a-ff6184284beb.xml +104 -0
  268. data/test/stub_responses/records/invoice-f5832195-5cd3-4660-ad3f-b73d9c64f263.xml +83 -0
  269. data/test/stub_responses/records/invoice-f9c857eb-64cd-4235-a078-d04b52c77ea7.xml +74 -0
  270. data/test/stub_responses/records/manual_journal-4765d07b-aa03-4e56-9166-50661958c864.xml +38 -0
  271. data/test/stub_responses/records/manual_journal-53fc5558-5b76-4ecd-ae5c-c4af3ccde87c.xml +31 -0
  272. data/test/stub_responses/records/manual_journal-bb6cfcfc-4500-4475-bd3a-93ee512428e0.xml +31 -0
  273. data/test/stub_responses/records/manual_journal-f00a355b-7374-445c-886b-0437bea4095c.xml +45 -0
  274. data/test/stub_responses/refresh_responses.rb +29 -0
  275. data/test/stub_responses/tax_rates.xml +118 -0
  276. data/test/stub_responses/token_expired +1 -0
  277. data/test/stub_responses/tracking_categories.xml +27 -0
  278. data/test/stub_responses/unknown_error.xml +1 -0
  279. data/test/test_helper.rb +49 -0
  280. data/test/unit/models/contact_test.rb +26 -0
  281. data/test/unit/models/credit_note_test.rb +37 -0
  282. data/test/unit/models/invoice_test.rb +51 -0
  283. data/test/unit/oauth_test.rb +72 -0
  284. data/test/unit/private_application_test.rb +20 -0
  285. data/test/unit/record/base_model_test.rb +50 -0
  286. data/test/unit/record/base_test.rb +57 -0
  287. data/test/unit/record/model_definition_test.rb +159 -0
  288. data/test/unit/record/parse_where_hash_test.rb +63 -0
  289. data/test/unit/record/record_association_test.rb +36 -0
  290. data/test/unit/record/validators_test.rb +180 -0
  291. data/xeroizer.gemspec +375 -0
  292. metadata +533 -0
@@ -0,0 +1,94 @@
1
+ module Xeroizer
2
+ module Record
3
+ module RecordAssociationHelper
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ def belongs_to(field_name, options = {})
12
+ internal_field_name = options[:internal_name] || field_name
13
+ internal_singular_field_name = internal_field_name.to_s.singularize
14
+
15
+ define_association_attribute(field_name, internal_singular_field_name, :belongs_to, options)
16
+
17
+ # Create a #build_record_name method to build the record.
18
+ define_method "build_#{internal_singular_field_name}" do | *args |
19
+ attributes = args.size == 1 ? args.first : {}
20
+
21
+ # The name of the record model.
22
+ model_name = options[:model_name] ? options[:model_name].to_sym : field_name.to_s.singularize.camelize.to_sym
23
+
24
+ # The record's parent instance for this current application.
25
+ model_parent = new_model_class(model_name)
26
+
27
+ # Create a new record, binding it to it's parent instance.
28
+ record = Xeroizer::Record.const_get(model_name).build(attributes, model_parent)
29
+ self.attributes[field_name] = record
30
+ end
31
+ end
32
+
33
+ def has_many(field_name, options = {})
34
+ internal_field_name = options[:internal_name] || field_name
35
+ internal_singular_field_name = internal_field_name.to_s.singularize
36
+
37
+ define_association_attribute(field_name, internal_field_name, :has_many, options)
38
+
39
+ # Create an #add_record_name method to build the record and add to the attributes.
40
+ define_method "add_#{internal_singular_field_name}" do | *args |
41
+ # The name of the record model.
42
+ model_name = options[:model_name] ? options[:model_name].to_sym : field_name.to_s.singularize.camelize.to_sym
43
+
44
+ # The record's parent instance for this current application.
45
+ model_parent = new_model_class(model_name)
46
+
47
+ # The class of this record.
48
+ record_class = Xeroizer::Record.const_get(model_name)
49
+
50
+ # Parse the *args variable so that we can use this method like:
51
+ # add_record({fields}, {fields}, ...)
52
+ # add_record(record_one, record_two, ...)
53
+ # add_record([{fields}, {fields}], ...)
54
+ # add_record(key => val, key2 => val)
55
+ records = []
56
+ if args.size == 1 && args.first.is_a?(Array)
57
+ records = args.first
58
+ elsif args.size > 0
59
+ records = args
60
+ else
61
+ raise StandardError.new("Invalid arguments for #{self.class.name}#add_#{internal_singular_field_name}(#{args.inspect}).")
62
+ end
63
+
64
+ # Add each record.
65
+ records.each do | record |
66
+ record = record_class.build(record, model_parent) if record.is_a?(Hash)
67
+ raise StandardError.new("Record #{record.class.name} is not a #{record_class.name}.") unless record.is_a?(record_class)
68
+ self.attributes[field_name] ||= []
69
+ self.attributes[field_name] << record
70
+ end
71
+ end
72
+
73
+ end
74
+
75
+ def define_association_attribute(field_name, internal_field_name, association_type, options)
76
+ value_if_nil = (association_type == :has_many) ? [] : nil
77
+ define_simple_attribute(field_name, association_type, options, value_if_nil)
78
+
79
+ # Override reader for this association if this association belongs
80
+ # to a summary-typed record. This will automatically attempt to download
81
+ # the complete version of the record before accessing the association.
82
+ if list_contains_summary_only?
83
+ define_method internal_field_name do
84
+ download_complete_record! unless new_record? || complete_record_downloaded?
85
+ @attributes[field_name] || value_if_nil
86
+ end
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,59 @@
1
+ Dir.foreach(File.join(File.dirname(__FILE__), 'validators/')) { | file | require File.join(File.dirname(__FILE__), "validators/#{file}") if file =~ /\.rb$/ }
2
+
3
+ module Xeroizer
4
+ module Record
5
+ module ValidationHelper
6
+
7
+ def self.included(base)
8
+ base.extend(ClassMethods)
9
+ base.send :include, InstanceMethods
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ # Adds a validator config for each attribute specified in args.
15
+ def validates_with_validator(validator, args)
16
+ options = args.extract_options!
17
+ self.validators ||= []
18
+ args.flatten.each do | attribute |
19
+ self.validators << validator.new(attribute, options)
20
+ end
21
+ end
22
+
23
+ def validates_associated(*args)
24
+ validates_with_validator(Validator::AssociatedValidator, args)
25
+ end
26
+
27
+ def validates_inclusion_of(*args)
28
+ validates_with_validator(Validator::InclusionOfValidator, args)
29
+ end
30
+
31
+ def validates_presence_of(*args)
32
+ validates_with_validator(Validator::PresenceOfValidator, args)
33
+ end
34
+
35
+ end
36
+
37
+ module InstanceMethods
38
+
39
+ def valid?
40
+ @errors = []
41
+ if self.class.validators
42
+ self.class.validators.each do | validator |
43
+ validator.validate(self)
44
+ end
45
+ end
46
+ @errors.size == 0
47
+ end
48
+
49
+ def errors_for(attribute)
50
+ if errors.is_a?(Array)
51
+ errors.find_all { | (attr, msg) | attr == attribute }.map { | (attr, msg) | msg }
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ module Xeroizer
2
+ module Record
3
+
4
+ class Validator
5
+
6
+ class AssociatedValidator < Validator
7
+
8
+ def valid?(record)
9
+ case record.class.fields[attribute][:type]
10
+ when :belongs_to
11
+ return true if options[:allow_blanks] && record[attribute].nil?
12
+ unless record[attribute].is_a?(Xeroizer::Record::Base) && record[attribute].valid?
13
+ record.errors << [attribute, options[:message] || "must be valid"]
14
+ end
15
+
16
+ when :has_many
17
+ return true if options[:allow_blanks] && (record[attribute].nil? || (record[attribute].is_a?(Array) && record[attribute].size == 0))
18
+ if record[attribute].is_a?(Array) && record[attribute].size > 0
19
+ unless record[attribute].all? { | r | r.is_a?(Xeroizer::Record::Base) && r.valid? }
20
+ record.errors << [attribute, options[:message] || "must all be valid"]
21
+ end
22
+ else
23
+ record.errors << [attribute, "must have one or more records"]
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ module Xeroizer
2
+ module Record
3
+
4
+ class Validator
5
+
6
+ class InclusionOfValidator < Validator
7
+
8
+ def valid?(record)
9
+ if options[:in] && options[:in].is_a?(Array)
10
+ return true if options[:allow_blanks] && (record[attribute].nil? || record[attribute].to_s == '')
11
+ unless options[:in].include?(record[attribute])
12
+ record.errors << [attribute, options[:message] || "not one of #{options[:in].join(', ')}"]
13
+ end
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Xeroizer
2
+ module Record
3
+
4
+ class Validator
5
+
6
+ class PresenceOfValidator < Validator
7
+
8
+ def valid?(record)
9
+ if record[attribute].nil? || record[attribute].to_s == ''
10
+ record.errors << [attribute, options[:message] || "can't be blank"]
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module Xeroizer
2
+ module Record
3
+
4
+ class Validator
5
+
6
+ attr_reader :attribute
7
+ attr_reader :options
8
+
9
+ def initialize(attribute, options = {})
10
+ @attribute = attribute
11
+ @options = options
12
+ end
13
+
14
+ def validate(record)
15
+ run_validator = true
16
+ run_validator = false if options[:if] && !options[:if].call(record)
17
+ run_validator = false if options[:unless] && options[:unless].call(record)
18
+ valid?(record) if run_validator
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,113 @@
1
+ module Xeroizer
2
+ module Record
3
+ module XmlHelper
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ base.send :include, InstanceMethods
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ # Build a record instance from the XML node.
13
+ def build_from_node(node, parent)
14
+ record = new(parent)
15
+ node.elements.each do | element |
16
+ field = self.fields[element.name.to_s.underscore.to_sym]
17
+ if field
18
+ value = case field[:type]
19
+ when :guid then element.text
20
+ when :string then element.text
21
+ when :boolean then (element.text == 'true')
22
+ when :integer then element.text.to_i
23
+ when :decimal then BigDecimal.new(element.text)
24
+ when :date then Date.parse(element.text)
25
+ when :datetime then Time.parse(element.text)
26
+ when :belongs_to
27
+ model_name = field[:model_name] ? field[:model_name].to_sym : element.name.to_sym
28
+ Xeroizer::Record.const_get(model_name).build_from_node(element, parent)
29
+
30
+ when :has_many
31
+ if element.element_children.size > 0
32
+ sub_field_name = field[:model_name] ? field[:model_name].to_sym : element.children.first.name.to_sym
33
+ sub_parent = record.new_model_class(sub_field_name)
34
+ element.children.inject([]) do | list, element |
35
+ list << Xeroizer::Record.const_get(sub_field_name).build_from_node(element, sub_parent)
36
+ end
37
+ end
38
+
39
+ end
40
+ if field[:calculated]
41
+ record.attributes[field[:internal_name]] = value
42
+ else
43
+ record.send("#{field[:internal_name]}=", value)
44
+ end
45
+ end
46
+ end
47
+
48
+ record
49
+ end
50
+
51
+ end
52
+
53
+ module InstanceMethods
54
+
55
+ public
56
+
57
+ # Turn a record into its XML representation.
58
+ def to_xml(b = Builder::XmlMarkup.new(:indent => 2))
59
+ b.tag!(parent.model_name) {
60
+ attributes.each do | key, value |
61
+ unless value.nil?
62
+ field = self.class.fields[key]
63
+ xml_value_from_field(b, field, value)
64
+ end
65
+ end
66
+ }
67
+ end
68
+
69
+ protected
70
+
71
+ # Format a attribute for use in the XML passed to Xero.
72
+ def xml_value_from_field(b, field, value)
73
+ case field[:type]
74
+ when :guid then b.tag!(field[:api_name], value)
75
+ when :string then b.tag!(field[:api_name], value)
76
+ when :boolean then b.tag!(field[:api_name], value ? 'true' : 'false')
77
+ when :integer then b.tag!(field[:api_name], value.to_i)
78
+ when :decimal
79
+ real_value = case value
80
+ when BigDecimal then value.to_s
81
+ when String then BigDecimal.new(value).to_s
82
+ else value
83
+ end
84
+ b.tag!(field[:api_name], real_value)
85
+
86
+ when :date
87
+ real_value = case value
88
+ when Date then
89
+ when Time then value.utc.strftime("%Y-%m-%d")
90
+ end
91
+ b.tag!(field[:api_name], real_value)
92
+
93
+ when :datetime then b.tag!(field[:api_name], value.utc.strftime("%Y-%m-%dT%H:%M:%S"))
94
+ when :belongs_to
95
+ value.to_xml(b)
96
+ nil
97
+
98
+ when :has_many
99
+ if value.size > 0
100
+ b.tag!(value.first.parent.model_name.pluralize) {
101
+ value.each { | record | record.to_xml(b) }
102
+ }
103
+ nil
104
+ end
105
+
106
+ end
107
+ end
108
+
109
+ end
110
+
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,17 @@
1
+ module Xeroizer
2
+ class Response
3
+
4
+ attr_accessor :id, :status, :errors, :provider, :date_time, :response_items, :request_params, :request_xml, :response_xml
5
+
6
+ public
7
+
8
+ def success?
9
+ status == 'OK'
10
+ end
11
+
12
+ def error
13
+ errors.blank? ? nil : errors[0]
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,589 @@
1
+ <Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2
+ <Id>123bfff9-e1b6-481b-9f3b-41997d7bd627</Id>
3
+ <Status>OK</Status>
4
+ <ProviderName>Appcordion Private</ProviderName>
5
+ <DateTimeUTC>2010-12-21T00:56:58.7320527Z</DateTimeUTC>
6
+ <Accounts>
7
+ <Account>
8
+ <AccountID>13918178-849a-4823-9a31-57b7eac713d7</AccountID>
9
+ <Name>ANZ Business Account</Name>
10
+ <Status>ACTIVE</Status>
11
+ <Type>BANK</Type>
12
+ <TaxType>NONE</TaxType>
13
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
14
+ <BankAccountNumber>01023412345678</BankAccountNumber>
15
+ <CurrencyCode>AUD</CurrencyCode>
16
+ </Account>
17
+ <Account>
18
+ <AccountID>26028d3a-f981-44d6-a9ed-a522198870f8</AccountID>
19
+ <Code>099</Code>
20
+ <Name>Ridgeway Savings</Name>
21
+ <Status>ACTIVE</Status>
22
+ <Type>BANK</Type>
23
+ <TaxType>NONE</TaxType>
24
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
25
+ <BankAccountNumber>0932107654321</BankAccountNumber>
26
+ <CurrencyCode>AUD</CurrencyCode>
27
+ </Account>
28
+ <Account>
29
+ <AccountID>e2bacdc6-2006-43c2-a5da-3c0e5f43b452</AccountID>
30
+ <Code>200</Code>
31
+ <Name>Sales</Name>
32
+ <Status>ACTIVE</Status>
33
+ <Type>REVENUE</Type>
34
+ <TaxType>OUTPUT</TaxType>
35
+ <Description>Income from any normal business activity</Description>
36
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
37
+ </Account>
38
+ <Account>
39
+ <AccountID>39987591-5a9a-4513-8072-828069a65f9c</AccountID>
40
+ <Code>260</Code>
41
+ <Name>Other Revenue</Name>
42
+ <Status>ACTIVE</Status>
43
+ <Type>REVENUE</Type>
44
+ <TaxType>OUTPUT</TaxType>
45
+ <Description>Any other income that does not relate to normal business activities and is not recurring</Description>
46
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
47
+ </Account>
48
+ <Account>
49
+ <AccountID>1335b8b2-4d63-4af8-937f-04087ae2e36e</AccountID>
50
+ <Code>270</Code>
51
+ <Name>Interest Income</Name>
52
+ <Status>ACTIVE</Status>
53
+ <Type>REVENUE</Type>
54
+ <TaxType>NONE</TaxType>
55
+ <Description>Interest income</Description>
56
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
57
+ </Account>
58
+ <Account>
59
+ <AccountID>ee30a086-d381-4bd6-ba47-7af927d25825</AccountID>
60
+ <Code>300</Code>
61
+ <Name>Purchases</Name>
62
+ <Status>ACTIVE</Status>
63
+ <Type>DIRECTCOSTS</Type>
64
+ <TaxType>INPUT</TaxType>
65
+ <Description>Goods purchased with the intention of selling these to customers</Description>
66
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
67
+ <ReportingCode>EXP</ReportingCode>
68
+ <ReportingCodeName>Expense</ReportingCodeName>
69
+ </Account>
70
+ <Account>
71
+ <AccountID>d392fe47-c99d-499e-a200-46709dd6b6e7</AccountID>
72
+ <Code>400</Code>
73
+ <Name>Advertising</Name>
74
+ <Status>ACTIVE</Status>
75
+ <Type>EXPENSE</Type>
76
+ <TaxType>INPUT</TaxType>
77
+ <Description>Expenses incurred for advertising while trying to increase sales</Description>
78
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
79
+ </Account>
80
+ <Account>
81
+ <AccountID>959af5f4-9925-44e8-b283-7ddf4b427238</AccountID>
82
+ <Code>404</Code>
83
+ <Name>Bank Fees</Name>
84
+ <Status>ACTIVE</Status>
85
+ <Type>EXPENSE</Type>
86
+ <TaxType>NONE</TaxType>
87
+ <Description>Fees charged by your bank for transactions regarding your bank account(s).</Description>
88
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
89
+ </Account>
90
+ <Account>
91
+ <AccountID>ff09eac3-5b17-44fb-9eea-e2e9375e91b4</AccountID>
92
+ <Code>408</Code>
93
+ <Name>Cleaning</Name>
94
+ <Status>ACTIVE</Status>
95
+ <Type>EXPENSE</Type>
96
+ <TaxType>INPUT</TaxType>
97
+ <Description>Expenses incurred for cleaning business property.</Description>
98
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
99
+ </Account>
100
+ <Account>
101
+ <AccountID>6db51cfa-0326-4e63-a743-c78c4d99aba4</AccountID>
102
+ <Code>412</Code>
103
+ <Name>Consulting &amp; Accounting</Name>
104
+ <Status>ACTIVE</Status>
105
+ <Type>EXPENSE</Type>
106
+ <TaxType>INPUT</TaxType>
107
+ <Description>Expenses related to paying consultants</Description>
108
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
109
+ </Account>
110
+ <Account>
111
+ <AccountID>7f940c53-bae5-41a8-a3a3-c841227fee01</AccountID>
112
+ <Code>416</Code>
113
+ <Name>Depreciation</Name>
114
+ <Status>ACTIVE</Status>
115
+ <Type>EXPENSE</Type>
116
+ <TaxType>NONE</TaxType>
117
+ <Description>The amount of the asset's cost (based on the useful life) that was consumed during the period</Description>
118
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
119
+ </Account>
120
+ <Account>
121
+ <AccountID>18e27517-81e0-437c-bc21-fbba8e30d6bb</AccountID>
122
+ <Code>420</Code>
123
+ <Name>Entertainment</Name>
124
+ <Status>ACTIVE</Status>
125
+ <Type>EXPENSE</Type>
126
+ <TaxType>NONE</TaxType>
127
+ <Description>Expenses paid by company for the business but are not deductable for income tax purposes.</Description>
128
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
129
+ </Account>
130
+ <Account>
131
+ <AccountID>c4a9d449-ef04-43a7-9af8-49c6558b361e</AccountID>
132
+ <Code>425</Code>
133
+ <Name>Freight &amp; Courier</Name>
134
+ <Status>ACTIVE</Status>
135
+ <Type>EXPENSE</Type>
136
+ <TaxType>INPUT</TaxType>
137
+ <Description>Expenses incurred on courier &amp; freight costs</Description>
138
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
139
+ </Account>
140
+ <Account>
141
+ <AccountID>94882296-5acf-4350-8c5b-82bc9370ab78</AccountID>
142
+ <Code>429</Code>
143
+ <Name>General Expenses</Name>
144
+ <Status>ACTIVE</Status>
145
+ <Type>EXPENSE</Type>
146
+ <TaxType>INPUT</TaxType>
147
+ <Description>General expenses related to the running of the business.</Description>
148
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
149
+ </Account>
150
+ <Account>
151
+ <AccountID>48a193e4-f1e3-49b8-8ff3-74137575f087</AccountID>
152
+ <Code>433</Code>
153
+ <Name>Insurance</Name>
154
+ <Status>ACTIVE</Status>
155
+ <Type>EXPENSE</Type>
156
+ <TaxType>INPUT</TaxType>
157
+ <Description>Expenses incurred for insuring the business' assets</Description>
158
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
159
+ </Account>
160
+ <Account>
161
+ <AccountID>a29e26fb-06ec-4aad-8a6f-6cadc52291f8</AccountID>
162
+ <Code>437</Code>
163
+ <Name>Interest Expense</Name>
164
+ <Status>ACTIVE</Status>
165
+ <Type>EXPENSE</Type>
166
+ <TaxType>NONE</TaxType>
167
+ <Description>Any interest expenses paid to ATO, business bank accounts or credit card accounts.</Description>
168
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
169
+ </Account>
170
+ <Account>
171
+ <AccountID>1b83b470-95ae-4b0b-a84e-8c407d5ea2ae</AccountID>
172
+ <Code>441</Code>
173
+ <Name>Legal expenses</Name>
174
+ <Status>ACTIVE</Status>
175
+ <Type>EXPENSE</Type>
176
+ <TaxType>INPUT</TaxType>
177
+ <Description>Expenses incurred on any legal matters</Description>
178
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
179
+ </Account>
180
+ <Account>
181
+ <AccountID>42a56c1a-6141-4bf2-913d-916dc1a35cfd</AccountID>
182
+ <Code>445</Code>
183
+ <Name>Light, Power, Heating</Name>
184
+ <Status>ACTIVE</Status>
185
+ <Type>EXPENSE</Type>
186
+ <TaxType>INPUT</TaxType>
187
+ <Description>Expenses incurred for lighting, powering or heating the premises</Description>
188
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
189
+ </Account>
190
+ <Account>
191
+ <AccountID>005f380d-4a9c-497f-b9d7-817f0f02790e</AccountID>
192
+ <Code>449</Code>
193
+ <Name>Motor Vehicle Expenses</Name>
194
+ <Status>ACTIVE</Status>
195
+ <Type>EXPENSE</Type>
196
+ <TaxType>INPUT</TaxType>
197
+ <Description>Expenses incurred on the running of company motor vehicles</Description>
198
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
199
+ </Account>
200
+ <Account>
201
+ <AccountID>8ab9d684-f897-4168-b5d1-2279bf74bb82</AccountID>
202
+ <Code>453</Code>
203
+ <Name>Office Expenses</Name>
204
+ <Status>ACTIVE</Status>
205
+ <Type>EXPENSE</Type>
206
+ <TaxType>INPUT</TaxType>
207
+ <Description>General expenses related to the running of the business office.</Description>
208
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
209
+ </Account>
210
+ <Account>
211
+ <AccountID>b18eaea6-4d11-462c-ac30-7975108b5859</AccountID>
212
+ <Code>461</Code>
213
+ <Name>Printing &amp; Stationery</Name>
214
+ <Status>ACTIVE</Status>
215
+ <Type>EXPENSE</Type>
216
+ <TaxType>INPUT</TaxType>
217
+ <Description>Expenses incurred by the entity as a result of printing and stationery</Description>
218
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
219
+ </Account>
220
+ <Account>
221
+ <AccountID>f5f05ee3-f9cd-4bf9-9423-ed81de96b537</AccountID>
222
+ <Code>469</Code>
223
+ <Name>Rent</Name>
224
+ <Status>ACTIVE</Status>
225
+ <Type>EXPENSE</Type>
226
+ <TaxType>INPUT</TaxType>
227
+ <Description>The payment to lease a building or area.</Description>
228
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
229
+ </Account>
230
+ <Account>
231
+ <AccountID>e91eee7a-340e-4203-8af8-14db5121af35</AccountID>
232
+ <Code>473</Code>
233
+ <Name>Repairs and Maintenance</Name>
234
+ <Status>ARCHIVED</Status>
235
+ <Type>EXPENSE</Type>
236
+ <TaxType>INPUT</TaxType>
237
+ <Description>Expenses incurred on a damaged or run down asset that will bring the asset back to its original condition.</Description>
238
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
239
+ </Account>
240
+ <Account>
241
+ <AccountID>c4f12f09-846e-4f6f-b39c-dff3be3e49a7</AccountID>
242
+ <Code>477</Code>
243
+ <Name>Wages and Salaries</Name>
244
+ <Status>ACTIVE</Status>
245
+ <Type>EXPENSE</Type>
246
+ <TaxType>EXEMPTINPUT</TaxType>
247
+ <Description>Payment to employees in exchange for their resources</Description>
248
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
249
+ </Account>
250
+ <Account>
251
+ <AccountID>479252dc-1e01-4a86-a452-9552a191453f</AccountID>
252
+ <Code>478</Code>
253
+ <Name>Superannuation</Name>
254
+ <Status>ACTIVE</Status>
255
+ <Type>EXPENSE</Type>
256
+ <TaxType>EXEMPTINPUT</TaxType>
257
+ <Description>Superannuation contributions</Description>
258
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
259
+ <ReportingCode>EXP</ReportingCode>
260
+ <ReportingCodeName>Expense</ReportingCodeName>
261
+ </Account>
262
+ <Account>
263
+ <AccountID>98154d6b-0424-42f7-9aff-678db4ff62ba</AccountID>
264
+ <Code>479</Code>
265
+ <Name>Commission</Name>
266
+ <Status>ACTIVE</Status>
267
+ <Type>DIRECTCOSTS</Type>
268
+ <TaxType>NONE</TaxType>
269
+ <Description>% to staff for consultancy work invoiced to them</Description>
270
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
271
+ </Account>
272
+ <Account>
273
+ <AccountID>b3742a53-0f64-4765-b5cc-3ece843b2e91</AccountID>
274
+ <Code>485</Code>
275
+ <Name>Subscriptions</Name>
276
+ <Status>ACTIVE</Status>
277
+ <Type>EXPENSE</Type>
278
+ <TaxType>INPUT</TaxType>
279
+ <Description>E.g. Magazines, professional bodies.</Description>
280
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
281
+ </Account>
282
+ <Account>
283
+ <AccountID>266f40cc-5aa1-4f6c-b078-eb615171d6de</AccountID>
284
+ <Code>489</Code>
285
+ <Name>Telephone &amp; Internet</Name>
286
+ <Status>ACTIVE</Status>
287
+ <Type>EXPENSE</Type>
288
+ <TaxType>INPUT</TaxType>
289
+ <Description>Expenditure incurred from any business-related phone calls, phone lines, or internet connections</Description>
290
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
291
+ </Account>
292
+ <Account>
293
+ <AccountID>25717024-5b50-4320-93b7-280c0614a613</AccountID>
294
+ <Code>493</Code>
295
+ <Name>Travel - National</Name>
296
+ <Status>ACTIVE</Status>
297
+ <Type>EXPENSE</Type>
298
+ <TaxType>INPUT</TaxType>
299
+ <Description>Expenses incurred from domestic travel which has a business purpose</Description>
300
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
301
+ </Account>
302
+ <Account>
303
+ <AccountID>eaa06c90-21e6-4176-9333-8ab4c23f0004</AccountID>
304
+ <Code>494</Code>
305
+ <Name>Travel - International</Name>
306
+ <Status>ACTIVE</Status>
307
+ <Type>EXPENSE</Type>
308
+ <TaxType>NONE</TaxType>
309
+ <Description>Expenses incurred from international travel which has a business purpose</Description>
310
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
311
+ </Account>
312
+ <Account>
313
+ <AccountID>d290c7f4-df33-46f0-917b-d188c6f517dc</AccountID>
314
+ <Code>497</Code>
315
+ <Name>Bank Revaluations</Name>
316
+ <Status>ARCHIVED</Status>
317
+ <Type>EXPENSE</Type>
318
+ <TaxType>NONE</TaxType>
319
+ <Description>Bank account revaluations due for foreign exchange rate changes</Description>
320
+ <SystemAccount>BANKCURRENCYGAIN</SystemAccount>
321
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
322
+ </Account>
323
+ <Account>
324
+ <AccountID>09ef3689-6913-4f31-aeca-81646680e623</AccountID>
325
+ <Code>498</Code>
326
+ <Name>Unrealised Currency Gains</Name>
327
+ <Status>ARCHIVED</Status>
328
+ <Type>EXPENSE</Type>
329
+ <TaxType>NONE</TaxType>
330
+ <Description>Unrealised currency gains on outstanding items</Description>
331
+ <SystemAccount>UNREALISEDCURRENCYGAIN</SystemAccount>
332
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
333
+ </Account>
334
+ <Account>
335
+ <AccountID>e0b4f130-7fb7-4e29-9a85-1e002ea5cc31</AccountID>
336
+ <Code>499</Code>
337
+ <Name>Realised Currency Gains</Name>
338
+ <Status>ARCHIVED</Status>
339
+ <Type>EXPENSE</Type>
340
+ <TaxType>NONE</TaxType>
341
+ <Description>Gains or losses made due to currency exchange rate changes</Description>
342
+ <SystemAccount>REALISEDCURRENCYGAIN</SystemAccount>
343
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
344
+ </Account>
345
+ <Account>
346
+ <AccountID>53bee866-8d31-4669-bd62-69026afcc86d</AccountID>
347
+ <Code>505</Code>
348
+ <Name>Income Tax Expense</Name>
349
+ <Status>ACTIVE</Status>
350
+ <Type>EXPENSE</Type>
351
+ <TaxType>EXEMPTINPUT</TaxType>
352
+ <Description>A percentage of total earnings paid to the government.</Description>
353
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
354
+ <ReportingCode>EXP</ReportingCode>
355
+ <ReportingCodeName>Expense</ReportingCodeName>
356
+ </Account>
357
+ <Account>
358
+ <AccountID>3dd5c80d-e109-4313-8c61-41648e33704f</AccountID>
359
+ <Code>610</Code>
360
+ <Name>Accounts Receivable</Name>
361
+ <Status>ACTIVE</Status>
362
+ <Type>CURRENT</Type>
363
+ <TaxType>NONE</TaxType>
364
+ <Description>Outstanding invoices the company has issued out to the client but has not yet received in cash at balance date.</Description>
365
+ <SystemAccount>DEBTORS</SystemAccount>
366
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
367
+ </Account>
368
+ <Account>
369
+ <AccountID>26a3ec3b-0aa8-4cbe-b0b1-20c6277a55ad</AccountID>
370
+ <Code>620</Code>
371
+ <Name>Prepayments</Name>
372
+ <Status>ARCHIVED</Status>
373
+ <Type>CURRENT</Type>
374
+ <TaxType>NONE</TaxType>
375
+ <Description>An expenditure that has been paid for in advance.</Description>
376
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
377
+ </Account>
378
+ <Account>
379
+ <AccountID>2d69b4ee-37d4-4f67-b950-32cbdd5765ed</AccountID>
380
+ <Code>710</Code>
381
+ <Name>Office Equipment</Name>
382
+ <Status>ACTIVE</Status>
383
+ <Type>FIXED</Type>
384
+ <TaxType>CAPEXINPUT</TaxType>
385
+ <Description>Office equipment that is owned and controlled by the business</Description>
386
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
387
+ </Account>
388
+ <Account>
389
+ <AccountID>24d010bf-5e4b-42dd-9aa3-a5484dd0686f</AccountID>
390
+ <Code>711</Code>
391
+ <Name>Less Accumulated Depreciation on Office Equipment</Name>
392
+ <Status>ACTIVE</Status>
393
+ <Type>FIXED</Type>
394
+ <TaxType>EXEMPTINPUT</TaxType>
395
+ <Description>The total amount of office equipment cost that has been consumed by the entity (based on the useful life)</Description>
396
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
397
+ <ReportingCode>ASS</ReportingCode>
398
+ <ReportingCodeName>Assets</ReportingCodeName>
399
+ </Account>
400
+ <Account>
401
+ <AccountID>75bbcb81-6b3d-4ca9-8522-3b582cb5c21a</AccountID>
402
+ <Code>720</Code>
403
+ <Name>Computer Equipment</Name>
404
+ <Status>ACTIVE</Status>
405
+ <Type>FIXED</Type>
406
+ <TaxType>CAPEXINPUT</TaxType>
407
+ <Description>Computer equipment that is owned and controlled by the business</Description>
408
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
409
+ </Account>
410
+ <Account>
411
+ <AccountID>44ef13ab-a913-4688-b6f0-52877b670ad4</AccountID>
412
+ <Code>721</Code>
413
+ <Name>Less Accumulated Depreciation on Computer Equipment</Name>
414
+ <Status>ACTIVE</Status>
415
+ <Type>FIXED</Type>
416
+ <TaxType>EXEMPTINPUT</TaxType>
417
+ <Description>The total amount of computer equipment cost that has been consumed by the business (based on the useful life)</Description>
418
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
419
+ <ReportingCode>ASS</ReportingCode>
420
+ <ReportingCodeName>Assets</ReportingCodeName>
421
+ </Account>
422
+ <Account>
423
+ <AccountID>8e9c5166-d3fe-4e21-827a-f42753568e80</AccountID>
424
+ <Code>800</Code>
425
+ <Name>Accounts Payable</Name>
426
+ <Status>ACTIVE</Status>
427
+ <Type>CURRLIAB</Type>
428
+ <TaxType>NONE</TaxType>
429
+ <Description>Outstanding invoices the company has received from suppliers but has not yet paid at balance date</Description>
430
+ <SystemAccount>CREDITORS</SystemAccount>
431
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
432
+ </Account>
433
+ <Account>
434
+ <AccountID>c11b84a9-e90a-4094-83d7-b8494d195ecc</AccountID>
435
+ <Code>801</Code>
436
+ <Name>Unpaid Expense Claims</Name>
437
+ <Status>ACTIVE</Status>
438
+ <Type>CURRLIAB</Type>
439
+ <TaxType>NONE</TaxType>
440
+ <Description>Expense claims typically made by employees/shareholder employees still outstanding.</Description>
441
+ <SystemAccount>UNPAIDEXPCLM</SystemAccount>
442
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
443
+ </Account>
444
+ <Account>
445
+ <AccountID>38b7b812-d334-46eb-872e-67c4cfb87538</AccountID>
446
+ <Code>805</Code>
447
+ <Name>Accrued Liabilities</Name>
448
+ <Status>ACTIVE</Status>
449
+ <Type>CURRLIAB</Type>
450
+ <TaxType>NONE</TaxType>
451
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
452
+ </Account>
453
+ <Account>
454
+ <AccountID>66e60a82-99d8-47d1-956b-5baea404acba</AccountID>
455
+ <Code>820</Code>
456
+ <Name>GST</Name>
457
+ <Status>ACTIVE</Status>
458
+ <Type>CURRLIAB</Type>
459
+ <TaxType>NONE</TaxType>
460
+ <Description>The balance in this account represents GST owing to or from the ATO. At the end of the GST period, it is this account that should be used to code against either the 'refunds from' or 'payments to' the ATO that will appear on the bank statement. Xero has been designed to use only one GST account to track GST on income and expenses, so there is no need to add any new GST accounts to Xero.</Description>
461
+ <SystemAccount>GST</SystemAccount>
462
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
463
+ </Account>
464
+ <Account>
465
+ <AccountID>4d111d55-1c71-46b4-8cbc-d8b54d8d54c5</AccountID>
466
+ <Code>825</Code>
467
+ <Name>PAYG Withholdings Payable</Name>
468
+ <Status>ACTIVE</Status>
469
+ <Type>CURRLIAB</Type>
470
+ <TaxType>NONE</TaxType>
471
+ <Description>The amount of PAYE tax that is due to be paid</Description>
472
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
473
+ </Account>
474
+ <Account>
475
+ <AccountID>a47d1f5b-5297-484a-8a8a-64a75053e4f4</AccountID>
476
+ <Code>826</Code>
477
+ <Name>Superannuation Payable</Name>
478
+ <Status>ACTIVE</Status>
479
+ <Type>CURRLIAB</Type>
480
+ <TaxType>NONE</TaxType>
481
+ <Description>The amount of superannuation that is due to be paid</Description>
482
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
483
+ </Account>
484
+ <Account>
485
+ <AccountID>eba8b619-8e5d-43df-bd0a-08c328021003</AccountID>
486
+ <Code>830</Code>
487
+ <Name>Income Tax Payable</Name>
488
+ <Status>ACTIVE</Status>
489
+ <Type>CURRLIAB</Type>
490
+ <TaxType>NONE</TaxType>
491
+ <Description>The amount of income tax that is due to be paid, also resident withholding tax paid on interest received.</Description>
492
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
493
+ </Account>
494
+ <Account>
495
+ <AccountID>305b05b3-01f3-4f47-a45d-edfa66ea03e7</AccountID>
496
+ <Code>840</Code>
497
+ <Name>Historical Adjustment</Name>
498
+ <Status>ACTIVE</Status>
499
+ <Type>CURRLIAB</Type>
500
+ <TaxType>NONE</TaxType>
501
+ <Description>For accountant adjustments</Description>
502
+ <SystemAccount>HISTORICAL</SystemAccount>
503
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
504
+ </Account>
505
+ <Account>
506
+ <AccountID>50031b5d-828f-4090-b1f1-d5eb591d8b18</AccountID>
507
+ <Code>850</Code>
508
+ <Name>Suspense</Name>
509
+ <Status>ACTIVE</Status>
510
+ <Type>CURRLIAB</Type>
511
+ <TaxType>NONE</TaxType>
512
+ <Description>An entry that allows an unknown transaction to be entered, so the accounts can still be worked on in balance and the entry can be dealt with later.</Description>
513
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
514
+ </Account>
515
+ <Account>
516
+ <AccountID>37441137-cfe3-4c2b-a569-ef75e6b66ae4</AccountID>
517
+ <Code>860</Code>
518
+ <Name>Rounding</Name>
519
+ <Status>ACTIVE</Status>
520
+ <Type>CURRLIAB</Type>
521
+ <TaxType>NONE</TaxType>
522
+ <Description>An adjustment entry to allow for rounding</Description>
523
+ <SystemAccount>ROUNDING</SystemAccount>
524
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
525
+ </Account>
526
+ <Account>
527
+ <AccountID>a94c9633-aeb1-4b13-a96b-7998d887b770</AccountID>
528
+ <Code>877</Code>
529
+ <Name>Tracking Transfers</Name>
530
+ <Status>ACTIVE</Status>
531
+ <Type>CURRLIAB</Type>
532
+ <TaxType>NONE</TaxType>
533
+ <Description>Transfers between tracking categories</Description>
534
+ <SystemAccount>TRACKINGTRANSFERS</SystemAccount>
535
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
536
+ </Account>
537
+ <Account>
538
+ <AccountID>64ddb541-7e5f-4ded-a072-2f59d8898a8c</AccountID>
539
+ <Code>880</Code>
540
+ <Name>Owner A Drawings</Name>
541
+ <Status>ACTIVE</Status>
542
+ <Type>CURRLIAB</Type>
543
+ <TaxType>NONE</TaxType>
544
+ <Description>Withdrawals by the owners</Description>
545
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
546
+ </Account>
547
+ <Account>
548
+ <AccountID>16e01c0e-4fbd-4488-b4c3-e399903306aa</AccountID>
549
+ <Code>881</Code>
550
+ <Name>Owner A Funds Introduced</Name>
551
+ <Status>ACTIVE</Status>
552
+ <Type>CURRLIAB</Type>
553
+ <TaxType>NONE</TaxType>
554
+ <Description>Funds contributed by the owner</Description>
555
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
556
+ </Account>
557
+ <Account>
558
+ <AccountID>c1de1295-c39c-444c-abfa-447b2263563f</AccountID>
559
+ <Code>900</Code>
560
+ <Name>Loan</Name>
561
+ <Status>ARCHIVED</Status>
562
+ <Type>TERMLIAB</Type>
563
+ <TaxType>NONE</TaxType>
564
+ <Description>Money that has been borrowed from a creditor</Description>
565
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
566
+ </Account>
567
+ <Account>
568
+ <AccountID>e2eda5d3-a80f-45ff-af4c-74472fd904d4</AccountID>
569
+ <Code>960</Code>
570
+ <Name>Retained Earnings</Name>
571
+ <Status>ACTIVE</Status>
572
+ <Type>EQUITY</Type>
573
+ <TaxType>NONE</TaxType>
574
+ <Description>Do not Use</Description>
575
+ <SystemAccount>RETAINEDEARNINGS</SystemAccount>
576
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
577
+ </Account>
578
+ <Account>
579
+ <AccountID>dfe8ba15-3324-4d29-b4e2-2f23c05e8532</AccountID>
580
+ <Code>970</Code>
581
+ <Name>Owner A Share Capital</Name>
582
+ <Status>ACTIVE</Status>
583
+ <Type>EQUITY</Type>
584
+ <TaxType>NONE</TaxType>
585
+ <Description>The value of shares purchased by the shareholders</Description>
586
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
587
+ </Account>
588
+ </Accounts>
589
+ </Response>