chellow 1714484335.0.0__tar.gz → 1715252645.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of chellow might be problematic. Click here for more details.

Files changed (470) hide show
  1. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/PKG-INFO +1 -1
  2. chellow-1715252645.0.0/VERSION +1 -0
  3. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/computer.py +22 -19
  4. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/views.py +27 -12
  5. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/general_import.py +10 -12
  6. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/models.py +215 -76
  7. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_33.py +2 -2
  8. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_ecoes_comparison.py +7 -17
  9. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dtc_meter_type.html +4 -4
  10. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dtc_meter_types.html +3 -3
  11. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/era_edit.html +1 -0
  12. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/era_edit_form.html +8 -8
  13. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/scenario_docs.html +2 -10
  14. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_add_e_supply.html +1 -0
  15. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_add_e_supply_form.html +8 -1
  16. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_eras.html +6 -3
  17. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/general_imports.html +4 -6
  18. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/macros.html +1 -1
  19. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_ccl.py +5 -1
  20. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_cfd.py +11 -3
  21. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_computer.py +17 -5
  22. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_duos.py +5 -1
  23. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_e_views.py +81 -31
  24. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_hh_importer.py +5 -1
  25. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_ro.py +5 -1
  26. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_scenario.py +5 -1
  27. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_tlms.py +5 -1
  28. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_tnuos.py +1 -1
  29. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_triad.py +5 -1
  30. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_109.py +5 -1
  31. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_111.py +8 -2
  32. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_169.py +5 -1
  33. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_187.py +5 -1
  34. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_219.py +5 -1
  35. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_241.py +5 -1
  36. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_247.py +30 -10
  37. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_29.py +5 -1
  38. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_291.py +8 -2
  39. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_33.py +18 -10
  40. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_387.py +5 -1
  41. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_41.py +3 -3
  42. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_59.py +9 -3
  43. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_87.py +5 -1
  44. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_bills.py +5 -1
  45. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_ecoes_comparison.py +10 -152
  46. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_general_import.py +14 -4
  47. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_models.py +31 -11
  48. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_views.py +15 -5
  49. chellow-1714484335.0.0/VERSION +0 -1
  50. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/.ebextensions/chellow.config +0 -0
  51. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/.github/workflows/chellow.yml +0 -0
  52. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/.gitignore +0 -0
  53. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/README.md +0 -0
  54. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/application.py +0 -0
  55. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/bin/chellow_service_monitor.sh +0 -0
  56. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/bin/chellow_start.sh +0 -0
  57. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/__init__.py +0 -0
  58. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/api.py +0 -0
  59. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/bank_holidays.py +0 -0
  60. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/commands.py +0 -0
  61. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/dloads.py +0 -0
  62. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/__init__.py +0 -0
  63. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/aahedc.py +0 -0
  64. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_importer.py +0 -0
  65. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/__init__.py +0 -0
  66. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/activity_mop_stark_xlsx.py +0 -0
  67. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/annual_mop_stark_xlsx.py +0 -0
  68. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/bgb_edi.py +0 -0
  69. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/csv.py +0 -0
  70. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/engie_edi.py +0 -0
  71. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/engie_xls.py +0 -0
  72. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/engie_xlsx.py +0 -0
  73. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/gdf_csv.py +0 -0
  74. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/haven_csv.py +0 -0
  75. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/haven_edi.py +0 -0
  76. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/haven_edi_tprs.py +0 -0
  77. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/mm.py +0 -0
  78. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/nonsettlement_dc_stark_xlsx.py +0 -0
  79. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/settlement_dc_stark_xlsx.py +0 -0
  80. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/sse_edi.py +0 -0
  81. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bill_parsers/sww_xls.py +0 -0
  82. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bmarketidx.py +0 -0
  83. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/bsuos.py +0 -0
  84. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/ccl.py +0 -0
  85. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/cfd.py +0 -0
  86. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/dno_rate_parser.py +0 -0
  87. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/duos.py +0 -0
  88. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/elexon.py +0 -0
  89. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/energy_management.py +0 -0
  90. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/hh_importer.py +0 -0
  91. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/hh_parser_bg_csv.py +0 -0
  92. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/hh_parser_df2.py +0 -0
  93. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/hh_parser_simple_csv.py +0 -0
  94. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/laf_import.py +0 -0
  95. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/lcc.py +0 -0
  96. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/mdd_importer.py +0 -0
  97. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/rcrc.py +0 -0
  98. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/ro.py +0 -0
  99. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/scenario.py +0 -0
  100. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/system_price.py +0 -0
  101. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/tlms.py +0 -0
  102. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/tnuos.py +0 -0
  103. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/e/triad.py +0 -0
  104. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/edi_lib.py +0 -0
  105. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/bill_import.py +0 -0
  106. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/bill_parser_csv.py +0 -0
  107. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/bill_parser_engie_edi.py +0 -0
  108. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/ccl.py +0 -0
  109. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/cv.py +0 -0
  110. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/dn_rate_parser.py +0 -0
  111. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/engine.py +0 -0
  112. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/transportation.py +0 -0
  113. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/gas/views.py +0 -0
  114. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/national_grid.py +0 -0
  115. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/proxy.py +0 -0
  116. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/rate_server.py +0 -0
  117. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/__init__.py +0 -0
  118. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_109.py +0 -0
  119. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_111.py +0 -0
  120. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_169.py +0 -0
  121. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_181.py +0 -0
  122. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_183.py +0 -0
  123. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_187.py +0 -0
  124. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_219.py +0 -0
  125. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_231.py +0 -0
  126. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_233.py +0 -0
  127. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_241.py +0 -0
  128. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_247.py +0 -0
  129. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_29.py +0 -0
  130. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_291.py +0 -0
  131. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_387.py +0 -0
  132. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_41.py +0 -0
  133. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_429.py +0 -0
  134. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_59.py +0 -0
  135. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_81.py +0 -0
  136. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_87.py +0 -0
  137. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_asset_comparison.py +0 -0
  138. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_batches.py +0 -0
  139. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_bills.py +0 -0
  140. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_csv_llfcs.py +0 -0
  141. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_csv_site_hh_data.py +0 -0
  142. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_csv_site_snags.py +0 -0
  143. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_g_monthly_duration.py +0 -0
  144. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_g_supplies_snapshot.py +0 -0
  145. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_g_supply_virtual_bill.py +0 -0
  146. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_g_virtual_bills.py +0 -0
  147. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_g_virtual_bills_hh.py +0 -0
  148. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_sscs.py +0 -0
  149. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/reports/report_supply_contacts.py +0 -0
  150. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/static/css/chellow.css +0 -0
  151. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/static/images/favicon.svg +0 -0
  152. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/static/images/favicon_test.svg +0 -0
  153. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/static/images/logo.png +0 -0
  154. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/static/js/htmx.min.js +0 -0
  155. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/403.html +0 -0
  156. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/base.html +0 -0
  157. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/bill_type.html +0 -0
  158. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/bill_types.html +0 -0
  159. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/chain.html +0 -0
  160. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/csv_sites_monthly_duration.html +0 -0
  161. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/downloads.html +0 -0
  162. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/asset_comparison.html +0 -0
  163. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel.html +0 -0
  164. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel_add.html +0 -0
  165. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel_edit.html +0 -0
  166. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel_snag.html +0 -0
  167. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel_snag_edit.html +0 -0
  168. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/channel_snags.html +0 -0
  169. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/comm.html +0 -0
  170. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/comms.html +0 -0
  171. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/cop.html +0 -0
  172. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/cops.html +0 -0
  173. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_bills.html +0 -0
  174. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_register_reads.html +0 -0
  175. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_sites_hh_data.html +0 -0
  176. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_sites_triad.html +0 -0
  177. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_supplies_hh_data.html +0 -0
  178. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_supplies_snapshot.html +0 -0
  179. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/csv_supplies_triad.html +0 -0
  180. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_auto_importer.html +0 -0
  181. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch.html +0 -0
  182. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch_add.html +0 -0
  183. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch_edit.html +0 -0
  184. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch_file.html +0 -0
  185. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch_file_edit.html +0 -0
  186. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batch_upload_file.html +0 -0
  187. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_batches.html +0 -0
  188. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_bill.html +0 -0
  189. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_bill_add.html +0 -0
  190. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_bill_edit.html +0 -0
  191. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_bill_import.html +0 -0
  192. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_bill_imports.html +0 -0
  193. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract.html +0 -0
  194. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract_edit.html +0 -0
  195. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract_hh_import.html +0 -0
  196. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract_hh_imports.html +0 -0
  197. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract_properties.html +0 -0
  198. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contract_properties_edit.html +0 -0
  199. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contracts.html +0 -0
  200. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_contracts_add.html +0 -0
  201. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_rate_script.html +0 -0
  202. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_rate_script_add.html +0 -0
  203. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dc_rate_script_edit.html +0 -0
  204. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dno.html +0 -0
  205. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dno_rate_script.html +0 -0
  206. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dno_rate_script_add.html +0 -0
  207. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dno_rate_script_edit.html +0 -0
  208. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/dnos.html +0 -0
  209. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/duration_report.html +0 -0
  210. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/elexon.html +0 -0
  211. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/em_hh_data.html +0 -0
  212. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/em_months.html +0 -0
  213. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/em_site.html +0 -0
  214. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/em_totals.html +0 -0
  215. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/energisation_status.html +0 -0
  216. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/energisation_statuses.html +0 -0
  217. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/era_supplier_bill_add.html +0 -0
  218. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/generator_type.html +0 -0
  219. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/generator_types.html +0 -0
  220. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/gsp_group.html +0 -0
  221. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/gsp_groups.html +0 -0
  222. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/hh_datum_edit.html +0 -0
  223. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/lafs.html +0 -0
  224. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/lcc.html +0 -0
  225. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/llfc.html +0 -0
  226. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/llfc_edit.html +0 -0
  227. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/llfcs.html +0 -0
  228. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/market_role.html +0 -0
  229. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/market_roles.html +0 -0
  230. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/meter_payment_type.html +0 -0
  231. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/meter_payment_types.html +0 -0
  232. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/meter_type.html +0 -0
  233. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/meter_types.html +0 -0
  234. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch.html +0 -0
  235. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch_add.html +0 -0
  236. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch_edit.html +0 -0
  237. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch_file.html +0 -0
  238. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch_file_edit.html +0 -0
  239. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batch_upload_file.html +0 -0
  240. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_batches.html +0 -0
  241. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_bill.html +0 -0
  242. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_bill_add.html +0 -0
  243. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_bill_edit.html +0 -0
  244. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_bill_import.html +0 -0
  245. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_bill_imports.html +0 -0
  246. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_contract.html +0 -0
  247. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_contract_add.html +0 -0
  248. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_contract_edit.html +0 -0
  249. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_contracts.html +0 -0
  250. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_rate_script.html +0 -0
  251. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_rate_script_add.html +0 -0
  252. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mop_rate_script_edit.html +0 -0
  253. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc.html +0 -0
  254. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfc.html +0 -0
  255. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfc_ssc.html +0 -0
  256. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfc_ssc_pc.html +0 -0
  257. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfc_ssc_pcs.html +0 -0
  258. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfc_sscs.html +0 -0
  259. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_llfcs.html +0 -0
  260. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_participant.html +0 -0
  261. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_participants.html +0 -0
  262. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_ssc.html +0 -0
  263. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtc_sscs.html +0 -0
  264. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/mtcs.html +0 -0
  265. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/ods_monthly_duration.html +0 -0
  266. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/participant.html +0 -0
  267. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/participants.html +0 -0
  268. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/parties.html +0 -0
  269. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/party.html +0 -0
  270. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/pc.html +0 -0
  271. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/pcs.html +0 -0
  272. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/read_add.html +0 -0
  273. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/read_edit.html +0 -0
  274. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/read_type.html +0 -0
  275. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/read_types.html +0 -0
  276. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/scenario.html +0 -0
  277. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/scenario_add.html +0 -0
  278. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/scenario_edit.html +0 -0
  279. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/scenarios.html +0 -0
  280. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_hh_data.html +0 -0
  281. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_site_snags.html +0 -0
  282. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_snag.html +0 -0
  283. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_snag_edit.html +0 -0
  284. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_snags.html +0 -0
  285. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/site_snags_edit.html +0 -0
  286. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/source.html +0 -0
  287. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/sources.html +0 -0
  288. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/ssc.html +0 -0
  289. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/sscs.html +0 -0
  290. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch.html +0 -0
  291. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_add.html +0 -0
  292. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_edit.html +0 -0
  293. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_file.html +0 -0
  294. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_file_add.html +0 -0
  295. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_file_edit.html +0 -0
  296. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batch_upload_file.html +0 -0
  297. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_batches.html +0 -0
  298. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_bill.html +0 -0
  299. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_bill_add.html +0 -0
  300. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_bill_edit.html +0 -0
  301. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_bill_import.html +0 -0
  302. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_bill_imports.html +0 -0
  303. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_contract.html +0 -0
  304. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_contract_add.html +0 -0
  305. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_contract_edit.html +0 -0
  306. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_contracts.html +0 -0
  307. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_rate_script.html +0 -0
  308. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_rate_script_add.html +0 -0
  309. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supplier_rate_script_edit.html +0 -0
  310. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply.html +0 -0
  311. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_edit.html +0 -0
  312. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_hh_data.html +0 -0
  313. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_months.html +0 -0
  314. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_note_add.html +0 -0
  315. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_note_edit.html +0 -0
  316. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_notes.html +0 -0
  317. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_post.html +0 -0
  318. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/supply_virtual_bill.html +0 -0
  319. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/tpr.html +0 -0
  320. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/e/tprs.html +0 -0
  321. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/edi_viewer.html +0 -0
  322. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/batch.html +0 -0
  323. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/batch_add.html +0 -0
  324. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/batch_edit.html +0 -0
  325. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/batches.html +0 -0
  326. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/bill.html +0 -0
  327. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/bill_add.html +0 -0
  328. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/bill_edit.html +0 -0
  329. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/bill_import.html +0 -0
  330. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/bill_imports.html +0 -0
  331. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/dn.html +0 -0
  332. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/dns.html +0 -0
  333. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/era_edit.html +0 -0
  334. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/exit_zone.html +0 -0
  335. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_auto_importer.html +0 -0
  336. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_contract.html +0 -0
  337. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_contract_add.html +0 -0
  338. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_contract_edit.html +0 -0
  339. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_contracts.html +0 -0
  340. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_rate_script.html +0 -0
  341. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_rate_script_add.html +0 -0
  342. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/industry_rate_script_edit.html +0 -0
  343. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/ldz.html +0 -0
  344. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/read_add.html +0 -0
  345. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/read_edit.html +0 -0
  346. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/read_type.html +0 -0
  347. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/read_types.html +0 -0
  348. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/reading_frequencies.html +0 -0
  349. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/reading_frequency.html +0 -0
  350. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/reports.html +0 -0
  351. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_contract.html +0 -0
  352. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_contract_add.html +0 -0
  353. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_contract_edit.html +0 -0
  354. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_contracts.html +0 -0
  355. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_rate_script.html +0 -0
  356. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_rate_script_add.html +0 -0
  357. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplier_rate_script_edit.html +0 -0
  358. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supplies.html +0 -0
  359. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supply.html +0 -0
  360. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supply_edit.html +0 -0
  361. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supply_note_add.html +0 -0
  362. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supply_note_edit.html +0 -0
  363. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/supply_notes.html +0 -0
  364. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/unit.html +0 -0
  365. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/g/units.html +0 -0
  366. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/general_import.html +0 -0
  367. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/home.html +0 -0
  368. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/input_date.html +0 -0
  369. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/local_report.html +0 -0
  370. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/local_reports.html +0 -0
  371. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/national_grid.html +0 -0
  372. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_auto_importer.html +0 -0
  373. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_contract.html +0 -0
  374. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_contract_edit.html +0 -0
  375. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_contracts.html +0 -0
  376. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_rate_script.html +0 -0
  377. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_rate_script_add.html +0 -0
  378. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/non_core_rate_script_edit.html +0 -0
  379. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/object_summary.html +0 -0
  380. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/rate_server.html +0 -0
  381. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run.html +0 -0
  382. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_asset_comparison.html +0 -0
  383. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_bill_check.html +0 -0
  384. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_ecoes_comparison.html +0 -0
  385. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_row.html +0 -0
  386. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_row_bill_check.html +0 -0
  387. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_run_supply_contacts.html +0 -0
  388. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/report_runs.html +0 -0
  389. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site.html +0 -0
  390. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_add.html +0 -0
  391. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_edit.html +0 -0
  392. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_gen_graph.html +0 -0
  393. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_hh_data.html +0 -0
  394. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_months.html +0 -0
  395. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/site_used_graph.html +0 -0
  396. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/sites.html +0 -0
  397. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/supplies.html +0 -0
  398. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/system.html +0 -0
  399. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/tester.html +0 -0
  400. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/user.html +0 -0
  401. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/user_roles.html +0 -0
  402. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/templates/users.html +0 -0
  403. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/testing.py +0 -0
  404. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/utils.py +0 -0
  405. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/chellow/views.py +0 -0
  406. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/gpl.txt +0 -0
  407. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/pyproject.toml +0 -0
  408. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/requirements.txt +0 -0
  409. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/setup.cfg +0 -0
  410. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/systemd/chellow.service +0 -0
  411. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/systemd/chellow_upgrader.service +0 -0
  412. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/systemd/chellow_upgrader.timer +0 -0
  413. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/conftest.py +0 -0
  414. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_activity_mop_stark_xlsx.py +0 -0
  415. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_annual_mop_stark_xlsx.py +0 -0
  416. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_csv.py +0 -0
  417. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_engie_edi.py +0 -0
  418. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_engie_xls.py +0 -0
  419. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_engie_xlsx.py +0 -0
  420. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_haven_csv.py +0 -0
  421. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi.py +0 -0
  422. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi_tprs.py +0 -0
  423. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills.nonsettlement.dc.stark.xlsx +0 -0
  424. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills_old.nonsettlement.dc.stark.xlsx +0 -0
  425. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/test_bill_parser_nonsettlement_dc_stark_xlsx.py +0 -0
  426. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/bills.settlement.dc.stark.xlsx +0 -0
  427. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/test_bill_parser_settlement_dc_stark_xlsx.py +0 -0
  428. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_sse_edi.py +0 -0
  429. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/bill_parsers/test_bill_parser_sww_xls.py +0 -0
  430. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/system_price/prices.xls +0 -0
  431. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/system_price/test_system_price.py +0 -0
  432. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_aahedc.py +0 -0
  433. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_bill_importer.py +0 -0
  434. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_bsuos.py +0 -0
  435. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_dno_rate_parser.py +0 -0
  436. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_laf_importer.py +0 -0
  437. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_mdd_importer.py +0 -0
  438. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/e/test_rcrc_importer.py +0 -0
  439. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/bill_parsers/test_g_bill_parser_engie_edi.py +0 -0
  440. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/test_dn_rate_parser.py +0 -0
  441. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/test_engine.py +0 -0
  442. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/test_g_cv.py +0 -0
  443. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/test_gas_views.py +0 -0
  444. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/gas/test_transportation.py +0 -0
  445. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_g_monthly_duration.py +0 -0
  446. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_g_supplies_snapshot.py +0 -0
  447. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_g_supply_virtual_bill.py +0 -0
  448. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_g_virtual_bills.py +0 -0
  449. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_g_virtual_bills_hh.py +0 -0
  450. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_181.py +0 -0
  451. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_183.py +0 -0
  452. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_231.py +0 -0
  453. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_233.py +0 -0
  454. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_429.py +0 -0
  455. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_81.py +0 -0
  456. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_asset_comparison.py +0 -0
  457. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_batches.py +0 -0
  458. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_csv_llfcs.py +0 -0
  459. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_csv_site_hh_data.py +0 -0
  460. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_csv_site_snags.py +0 -0
  461. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_dno_vl_parser.py +0 -0
  462. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_sscs.py +0 -0
  463. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/reports/test_report_supply_contacts.py +0 -0
  464. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_chellow.py +0 -0
  465. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_dloads.py +0 -0
  466. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_edi_viewer.py +0 -0
  467. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_rate_server.py +0 -0
  468. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_testing.py +0 -0
  469. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/test_utils.py +0 -0
  470. {chellow-1714484335.0.0 → chellow-1715252645.0.0}/test/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: chellow
3
- Version: 1714484335.0.0
3
+ Version: 1715252645.0.0
4
4
  Summary: Web Application for checking UK energy bills.
5
5
  Project-URL: Homepage, https://github.com/WessexWater/chellow
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -0,0 +1 @@
1
+ __version__ = "1715252645.0.0"
@@ -552,6 +552,7 @@ class DataSource:
552
552
  self.era_map_mop_contracts = self.era_map.get("mop_contracts", {})
553
553
  self.era_map_cops = self.era_map.get("cops", {})
554
554
  self.era_map_comms = self.era_map.get("comms", {})
555
+ self.era_map_dtc_meter_types = self.era_map.get("dtc_meter_types", {})
555
556
  self.era_map_mpan_cores = self.era_map.get("mpan_cores", {})
556
557
  self.era_map_dnos = self.era_map.get("dnos", {})
557
558
  self.era_map_gsp_groups = self.era_map.get("gsp_groups", {})
@@ -672,9 +673,16 @@ class SiteSource(DataSource):
672
673
  else:
673
674
  self.sc = era.imp_sc
674
675
 
675
- self.properties = self.era_map.get("properties_overwritten", {})
676
- self.properties.update(era.props)
677
- self.properties.update(self.era_map.get("properties_overwrite", {}))
676
+ if era.dtc_meter_type is None:
677
+ era_dtc_meter_type_code = None
678
+ else:
679
+ era_dtc_meter_type_code = era.dtc_meter_type.code
680
+ if era_dtc_meter_type_code in self.era_map_dtc_meter_types:
681
+ self.dtc_meter_type_code = self.era_map_dtc_meter_types[
682
+ era_dtc_meter_type_code
683
+ ]
684
+ else:
685
+ self.dtc_meter_type_code = era_dtc_meter_type_code
678
686
 
679
687
  self.is_import = True
680
688
  self.voltage_level_code = self.llfc.voltage_level.code
@@ -1051,9 +1059,16 @@ class SupplySource(DataSource):
1051
1059
  else:
1052
1060
  self.comm_code = era.comm.code
1053
1061
 
1054
- self.properties = dict(self.era_map.get("properties_overwritten", {}))
1055
- self.properties.update(era.props)
1056
- self.properties.update(self.era_map.get("properties_overwrite", {}))
1062
+ if era.dtc_meter_type is None:
1063
+ era_dtc_meter_type_code = None
1064
+ else:
1065
+ era_dtc_meter_type_code = era.dtc_meter_type.code
1066
+ if era_dtc_meter_type_code in self.era_map_dtc_meter_types:
1067
+ self.dtc_meter_type_code = self.era_map_dtc_meter_types[
1068
+ era_dtc_meter_type_code
1069
+ ]
1070
+ else:
1071
+ self.dtc_meter_type_code = era_dtc_meter_type_code
1057
1072
 
1058
1073
  self.id = self.mpan_core
1059
1074
  self.msn = era.msn
@@ -1632,18 +1647,6 @@ def _read_generator(sess, supply, start, is_forwards, is_prev):
1632
1647
  if bill.id != r.bill.id:
1633
1648
  continue
1634
1649
 
1635
- era = supply.find_era_at(sess, dt)
1636
- if era is None:
1637
- era_coeff = None
1638
- else:
1639
- era_properties = PropDict(
1640
- chellow.utils.url_root + "eras/" + str(era.id), loads(era.properties)
1641
- )
1642
- try:
1643
- era_coeff = float(era_properties["coefficient"])
1644
- except KeyError:
1645
- era_coeff = None
1646
-
1647
1650
  reads = {}
1648
1651
  coeffs = {}
1649
1652
  for coeff, value, tpr_code in sess.query(
@@ -1656,7 +1659,7 @@ def _read_generator(sess, supply, start, is_forwards, is_prev):
1656
1659
  r_dt == dt,
1657
1660
  ):
1658
1661
  reads[tpr_code] = value
1659
- coeffs[tpr_code] = coeff if era_coeff is None else era_coeff
1662
+ coeffs[tpr_code] = coeff
1660
1663
 
1661
1664
  yield {
1662
1665
  "date": dt,
@@ -42,6 +42,7 @@ from chellow.models import (
42
42
  Comm,
43
43
  Contract,
44
44
  Cop,
45
+ DtcMeterType,
45
46
  EnergisationStatus,
46
47
  Era,
47
48
  GeneratorType,
@@ -49,7 +50,6 @@ from chellow.models import (
49
50
  HhDatum,
50
51
  Laf,
51
52
  Llfc,
52
- METER_TYPES,
53
53
  MarketRole,
54
54
  MeasurementRequirement,
55
55
  MeterPaymentType,
@@ -1505,15 +1505,14 @@ def dno_get(dno_id):
1505
1505
 
1506
1506
  @e.route("/dtc_meter_types")
1507
1507
  def dtc_meter_types_get():
1508
- return render_template("dtc_meter_types.html", dtc_meter_types=METER_TYPES)
1508
+ dtc_meter_types = g.sess.scalars(select(DtcMeterType).order_by(DtcMeterType.code))
1509
+ return render_template("dtc_meter_types.html", dtc_meter_types=dtc_meter_types)
1509
1510
 
1510
1511
 
1511
- @e.route("/dtc_meter_types/<code>")
1512
- def dtc_meter_type_get(code):
1513
- desc = METER_TYPES[code]
1514
- return render_template(
1515
- "dtc_meter_type.html", dtc_meter_type_code=code, dtc_meter_type_description=desc
1516
- )
1512
+ @e.route("/dtc_meter_types/<int:dtc_meter_type_id>")
1513
+ def dtc_meter_type_get(dtc_meter_type_id):
1514
+ dtc_meter_type = DtcMeterType.get_by_id(g.sess, dtc_meter_type_id)
1515
+ return render_template("dtc_meter_type.html", dtc_meter_type=dtc_meter_type)
1517
1516
 
1518
1517
 
1519
1518
  @e.route("/duration_report")
@@ -1569,6 +1568,7 @@ def era_edit_get(era_id):
1569
1568
  cops = g.sess.query(Cop).order_by(Cop.code)
1570
1569
  comms = g.sess.query(Comm).order_by(Comm.code)
1571
1570
  gsp_groups = g.sess.query(GspGroup).order_by(GspGroup.code)
1571
+ dtc_meter_types = g.sess.scalars(select(DtcMeterType).order_by(DtcMeterType.code))
1572
1572
  mop_contracts = (
1573
1573
  g.sess.query(Contract)
1574
1574
  .join(MarketRole)
@@ -1602,6 +1602,7 @@ def era_edit_get(era_id):
1602
1602
  cops=cops,
1603
1603
  comms=comms,
1604
1604
  gsp_groups=gsp_groups,
1605
+ dtc_meter_types=dtc_meter_types,
1605
1606
  mop_contracts=mop_contracts,
1606
1607
  dc_contracts=dc_contracts,
1607
1608
  supplier_contracts=supplier_contracts,
@@ -1619,6 +1620,9 @@ def era_edit_form_get(era_id):
1619
1620
  select(EnergisationStatus).order_by(EnergisationStatus.code)
1620
1621
  )
1621
1622
  default_energisation_status = EnergisationStatus.get_by_code(g.sess, "E")
1623
+ dtc_meter_types = g.sess.scalars(
1624
+ select(DtcMeterType).order_by(DtcMeterType.code)
1625
+ )
1622
1626
 
1623
1627
  if "start_year" in request.values:
1624
1628
  start_date = req_date("start")
@@ -1938,6 +1942,7 @@ def era_edit_form_get(era_id):
1938
1942
  start_date=start_date,
1939
1943
  imp_llfcs=imp_llfcs,
1940
1944
  exp_llfcs=exp_llfcs,
1945
+ dtc_meter_types=dtc_meter_types,
1941
1946
  )
1942
1947
  except BadRequest as e:
1943
1948
  g.sess.rollback()
@@ -1954,6 +1959,7 @@ def era_edit_form_get(era_id):
1954
1959
  sscs=sscs,
1955
1960
  mtc_participants=mtc_participants,
1956
1961
  mtc_participant=mtc_participant,
1962
+ dtc_meter_types=dtc_meter_types,
1957
1963
  )
1958
1964
 
1959
1965
 
@@ -2013,7 +2019,11 @@ def era_edit_post(era_id):
2013
2019
  energisation_status = EnergisationStatus.get_by_id(
2014
2020
  g.sess, energisation_status_id
2015
2021
  )
2016
- properties = req_zish("properties")
2022
+ dtc_meter_type_id = req_int_none("dtc_meter_type_id")
2023
+ if dtc_meter_type_id is None:
2024
+ dtc_meter_type = None
2025
+ else:
2026
+ dtc_meter_type = DtcMeterType.get_by_id(g.sess, dtc_meter_type_id)
2017
2027
 
2018
2028
  has_imp_mpan = req_bool("has_imp_mpan")
2019
2029
  has_exp_mpan = req_bool("has_exp_mpan")
@@ -2072,7 +2082,7 @@ def era_edit_post(era_id):
2072
2082
  comm,
2073
2083
  ssc_code,
2074
2084
  energisation_status,
2075
- properties,
2085
+ dtc_meter_type,
2076
2086
  imp_mpan_core,
2077
2087
  imp_llfc_code,
2078
2088
  imp_supplier_contract,
@@ -4626,7 +4636,12 @@ def site_add_e_supply_post(site_id):
4626
4636
  energisation_status = EnergisationStatus.get_by_id(
4627
4637
  g.sess, energisation_status_id
4628
4638
  )
4629
- properties = req_zish("properties")
4639
+ dtc_meter_type_id = req_int_none("dtc_meter_type_id")
4640
+ if dtc_meter_type_id is None:
4641
+ dtc_meter_type = None
4642
+ else:
4643
+ dtc_meter_type = DtcMeterType.get_by_id(g.sess, dtc_meter_type_id)
4644
+
4630
4645
  if "generator_type_id" in request.form:
4631
4646
  generator_type_id = req_int("generator_type_id")
4632
4647
  generator_type = GeneratorType.get_by_id(g.sess, generator_type_id)
@@ -4703,7 +4718,7 @@ def site_add_e_supply_post(site_id):
4703
4718
  comm,
4704
4719
  None if ssc is None else ssc.code,
4705
4720
  energisation_status,
4706
- properties,
4721
+ dtc_meter_type,
4707
4722
  imp_mpan_core,
4708
4723
  imp_llfc_code,
4709
4724
  imp_supplier_contract,
@@ -9,7 +9,7 @@ from sqlalchemy.sql.expression import false
9
9
 
10
10
  from werkzeug.exceptions import BadRequest
11
11
 
12
- from zish import ZishException, loads
12
+ from zish import loads
13
13
 
14
14
  from chellow.models import (
15
15
  Bill,
@@ -18,6 +18,7 @@ from chellow.models import (
18
18
  Comm,
19
19
  Contract,
20
20
  Cop,
21
+ DtcMeterType,
21
22
  EnergisationStatus,
22
23
  Era,
23
24
  GContract,
@@ -389,11 +390,11 @@ def general_import_era(sess, action, vals, args):
389
390
  else:
390
391
  energisation_status = EnergisationStatus.get_by_code(sess, es_code)
391
392
 
392
- properties_str = add_arg(args, "Properties", vals, 14)
393
- if properties_str == NO_CHANGE:
394
- properties = loads(existing_era.properties)
393
+ dtc_meter_type_code = add_arg(args, "DTC Meter Type", vals, 14)
394
+ if dtc_meter_type_code == NO_CHANGE:
395
+ dtc_meter_type = existing_era.dtc_meter_type
395
396
  else:
396
- properties = loads(properties_str)
397
+ dtc_meter_type = DtcMeterType.get_by_code(sess, dtc_meter_type_code)
397
398
 
398
399
  imp_mpan_core = add_arg(args, "Import MPAN Core", vals, 15)
399
400
  if imp_mpan_core == NO_CHANGE:
@@ -519,7 +520,7 @@ def general_import_era(sess, action, vals, args):
519
520
  comm,
520
521
  ssc_code,
521
522
  energisation_status,
522
- properties,
523
+ dtc_meter_type,
523
524
  imp_mpan_core,
524
525
  imp_llfc_code,
525
526
  imp_supplier_contract,
@@ -1275,11 +1276,8 @@ def general_import_supply(sess, action, vals, args):
1275
1276
  energisation_status = EnergisationStatus.get_by_code(
1276
1277
  sess, energisation_status_code
1277
1278
  )
1278
- properties_str = add_arg(args, "Properties", vals, 19)
1279
- try:
1280
- properties = loads(properties_str)
1281
- except ZishException as e:
1282
- raise BadRequest(f"Can't parse the properties field. {e}")
1279
+ dtc_meter_type_code = add_arg(args, "DTC Meter Type", vals, 19)
1280
+ dtc_meter_type = DtcMeterType.get_by_code(sess, dtc_meter_type_code)
1283
1281
  imp_mpan_core = add_arg(args, "Import MPAN Core", vals, 20)
1284
1282
  if len(imp_mpan_core) == 0:
1285
1283
  imp_mpan_core = None
@@ -1356,7 +1354,7 @@ def general_import_supply(sess, action, vals, args):
1356
1354
  comm,
1357
1355
  ssc_code,
1358
1356
  energisation_status,
1359
- properties,
1357
+ dtc_meter_type,
1360
1358
  imp_mpan_core,
1361
1359
  imp_llfc_code,
1362
1360
  imp_supplier_contract,
@@ -2452,6 +2452,38 @@ class Laf(Base, PersistentClass):
2452
2452
  self.value = value
2453
2453
 
2454
2454
 
2455
+ # J0483 in https://www.electralink.co.uk/data-catalogues/dtc-catalogue/
2456
+ class DtcMeterType(Base, PersistentClass):
2457
+ __tablename__ = "dtc_meter_type"
2458
+ id = Column(Integer, primary_key=True)
2459
+ code = Column(String, nullable=False, unique=True)
2460
+ description = Column(String, nullable=False)
2461
+ eras = relationship("Era", backref="dtc_meter_type")
2462
+
2463
+ def __init__(self, code, description):
2464
+ self.code = code
2465
+ self.description = description
2466
+
2467
+ @classmethod
2468
+ def insert(cls, sess, code, description):
2469
+ dtc_meter_type = cls(code, description)
2470
+ sess.add(dtc_meter_type)
2471
+ return dtc_meter_type
2472
+
2473
+ @staticmethod
2474
+ def find_by_code(sess, code):
2475
+ return sess.execute(
2476
+ select(DtcMeterType).where(DtcMeterType.code == code)
2477
+ ).scalar_one_or_none()
2478
+
2479
+ @classmethod
2480
+ def get_by_code(cls, sess, code):
2481
+ dtc_meter_type = cls.find_by_code(sess, code)
2482
+ if dtc_meter_type is None:
2483
+ raise Exception(f"Can't find the DTC meter type with code {code}.")
2484
+ return dtc_meter_type
2485
+
2486
+
2455
2487
  class MeterType(Base, PersistentClass):
2456
2488
  __tablename__ = "meter_type"
2457
2489
  id = Column(Integer, primary_key=True)
@@ -3234,42 +3266,6 @@ class EnergisationStatus(Base, PersistentClass):
3234
3266
  return energisation_status
3235
3267
 
3236
3268
 
3237
- METER_TYPES = {
3238
- "H": "Half Hourly",
3239
- "K": "Key",
3240
- "LAG": "Lag",
3241
- "LEAD": "Lead",
3242
- "MAIN": "Main",
3243
- "N": "Non-Half Hourly",
3244
- "NCAMR": "Non-remotely Configurable Automated Meter Reading",
3245
- "NSS": "A meter that meets the definition of an ADM but is not compliant "
3246
- "with any version of SMETS",
3247
- "RCAMR": "Remotely Configurable Automated Meter Reading without remote "
3248
- "enable/disable capability",
3249
- "RCAMY": "Remotely Configurable Automated Meter Reading with remote "
3250
- "enable/disable capability",
3251
- "S": "Smartcard Prepayment",
3252
- "S1": "A meter that is compliant with the Smart Metering Equipment "
3253
- "Technical Specifications 1 (SMETS1)",
3254
- "S2A": "A single element meter that is compliant with SMETS2",
3255
- "S2B": "A twin element meter that is compliant with SMETS2",
3256
- "S2C": "A polyphase meter that is compliant with SMETS2",
3257
- "S2AD": "A single element meter with one or more ALCS that is compliant "
3258
- "with SMETS2",
3259
- "S2BD": "A twin element meter with one or more ALCS that is compliant "
3260
- "with SMETS2",
3261
- "S2CD": "A polyphase meter with one or more ALCS that is compliant with " "SMETS2",
3262
- "S2ADE": "Single element meter with one or more ALCS and Boost Function "
3263
- "that is compliant with SMETS2",
3264
- "S2BDE": "A twin element meter with one or more ALCS and Boost Function "
3265
- "that is compliant with SMETS2",
3266
- "S2CDE": "A polyphase meter with one or more ALCS and Boost Function that "
3267
- "is compliant with SMETS2",
3268
- "SPECL": "Special",
3269
- "T": "Token",
3270
- }
3271
-
3272
-
3273
3269
  class Era(Base, PersistentClass):
3274
3270
  __tablename__ = "era"
3275
3271
  id = Column(Integer, primary_key=True)
@@ -3298,7 +3294,7 @@ class Era(Base, PersistentClass):
3298
3294
  energisation_status_id = Column(
3299
3295
  Integer, ForeignKey("energisation_status.id"), nullable=False
3300
3296
  )
3301
- properties = Column(Text, nullable=False)
3297
+ dtc_meter_type_id = Column(Integer, ForeignKey("dtc_meter_type.id"))
3302
3298
  imp_mpan_core = Column(String)
3303
3299
  imp_llfc_id = Column(Integer, ForeignKey("llfc.id"))
3304
3300
  imp_llfc = relationship("Llfc", primaryjoin="Llfc.id==Era.imp_llfc_id")
@@ -3441,7 +3437,7 @@ class Era(Base, PersistentClass):
3441
3437
  self.comm,
3442
3438
  None if self.ssc is None else self.ssc.code,
3443
3439
  self.energisation_status,
3444
- loads(self.properties),
3440
+ self.dtc_meter_type,
3445
3441
  self.imp_mpan_core,
3446
3442
  None if self.imp_llfc is None else self.imp_llfc.code,
3447
3443
  self.imp_supplier_contract,
@@ -3470,7 +3466,7 @@ class Era(Base, PersistentClass):
3470
3466
  comm,
3471
3467
  ssc_code,
3472
3468
  energisation_status,
3473
- properties,
3469
+ dtc_meter_type,
3474
3470
  imp_mpan_core,
3475
3471
  imp_llfc_code,
3476
3472
  imp_supplier_contract,
@@ -3521,22 +3517,7 @@ class Era(Base, PersistentClass):
3521
3517
  "A NHH supply must have a Standard Settlement Configuration."
3522
3518
  )
3523
3519
  self.energisation_status = energisation_status
3524
-
3525
- if isinstance(properties, dict):
3526
- try:
3527
- meter_type = properties["meter_type"]
3528
- if meter_type not in METER_TYPES:
3529
- raise BadRequest(
3530
- f"The meter type {meter_type} must be one of {METER_TYPES}."
3531
- )
3532
- except KeyError:
3533
- pass
3534
-
3535
- self.properties = dumps(properties)
3536
- else:
3537
- raise Exception(
3538
- f"The properties argument must be a dict, rather than {properties}."
3539
- )
3520
+ self.dtc_meter_type = dtc_meter_type
3540
3521
 
3541
3522
  locs = locals()
3542
3523
  voltage_level = None
@@ -3775,29 +3756,13 @@ class Era(Base, PersistentClass):
3775
3756
  sess.delete(channel)
3776
3757
  sess.flush()
3777
3758
 
3778
- @property
3779
- def props(self):
3780
- if not hasattr(self, "_props"):
3781
- self._props = loads(self.properties)
3782
- return self._props
3783
-
3784
3759
  @property
3785
3760
  def meter_category(self):
3786
3761
  if not hasattr(self, "_meter_category"):
3787
- meter_type = self.props.get("meter_type")
3788
- try:
3789
- cat = METER_CATEGORY[meter_type]
3790
- except KeyError:
3791
- if self.pc.code == "00":
3792
- cat = "hh"
3793
- elif len(self.channels) > 0:
3794
- cat = "amr"
3795
- elif self.mtc_participant.meter_type.code in ["UM", "PH"]:
3796
- cat = "unmetered"
3797
- else:
3798
- cat = "nhh"
3762
+ self._meter_category = METER_CATEGORY[
3763
+ None if self.dtc_meter_type is None else self.dtc_meter_type.code
3764
+ ]
3799
3765
 
3800
- self._meter_category = cat
3801
3766
  return self._meter_category
3802
3767
 
3803
3768
  def get_physical_site(self, sess):
@@ -3808,7 +3773,42 @@ class Era(Base, PersistentClass):
3808
3773
  )
3809
3774
 
3810
3775
 
3811
- METER_CATEGORY = {"H": "hh", "N": "nhh", "S1": "amr"}
3776
+ METER_CATEGORY = {
3777
+ None: "unmetered",
3778
+ "CHECK": "hh",
3779
+ "H": "hh",
3780
+ "K": "nhh",
3781
+ "LAG_": "hh",
3782
+ "LEAD_": "hh",
3783
+ "MAIN_": "hh",
3784
+ "N": "nhh",
3785
+ "NCAMR": "amr",
3786
+ "NSS": "amr",
3787
+ "RCAMR": "amr",
3788
+ "RCAMY": "amr",
3789
+ "S": "nhh",
3790
+ "S1": "amr",
3791
+ "S2A": "amr",
3792
+ "S2B": "amr",
3793
+ "S2C": "amr",
3794
+ "S2AD": "amr",
3795
+ "S2BD": "amr",
3796
+ "S2CDE": "amr",
3797
+ "SPECL": "nhh",
3798
+ "T": "nhh",
3799
+ "2ADF": "amr",
3800
+ "2ADEF": "amr",
3801
+ "2AEF": "amr",
3802
+ "2AF": "amr",
3803
+ "2BF": "amr",
3804
+ "2BDF": "amr",
3805
+ "2BDEF": "amr",
3806
+ "2BEF": "amr",
3807
+ "2CDEF": "amr",
3808
+ "2CF": "amr",
3809
+ "2CDF": "amr",
3810
+ "2CEF": "amr",
3811
+ }
3812
3812
 
3813
3813
 
3814
3814
  class Channel(Base, PersistentClass):
@@ -4521,7 +4521,7 @@ class Supply(Base, PersistentClass):
4521
4521
  template_era.comm,
4522
4522
  None if template_era.ssc is None else template_era.ssc.code,
4523
4523
  template_era.energisation_status,
4524
- loads(template_era.properties),
4524
+ template_era.dtc_meter_type,
4525
4525
  template_era.imp_mpan_core,
4526
4526
  imp_llfc_code,
4527
4527
  template_era.imp_supplier_contract,
@@ -6567,6 +6567,94 @@ def insert_voltage_levels(sess):
6567
6567
  VoltageLevel.insert(sess, code, desc)
6568
6568
 
6569
6569
 
6570
+ def insert_dtc_meter_types(sess):
6571
+ for code, desc in (
6572
+ ("CHECK", "Check"),
6573
+ ("H", "Half Hourly"),
6574
+ ("K", "Key"),
6575
+ ("LAG_", "Lag"),
6576
+ ("LEAD_", "Lead"),
6577
+ ("MAIN_", "Main"),
6578
+ ("N", "Non-Half Hourly"),
6579
+ ("NCAMR", "Non-remotely Configurable Automated Meter Reading"),
6580
+ (
6581
+ "NSS",
6582
+ "A meter that meets the definition of an ADM but is not compliant with "
6583
+ "any version of SMETS",
6584
+ ),
6585
+ (
6586
+ "RCAMR",
6587
+ "Remotely Configurable Automated Meter Reading without remote "
6588
+ "enable/disable capability",
6589
+ ),
6590
+ (
6591
+ "RCAMY",
6592
+ "Remotely Configurable Automated Meter Reading with remote "
6593
+ "enable/disable capability",
6594
+ ),
6595
+ ("S", "Smartcard Prepayment"),
6596
+ (
6597
+ "S1",
6598
+ "A meter that is compliant with the Smart Metering Equipment Technical "
6599
+ "Specifications 1 (SMETS1)",
6600
+ ),
6601
+ ("S2A", "A single element meter that is compliant with SMETS2"),
6602
+ ("S2B", "A twin element meter that is compliant with SMETS2"),
6603
+ ("S2C", "A polyphase meter that is compliant with SMETS2"),
6604
+ (
6605
+ "S2AD",
6606
+ "A single element meter with one or more ALCS that is compliant with "
6607
+ "SMETS2",
6608
+ ),
6609
+ (
6610
+ "S2BD",
6611
+ "A twin element meter with one or more ALCS that is compliant with "
6612
+ "SMETS2",
6613
+ ),
6614
+ (
6615
+ "S2CDE",
6616
+ "A polyphase meter with one or more ALCS and Boost Function that is "
6617
+ "compliant with SMETS2",
6618
+ ),
6619
+ ("SPECL", "Special"),
6620
+ ("T", "Token"),
6621
+ (
6622
+ "2ADF",
6623
+ "Single Element with ALCS and Auxiliary Proportional Controller (APC) "
6624
+ "that is compliant with SMETS2",
6625
+ ),
6626
+ (
6627
+ "2ADEF",
6628
+ "Single Element with ALCS, Boost Function and APC that is compliant "
6629
+ "with SMETS2",
6630
+ ),
6631
+ (
6632
+ "2AEF",
6633
+ "Single Element with Boost Function and APC that is compliant with SMETS2",
6634
+ ),
6635
+ ("2AF", "Single Element with APC that is compliant with SMETS2"),
6636
+ ("2BF", "Twin Element with APC that is compliant with SMETS2"),
6637
+ ("2BDF", "Twin Element with ALCS and APC that is compliant with SMETS2"),
6638
+ (
6639
+ "2BDEF",
6640
+ "Twin Element with ALCS, Boost Function and APC that is compliant with "
6641
+ "SMETS2",
6642
+ ),
6643
+ (
6644
+ "2BEF",
6645
+ "Twin Element with Boost Function and APC that is compliant with SMETS2",
6646
+ ),
6647
+ (
6648
+ "2CDEF",
6649
+ "Polyphase with ALCS, Boost Function and APC that is compliant with SMETS2",
6650
+ ),
6651
+ ("2CF", "Polyphase with APC that is compliant with SMETS2"),
6652
+ ("2CDF", "Polyphase with ALCS and APC that is compliant with SMETS2"),
6653
+ ("2CEF", "Polyphase with Boost Function and APC that is compliant with SMETS2"),
6654
+ ):
6655
+ DtcMeterType.insert(sess, code, desc)
6656
+
6657
+
6570
6658
  def db_init(sess, root_path):
6571
6659
  db_name = config["PGDATABASE"]
6572
6660
  log_message("Initializing database.")
@@ -6658,6 +6746,9 @@ def db_init(sess, root_path):
6658
6746
  ):
6659
6747
  Contract.insert_non_core(sess, name, "", properties, last_month_start, None, {})
6660
6748
 
6749
+ insert_dtc_meter_types(sess)
6750
+ sess.commit()
6751
+
6661
6752
  insert_g_read_types(sess)
6662
6753
  sess.commit()
6663
6754
 
@@ -7295,6 +7386,53 @@ def db_upgrade_45_to_46(sess, root_path):
7295
7386
  )
7296
7387
 
7297
7388
 
7389
+ def db_upgrade_46_to_47(sess, root_path):
7390
+ insert_dtc_meter_types(sess)
7391
+ sess.flush()
7392
+
7393
+ sess.execute(
7394
+ text(
7395
+ "alter table era add dtc_meter_type_id integer references dtc_meter_type "
7396
+ "(id);"
7397
+ )
7398
+ )
7399
+ for era_id, pc_id, era_properties, mtc_participant_id in sess.execute(
7400
+ text("select era.id, era.pc_id, era.properties, mtc_participant_id from era")
7401
+ ):
7402
+ dtc_meter_type_id = None
7403
+ props = loads(era_properties)
7404
+ if "meter_type" in props:
7405
+ mt_code = props["meter_type"]
7406
+ dtc_meter_type = DtcMeterType.find_by_code(sess, mt_code)
7407
+ dtc_meter_type_id = dtc_meter_type.id
7408
+
7409
+ if dtc_meter_type_id is None:
7410
+ mtc_participant = MtcParticipant.get_by_id(sess, mtc_participant_id)
7411
+ if mtc_participant.meter_type.code not in ["UM", "PH"]:
7412
+ pc = Pc.get_by_id(sess, pc_id)
7413
+ if pc.code == "00":
7414
+ dtc_meter_type_code = "H"
7415
+ else:
7416
+ channels = sess.scalars(
7417
+ select(Channel).where(Channel.era_id == era_id)
7418
+ ).all()
7419
+ if len(channels) > 0:
7420
+ dtc_meter_type_code = "RCAMR"
7421
+ else:
7422
+ dtc_meter_type_code = "N"
7423
+ dtc_meter_type = DtcMeterType.get_by_code(sess, dtc_meter_type_code)
7424
+ dtc_meter_type_id = dtc_meter_type.id
7425
+
7426
+ sess.execute(
7427
+ text(
7428
+ "UPDATE era SET dtc_meter_type_id = :dtc_meter_type_id "
7429
+ "where id = :era_id"
7430
+ ),
7431
+ params={"dtc_meter_type_id": dtc_meter_type_id, "era_id": era_id},
7432
+ )
7433
+ sess.execute(text("alter table era drop column properties;"))
7434
+
7435
+
7298
7436
  upgrade_funcs = [None] * 18
7299
7437
  upgrade_funcs.extend(
7300
7438
  [
@@ -7326,6 +7464,7 @@ upgrade_funcs.extend(
7326
7464
  db_upgrade_43_to_44,
7327
7465
  db_upgrade_44_to_45,
7328
7466
  db_upgrade_45_to_46,
7467
+ db_upgrade_46_to_47,
7329
7468
  ]
7330
7469
  )
7331
7470
 
@@ -375,7 +375,7 @@ limit 3
375
375
  latest_mop_bill_date,
376
376
  supply_start_date,
377
377
  supply_finish_date,
378
- era.properties,
378
+ None if era.dtc_meter_type is None else era.dtc_meter_type.code,
379
379
  imp_tnuos_band,
380
380
  ]
381
381
  + channel_values
@@ -447,7 +447,7 @@ def _process(sess, f, date, supply_id, mpan_cores):
447
447
  "Latest MOP Bill Date",
448
448
  "Supply Start Date",
449
449
  "Supply Finish Date",
450
- "Properties",
450
+ "DTC Meter Type",
451
451
  "tnuos_band",
452
452
  "Import ACTIVE?",
453
453
  "Import REACTIVE_IMPORT?",