diff --git a/docs/logical_data_model.encoded b/docs/logical_data_model.encoded index c4d89be2f8..faa0772381 100644 --- a/docs/logical_data_model.encoded +++ b/docs/logical_data_model.encoded @@ -1 +1 @@ -xLt_RzqsalzTVuNW_Q5jyBhOjjS3pjWxhECuQN29OzXE5zkYC6Y9Ve-DHBubAQTkh__xWQI-a1GbaPAUaxJyoNuKDJFwS4WEPyZXFnW7b5TbaQJfPocu9oXFzvJS5h1awNl4Tod0smBcQKR9UvRUGSYJD6Nl4Du32igqG1ZoXprC2UKxOZpA2i1O-bkIfcdwbD0SqbDI49h-vPjl_lFal_wcbL_lKFOEGyRIhvCq_LsASYhUXYn9Qped6KVtY3zSmWpj4SIS_PQaJrAKfySfmXnk8KsFqxzl8OOKS9Z_Jv9kAS3yfLdXykpvsUNP-UdPLNhqGZndHtz5UP8IleFq37F47qRUUDFMGh1-yKaAMidsX8xnEp4gjkzd50g1JtXwd79KGiP1kLVOYv_fhmJ3z3Z5vFtdNuZwrJxth_zxajZu2UOd-pqbzv1EWxZy-oe6wSXRRncaZuD5ciC2JjLEKaouU8V3NtYICWvunTBZ5EAg74Bpb1G5k2KKSFBdGdG0Z-UeW8-1mnqguCXRKemG77o_V-YxNn1GF4Umo2yXsnFCPe0WI7W38Igt7xWbeBY6vRu074eXBYWfzwFZd_kDmq2MqXgJkclz-DCOYfUGaOfcZmeWhNcElDsATHY8577P5CsGes0I_ycVDoDGtHYl_vQa69GATrcUI4vtL1JM9Fsf_Vt_llnoh9c6MtAw1Gb5MuH1CT5oHbij7Jcs0RpMRUEi80nULMmFSNvAiEWAxMIZFxk4W17SJ3mfnFap8ESbmIH94PDV1ek7innnA3xbbf020l7A7IYOh7F9ETY3beXGY6vcaotNFcidkdj0insWdt_zxRTVQ3hJl3VGQT_S_WobGAU80uu83k-vBGczOMG3r2HRqSDdjP9Wn0b5U7i9xo25E8FYMtzc1D-kDUjr492ApXdxdG2CwdFxHgUialS8WLgu3saUj5BFinFMWEbZinnQ2UTFV6l0yWbEWNtaUlEWFWFoGlpXu8AIUvJ3V60gdABgc0_xhqmqzJNPe-p3j3CNh4VULw9za0xWRo_u0D7_zAMM0vd5zR3hMa3V23UA8SzNiqsDzWjFbT3VGGexysBGKc3LNW1rBPn13IdPtrgUMhURi2RcZuBX3Ve9Zdd3GztPwQl_FMqVlsKmJrAGvqYOJw0u9rnur3Ab2yBJWLqljEEbUspq7n8dHiBfrYq0usyLXayV_3mU8RuH2hU8uD665nKUgHS_IOL3JjcvdJXV9vg6rwxFke-P_SzgvhRN0UNgcroNW2AhX2SWlp9SNessT2E7087GIr9q_Jo71Rg7zE4rv3kIzqJBAzeOy3dCK0cApx_PVFM5Irqxxq1_oLCAfP5LQhkz07XRWQsDXNYvW5kGAPKnPN7glCOLL-Kjf6_kBW3bA4DxuIBMboDxi8K28LYB8KgCchOaUqgs59IYpLoFQJFuzX_ykuACIoMmHbhXiZUWOTLjYPZG7Qlnv0FEeOaa1tGB-GNPYmON2kvWBqq4vmCE7FeddjmZoYjGFAkLmQMbxNYlkqo5AeMFz3e5xr7VyDIsmm0PNGn8yGvh2-bYIKMPHAC4UtPDHbPv5i56_djGeFpvA6BVrrNcZdgrby7KsIUY7-p15d3u1h-6T0iDZmMd5JoGFry3kImhZ3Afyg_8rdVrcLdlZIwkpQeVqNgp9vh7bzDcmXcT8fjutA6Y4w9U3ZW8zTVet-xda9diL8jS9uRtxKcw5vCzu-mDVhil271wy0xR8Sxk8UPgNBn01U7dGDaFfn1pI6KxUIW9jAYCDBtDi8KI6vn7A9WYFaf0p9Jjt3suXLfwGc0NgS6syHkez1bHirh4vEpzuQTlBo_Fpgzlhb--FhkwFdbzuUf_v3qs4NURqm7GEDZs3RuzoUmFQn7p7iuzXnmnP5-XNw7vDU_WWwFv6vU4a650Gyn0Sl0G9Y8IeM7cp382HYUk0NiX953ogGNw2uJVFGNPkrQ_3BI30xaXK7suO2t19ys2y5BtwiWdLidYm6veA3S4maFwRTmWwVEo2LReZEtbyraQt9qAvpe3kABm2fMe01JnXnUKL7k_A6wu_bji9bwrQX_85GT_oOegX_dBktF2J_8IOKSZ_pu2rZHGTw6nxdbM-BgugC7zEy1UOhc210CXvvu7om9BJeAdEu2t7kD1o7ooTa1__jnZ-yimV7_bzfYJ8XzuqZg558aXQr4-aEw9lZV6mDqrSNZswEPLpwafVAYbkUWGffMrbo9gYoKpaE2zrm9Knhw1E_7vHe1YXt37XkmRPrZZ3AnrlIwLxZudhbrChu7XmEWIcw5FD6fs6uMRgWshqCb_BXwVH1372SpKnAxFvXCljxDwhvwhQQQRv13XaROU8hYD5ZHBeXrWExtJrvAUcuuJlVWroT4TMgqHFTSD8YfLHmqczC7bkySveFq0g9-LDR-FAD_M1Q0Gyn3h8sGJ_STaODUIV8-07gNoQDt-Jhldb9HN9Q2SxI3arnnS503hAwNnZNQKkyFpIpVWIUJFPRZg5SBlrZqFuT-KsqwCu0awp5yfvRk4-m9aiAp3e8kTkawYAxbu3-cyjUNsR7xhIwUqOGWOgihp5q4gfTv2UFjYTKsSRw_JxXFrVcy2tKStV7eyt3hEKC6c9ovpKGECAr0yht2EyFOrmNpN8vdbo3L0rshiUjGDhSD3WjHIwFQYocTNUvWXK236pqg0YgbAJa88orYoj48c9T8hMrkbwjZ-b4YzQawXzB3-Y5qXzXwSajpvlcC2qVIOLFiFuaAUykuO_fm_a1DPEi_SeuTZzHCq98PXUg1rdf-_ov_zZDbJs5uNrMs1CcE7uWvGcFyJoK7BFBZtKiQKdW4EVED5AWhrV3o0_xAj50ow4HXAZzFFNZuxExz--VpbsRFFZe-FvEBFalf6lNFaZvBSVu3lI1TACzPQ56Q4vgUaKbkOwYeisy4Iz1LR-rWFRwV_nWU5z2JAuPi7o7ii8kmdN2mTzUrSwN7wjzhVb476XYluDzBS1kBxvwDjPA6_Ph_BuHt2IFTooHWlnE2sW0Fx4kxu_WfoZl3MUCVgmaA3ycg6vqwepMl0thKlxW7lG_4Qe09ISpFBhOZ4SlVcCMtcjdUJpOsMjtCB53E_N6VOs-AUf3-JMyTEn2TYTvvmpIqsrYXaLS7R3OcioeGsQoEYZXZc40ESGH_OE4NRBQJjxjksbjuhBPfjxmGSRWbzq22ViTj7EdnqZwt_l72bOBYh2YSIxOamcMdWgYfBG17qdggD5QzhhjPMvaT_FTBUELABWNi4tx_CtGHUQyVLHBs6IlFMKT048_qCfq6rt_f6XJpFF0B6A27b6xe56FrgRmR-TlCVtlOMB8dQZtEbpXlqo1WJ6yACqoeRVuFA4Q3PjZfjWKk4dWMjrhi6VOxaaihRBhnJzQSrfIRSg4hxtb6hiX1EKtcXAXfgAzuxwcR1aGcw9usARpNKclUFmlRXI4frsAQPHYnNySUWuuJ1wULjHYY5KX-VGP2_GXYku91M2kp1lNKvwaU05shoTuY9trwsu79L3bT19T_3Y2O-ubXyPyZKilmuLDXFsNB88IqHDeza6_qH0oeEVDntckQ8ygweV7hZhcWNztNjK9xjyU_oCaeEqJ5cBjm_5KrUHGFNLZfxa7mqbRkg8vEFPvGqiL0lfMt4qnIrVlaJCuOVKJV_SCFYGSV3E10kQfj77JVYCYGkGnmhrXL7ENl5VFWnJYqlwi_nzaCjNjH_OjuiLUyQbV23p_HF7u9rewatAVzZ3DnQQwpOSInTUAn-yyUnTVJlMTlKwM4LBPtWbl4xERruG5orLSMPX7fxGKWAlK-fQUrzcvP7IbDNKl6Cw1iqLKfapa6sAqsO0aC3gW4D6p50u_g9FHmwQAo3rntfUelnmuzr8Kw7LTq5Y8lWjfLdSa4l-VWM0dRIJBzUjArGBYAvi_HNF_VKDlQyh08VMqQ0yErHbc1BzoaFVESXzrPrdm9_uLSSxaDEy-3wdR6cgwjyMgTuUc3qJ_0GxZh1C_6YFBtJgsCtmMDanFFMAJrHllfvFMUhHaRAlHXUd3EVbbNtyRUkpals-CVPmZhZNEF7ScZisZenQfIlV6pCvq1O7rE_qrv-vxJqqrrpygAkSPvqmHKgeRtWqCV7jDFSytAepZvzTeSeuwVrWEXJzoM-4ASBvExLwThdX5-9HOQV7FMtUUc_fyoYghV8ehAtnAAohy23H_A6pk1fOqdNaNLDNcabvf57Rru6zWknPqDcYFHpNuGDuYmZenFibNZ-4LzVSw4Ew5n0oWZ6i5XghDlqZEJJq4oo4_g5lOCYzGPsmR2NaKibQLssknZUtQdnVjBz0PsddzJ0ur9csRzT3_OKtg5V72ccxrp5JVTqdtkgsy9rWkyGfvld6sks0mkxaMcpoVhaXHKb_uA0XXuM6xbbxKCDPMC72-bePkGA8gjCdE3uxFXO_0QPIB5x3-W3mbiTWAtdM8d7qlXTgYI-PvGQYvQXGmhhBcPBTpPcieTjEcOxxOoKzYd97zhjzqrsBsUXynnYHT487luU1F_ZFIL0U4ueZXRjMz9wKDc9r3Ursbv23ipqXqs9dyEkH2LqggNRgX3fVBnlXWZ9NFmntFdWc-dPbpjYtPbQSrPTCE9uc-fLKJXdBziuwBvVsK47i1Lpo3AAzivUlR8bUGMb6Qdb9lKzIHbo5f3rk8oPbxtA1zRZFiFwR0d2sowEz6V7n3jxy9oKmMjcivsTehRxU5HUPOH2cQOLPBjLHpdX1lhAibi9ABwsi-_MDj2DRQqn8LdlxeNWzaKSdXJGx-Zf8S8lFjaZdgGbP4nT2T76ubGIt-RaRXC9RC_jTXzs8wesmNUFN0npyz9PkO3l0KL0ceFcMNLlCo0m27J8IN5uxdlRv2fSsQxvy94-mQ8-3Ftc7bAAShXs7waw5XElDAUo3vK7z1uK5Un72dJMFXehN-ghOi2HTT0TURuTpimTtfBVjpaVrNhW0ursdBo3BbkEkvOIlitNvcuDm6CQW1qfuUM1hrBQCNbJ3nqOmiJoxHNPgcNW-fuPjr-h0DikI9mUfoUNboV_-l6dPbwHuDt8MaSY3u3uX9EAxmYL7cD7fe3c8rtN5ZcTGJk2uRapuPCHijOa4V5fWEzbWWh4ECfOisVyHjWKDwMuckM6rCEO6Cz57gYR4j1tieAO8sN2uqIxK_L6DhboAYJflojG8Fvm0nYhgDXBSfC3jhibWEPDU10KYflsW5E0iA2bjbmnxLaJGDS_GqRBPK6ZgysrDKjzjqkllq5CcQlkwDCZPeZxuUHPlIhq0ALRGXBQyqdySF8S5HnIlwXxLMBdibZkk1gzzEA7arSdzbrd7bupOSxVQ3LaMLdS0DOhkdte5NL0JamvekulaarLATMGHVgEXmv3omZ7yFqD9Uzlp9K7AN97QRtCks5ewsY9L-QcZJeEIYDCep0DR1w9KFMXihmv4Q8-H6FNWqIyt7WvFFyHAZTK4Q9HYBeTWVKMvuYN9rxsDNWHhH6quZpeZrKStCFmiZsx4QmHi29EepZ5lkS5KuJ7WcVa1ku8a0sGTTL414W1D7gXTWJ91L84g0TGN9KuO7dsx9K797d0X-NMXubxxG7ERpZOzdpreh84iVsqmMzMHuTkK0xbqP_-TbFrt1ctL1dcRvp1hGbyWYulZohbWYm2P04K9p07A2CtZqU06e1YD60AeRXC7G5d_CRjYDC0JX4Z5qRkExOZG0r0uvTXHvnidCQIG4IqRBJYFES1KWJ70Ku4nGPby8BZY4-Bp_1zo14a5qWH81T04PKUAiEtvKQ4MeIYyWn24r6nK1cyUZV2qy4JeHc49i9YmH9o_UsV3fcGQsx_TF1CtdqRSJ9n6hYrDSBaXCbn9MX4QWGfz_sL4R9foAAAJU8LjSe79ST5516f8QJYM1M4LHoa9e6A20qYvBxVCA9aeZHqUMB4oOLJL2OFaE945mXLx7TJE4M01W4QkDSkmkI6AK9aGHJFVmH25E6nuHc-vIu2f0CKWR60cRgZBg9ae1HtWKuX596naN7VjHN14U0ux_QAq4Xe1Y_sYlXe-4IziN29wMU7aTd6WSO5Irmqk85nt6SLaMcGYQ1OeDWtP4LK92fJTsv5cDmmJLpB5M5pmnOXiY4QkTyh8gGGwbyF5f4Ho4JhnuMAupgm24m3pF1jOX4Z2wE8ZGERuJlC8aODHX4K2vJ-1LeH5u6B-nwjY8t2nhuPx4-DI_9PUi8OoP2wboH94hbEJu--Eag__FB7lzmM87ktsHS0uGtVeUmTXepzzzS_VVcbhA8T0HPojRysyfheH9q-yoLcPqz9ZzEjADgeFzsJ91cvAylY9YxbWxd5xhSqFS97QI-XU7eiheCpopOf66IMEAx22U0_TKTJUcpn5bKsZZBpjTMbQbt5tWArRoH3LoJC5gX_cKvFghRAPkX1--uXvLDfekT8fzuye6nDZmsLJBvtGBc6DMrQjiVGERKodY6SUj6IR9v0JPol9uNElAcq2aVZsaONs-RPQjpC4NtiGtkrLvF1tKSsAUsUhiPBZT5JtobhhSPJwnTJZBkggt4Vxkasyw5-7SAxtGYO7gTi3pC42iHuMoeQjUunMfafHjAxNMEcfQ7UFQvlzRMVR6JvSqhAtZkB9EWbnHRMbLMsCQmVmM4Porv6AcdHMOKhCtNlR4oFwwp-rWCdS-lwYw1cTjml8erAitpJAr73IMCoh6XxPFA_ILCZd7F7ebDOnQfHRF4hwQNm3s3XSME2M2E9MXlrPxpo8c4SCISncEYbh9R2kOOAdtZkv49AdswMqUrPVpe3oyGBvJIa-Og5Mzj3UGp4bBjMa3_hfUTouiv8h63cAcyMl8wKtu63j2kpUZrMMuyshaAM36MCNdTXkfT46-tfrfuhS9_Wv-8KIjufeGAvURIfMQx3gB-LlCTkErfz5IbqeskOUMTmBU7Py60cyMIvEwAXl4a95JutK0ov8QHX1nX3Mmnp1w5WOOQig4tFbff7kwVsYhYfzA54xLPNmfgjlE8evHoMviFT6qx5fDAs-U086Cn6luIW_HAcbywYAySkG26kVMNP3XNvF3IC1LjhpjRzAvXQVuE8cDj4oHiCD-g_w_T4KPT5iXk_9qdFJ-lFT2YFcx0Y1nxrlR-hy3VJBnZypKS3_Eqira7h8jVxdHrjFMeCQgjuTJ5QVxjUjkaLTRmNkwzgxxx3QnLClns0we21wc31L1oGKFKpVw4egvzDbfED-TX4pgogFviZMPkxk5b4grzr0uLJj0-QA1lBA5fActKqvyjPuHpU8GppJZqBvRlVeTPB0r_qdYJXrlUWlsBJTrlCfM-suKPloaIFflcJjR8KMt4uP3wjUOJJDsblD1uiiPANXep7rfl7AQTekuKKvayVDjsFn2CFuQnfmCx_Q4m4lVnXc_x3zit74R7D8kWIrAhIc2zoqd9dsLiYKAl9Tnr11q2rRg_FVxJDmbjhiJnjeei17L8FDpfS1v32oNsAwqegsce46-inGmgnaX1Z7SIlPwmao51BE5dhETDMQO9jHz2d3HRp3x2dInVNn9dnQ-sbHKTwCxZWM56IqP7ABSl8GBLKciacicKnNrXT4fS8REEKAXb9TRP00kTOOJuQwAzhIZ60WvElaNHghTcAQKGt8tFNgdAufqjjdjIbIgnCGAi7aR1HwXTDcY-JdmpuW3ox0FIvnRNnGbZraow47XvsrpsGk2xRjFzrdaY7btn5Tpkn2oTzxela6NJNzUH8rjoYP73hNEJJMvH6dENQ_ezPeau7vJVk-FnIVfttLVj-wOBLFqbFrRBKfqLQOWzEpzPSPcRxwamwrKfwFfr5xg1c9BZekONKo66N9wtRPmqlrARdZaeqeET7ffLFhoRK3qspULm68XKQ8sUaOXwlniRNgIk3VXOzToIWBjJtHYLrAetPWvGIMj2mHo4sWxOPdUmewuFwBBeTlZN11jnGIivfgA5A-lDDE0Sjav96Uj-Lpg3Ps2EL-Bj9TwI4YaZIpUDhRIUdzV_ZcyYNytNkC1vYxjXIl5m27yRB-0rZkrsCvj0k0fD7VmV175ukgx7ZqxSQrT6DPSS-A57xbAmdmRIxv34jKTeM1LDhZnpNlR4-a28e9YhloEoXWedNpP72jSDjnTrPpUvUVRFMwZm7DsqvPN3MJkhsM--m01V_J1qD2EPgg5hDGjErO7ejBMNTNIkAZH5OKzNFCGSgidr4NBQABDf8vRQV9seUMkF0WY3VR5LhonVIjvSoEWzp2RECZzmWN_6TsAnS0CRVxdDnH564nsXjEeKoS9d43Ok-FHnAtS_Xek3oSRE4ydVjqLBS-dkqvj2sTmfrj8qduRHTuUUQU3_w74fzh1Nm2gWFBl4LYu7LVIWNSmvJfFKfB9HUbmD6R9MdK9q9O6rfC45xnjvqy_OiMev1ioExUCHqPLveETnR3vBckFt2So_tDPd-sOjPBDfNcedh-vP-CtSr9HFdXl5H-hl6at3kuDdCl8rznypF63Xywq_QOVCodtDWkf_CcvjzJ8JrJWEimaO_370W5bwuhSlIjBrOo9cvPSWj8MZjpBQTC0i86u7dLKaFEDB_YVYELCq-RxEyLxYgF8OBL_V6edKPUIcryrZWN7t8VCuS1kX4xGQLzilgv0S3BEkoCTnXrpjAgkskPsDkpCSzUyryxZQM788Fi1kfENsySbG8r_77kQDL8LOFzMv6RngZn-nOktANlVng-2IMgEbStBjFQCtjByp_yDLS5WEda9OE8gQJV2KpPQkVQvZNmUozs_C7czfh7zp4jZYgONk1zxdqy71SVIdyZMlKZ9hE5LIBAxOn1FzkhBoJjPzHcYvR5OuWnJ8hY-f-sRdVfeWqBjIvLDIt9Sa_8CwhiaZ-7m00 \ No newline at end of file +xLt_RzqsalzTVuNW_Q5jyBhOjjS3pjWxhECuQN29OzXE5zkYC6Y9Ve-DHBubAQTkh__xWQI-a1GbaPAUaxJyoNuKDJFwS4WEPyZXFnW7b5TbaQJfPocu9oXFzvJS5h1awNl4Tod0smBcQKR9UvRUGSYJD6Nl4Du32igqG1ZoXprC2UKxOZpA2i1O-bkIfcdwbD0SqbDI49h-vPjl_lFal_wcbL_lKFOEGyRIhvCq_LsASYhUXYn9Qped6KVtY3zSmWpj4SIS_PQaJrAKfySfmXnk8KsFqxzl8OOKS9Z_Jv9kAS3yfLdXykpvsUNP-UdPLNhqGZndHtz5UP8IleFq37F47qRUUDFMGh1-yKaAMidsX8xnEp4gjkzd50g1JtXwd79KGiP1kLVOYv_fhmJ3z3Z5vFtdNuZwrJxth_zxajZu2UOd-pqbzv1EWxZy-oe6wSXRRncaZuD5ciC2JjLEKaouU8V3NtYICWvunTBZ5EAg74Bpb1G5k2KKSFBdGdG0Z-UeW8-1mnqguCXRKemG77o_V-YxNn1GF4Umo2yXsnFCPe0WI7W38Igt7xWbeBY6vRu074eXBYWfzwFZd_kDmq2MqXgJkclz-DCOYfUGaOfcZmeWhNcElDsATHY8577P5CsGes0I_ycVDoDGtHYl_vQa69GATrcUI4vtL1JM9Fsf_Vt_llnoh9c6MtAw1Gb5MuH1CT5oHbij7Jcs0RpMRUEi80nULMmFSNvAiEWAxMIZFxk4W17SJ3mfnFap8ESbmIH94PDV1ek7innnA3xbbf020l7A7IYOh7F9ETY3beXGY6vcaotNFcidkdj0insWdt_zxRTVQ3hJl3VGQT_S_WobGAU80uu83k-vBGczOMG3r2HRqSDdjP9Wn0b5U7i9xo25E8FYMtzc1D-kDUjr492ApXdxdG2CwdFxHgUialS8WLgu3saUj5BFinFMWEbZinnQ2UTFV6l0yWbEWNtaUlEWFWFoGlpXu8AIUvJ3V60gdABgc0_xhqmqzJNPe-p3j3CNh4VULw9za0xWRo_u0D7_zAMM0vd5zR3hMa3V23UA8SzNiqsDzWjFbT3VGGexysBGKc3LNW1rBPn13IdPtrgUMhURi2RcZuBX3Ve9Zdd3GztPwQl_FMqVlsKmJrAGvqYOJw0u9rnur3Ab2yBJWLqljEEbUspq7n8dHiBfrYq0usyLXayV_3mU8RuH2hU8uD665nKUgHS_IOL3JjcvdJXV9vg6rwxFke-P_SzgvhRN0UNgcroNW2AhX2SWlp9SNessT2E7087GIr9q_Jo71Rg7zE4rv3kIzqJBAzeOy3dCK0cApx_PVFM5Irqxxq1_oLCAfP5LQhkz07XRWQsDXNYvW5kGAPKnPN7glCOLL-Kjf6_kBW3bA4DxuIBMboDxi8K28LYB8KgCchOaUqgs59IYpLoFQJFuzX_ykuACIoMmHbhXiZUWOTLjYPZG7Qlnv0FEeOaa1tGB-GNPYmON2kvWBqq4vmCE7FeddjmZoYjGFAkLmQMbxNYlkqo5AeMFz3e5xr7VyDIsmm0PNGn8yGvh2-bYIKMPHAC4UtPDHbPv5i56_djGeFpvA6BVrrNcZdgrby7KsIUY7-p15d3u1h-6T0iDZmMd5JoGFry3kImhZ3Afyg_8rdVrcLdlZIwkpQeVqNgp9vh7bzDcmXcT8fjutA6Y4w9U3ZW8zTVet-xda9diL8jS9uRtxKcw5vCzu-mDVhil271wy0xR8Sxk8UPgNBn01U7dGDaFfn1pI6KxUIW9jAYCDBtDi8KI6vn7A9WYFaf0p9Jjt3suXLfwGc0NgS6syHkez1bHirh4vEpzuQTlBo_Fpgzlhb--FhkwFdbzuUf_v3qs4NURqm7GEDZs3RuzoUmFQn7p7iuzXnmnP5-XNw7vDU_WWwFv6vU4a650Gyn0Sl0G9Y8IeM7cp382HYUk0NiX953ogGNw2uJVFGNPkrQ_3BI30xaXK7suO2t19ys2y5BtwiWdLidYm6veA3S4maFwRTmWwVEo2LReZEtbyraQt9qAvpe3kABm2fMe01JnXnUKL7k_A6wu_bji9bwrQX_85GT_oOegX_dBktF2J_8IOKSZ_pu2rZHGTw6nxdbM-BgugC7zEy1UOhc210CXvvu7om9BJeAdEu2t7kD1o7ooTa1__jnZ-yimV7_bzfYJ8XzuqZg558aXQr4-aEw9lZV6mDqrSNZswEPLpwafVAYbkUWGffMrbo9gYoKpaE2zrm9Knhw1E_7vHe1YXt37XkmRPrZZ3AnrlIwLxZudhbrChu7XmEWIcw5FD6fs6uMRgWshqCb_BXwVH1372SpKnAxFvXCljxDwhvwhQQQRv13XaROU8hYD5ZHBeXrWExtJrvAUcuuJlVWroT4TMgqHPRofZWTCjBJBAuzpGFkXJJ_xQRxsAw_L1Q0Gyn2x8cHx_CTaEjUIV8-07d_oME_rzz0zfwIyAW7bR0SXl-RWeW1ONmEDRw6Zt1ruNxgrJY9_BWDHhn1-j-v91_-ct7PY14-zOPv8ATybt1SWWsKTu5pihdKINSbvUqYth2stP_DRNpgb3KF0K5MUlmXIAVKMmjiNgslYV4kSTf-eztiJw3wwuHFVuLPeXWesFN6PynbWN87YUOLpXBUl2UQx7iaiHwu1kbPZrwDkQ1qU4gIMGhT_L3wxsiCCWG8nVbO2L4nLSX92M4Q9fNqnAP5UsTe4LKVjfqJgLNCAfGViH-mAiQlWbEJEznqJYAR7fDf_4EVmbD_6yDJyWTp3qYtc7ZqSwvgW8J4CqmEjuFmyMVxiPyoUmlQwg6uBb1bx3tU0mloVI0vQvf6ybp9Qz0nmu1i9Kl6bv-EX-PTjfM3GZP1FUfn-zlBPsVdro-SlpvvzTdny99TrbjGtwfqZVvJapW9yHxeWcR6AeZ0ZD3ybbTgSL5TXsGwMeA_OsiTw-37zjpGef2TH3jyMGDvZ4Ji_uM9Hg6_KIe_JlzMUf0moDbp1lv7cDX3VFnzj8mlzDVjT3kyGHhh_IaPl8GQt1HpOSN37zrUGSuItnZjM5nOQb5SpV792RLu3zgvzSGzu7uhN01MGcjjKRaMCbRktXMapjxrFR6uSl9rRe9ZvvJh3tl3s9FsPt3hs63uH--w4qssniKOXgmhURZLaLIQqMHiHTSGmXnZW3Fh0nYdQRY5jzzMsjVHUQT5iUoVWS4leWmRvZ7qyqfMZ-sBzvuKh1SDTLJYHQCzwoHm2LrLP0egWzrHjh7XTSxMsCZ_wwv7spf5Q3DmZ-FvbxYRmMZk89kerL9gtZe8c6EbdE0sg_TOttkDvcX4mHWaftz0jmEXNUvlljvl_yBQtO4dKJfihTPAWHyQOs11cd5RP-1jKZW3DXjHf2rmYz2nejTurw7CabrJUTk6TgZ-jAJNXHbNQzuvQbOLmcieBLT5GM_7UKJSBZapGFMbKvAgXrhn_5BR3HbAg0pBDD68vWJy67ISCJYzlCq8fbFhu38By5S9mkOEiLc0FxgtBKJ_Skr2JlqDC_FQo1PUhShWAAlaUHZJn4SVYEqEcbkN7eS9-ofP33cc9i7dOskYF651nbEE-qpH7_7P5vTCRTqMxkAzhX_9iZt-Nbr5oY8unS-7-gMZoAXgujjBPW-IZgTnL7PbyFAEaYOLwAMqZdgQezSkVc37yYBhvXniM3peUne5mKTiywhWHbo5n6U9OiQuuojahviEFSMfvKN-EjnzgyQB-4_DcgNhNg8GVVAP_-X2i6qszIVaVO-3MMcF5ZcFfmcFrcp-EhQD_pzgcJW-hQEa4jupVcUZ50-AghIfE6zJR2qAIutrAJMllsxGyKfgwaefdHD-WgP8TSmwoNMd251WQK0res8W16jTFsU7GGMCTlEv8rrkC7twi2t4whEekG5m4jwqCaWjwoSUt4B3JOVhrecs5SX79dQM_-eccjh7dvGlusCxwXs-FiWHRkazvu3iFkRUg-nJu2x_YS1zoJWVNxumrNLtbqpgVqmEZVpQ7SDVPd8aNvRcSNXsx2HuZrvstJkafyDNFwpbRDJ9IxiNmufpvj7ovZxzrTLuQnp_E5jOP9nO_bkDWrzPPKAFy0nm8wsFgTzhBxvoMVhfhJiRJDKwABhWS9RGN7Fhuc7PEUrvsrDcdp-uGPVoq7X1zwhx45-9qWTozEbtxdF0hiSZmawF-DY_zzvHPLFKMMLJsbbXKzXLuy4ZUq1ayRIpfEhAkoIkjn3movCtBhNuXzcp8t8z-xekmGPnbP7I2lHBFF-ABQIxK0PqBI1d161PBZNMRdf5M6fhfSqA_i7TGfDx0BXZsScsfzAlBTXV3kpirta-wFw3pz9CQU5pABFktwy6UmZlqYoDvz9shkEcUxdDFTLkuJl0TudJpV6FDTc1XDp9jdbYVZA-Yv5yGqD33OYFtftseeMpiO24TpNbSGMILYHCSdnqVYzyW4ybpxm5zG7Yh0x3r72lnM8A-IvMUzunIOz4oT4XXtSLiwSwpJFQmJRHi9vIHqZub-KEx_Rx9s-KiT9v3h2WQmSFVW-1_lAS42Cy9nT6YVKjQ3ohlaFgcLjjBo86PsB0fyNFObQY4JhLqMnKYKO_tdGyXEOa_XjiSV7Cu-t97h3jJQywg2qOSRrEzAWhdx6KR1zttAple0BPY3bb6qTxPgrUs9A-WD2ErhAE-9ob3pWAo7fSnyx9N-S1wt6TOdor1UDl5aVxic7Zd1PwJ37ZDFBMpayzs7u_AgunGA1EmWcotwYWdt41VMNOh0SNNTbxTsWQwiQqr9YJhtQeGtBw8mvC2-XqzFKJunITxn9EqX8ofonxQM9nApzkSt6qYWUsvtUx3RaJL9lZkaOjXRiOvAyllFQ08I7FGFAlkRGO41e4EEIaEptrlcoo4Azir7pxI9rZKXw7Vt4DAKGxNxYDLnsBYbUPKzg4oVDw3eeBzI87EsaTZvKjzLGmuiWww8y-tmpctmrlo-pQRereFVA3HZfDtq6NBSTTImhVvsgoi0NXC0x0Z9Rmyy2L9EoRluA43GvXOlhqYMxKCNDypu_Ph5M3R1OdJu_JaylBaNp_-rCmh4hmRMUj8v04Gdt1IyHsXqcFio1JGVAJhGYAdCsX7C3nt9dmoGjQQ928-3V2zJ52164SPQ_QCtmYRugOKbwxSa7eO4-Evo0DrKmBwJbOGSwHCPPnejwNUo2PNJeKa_NS52iGVRW1Z5HLxIMvom7Qt1D2y2G-2Gd7J7d0A41Qqr9OhfZrh0kZwPyXekIneTBMva6QfxtRfnJQ8ANFL7Nrwn0nnFvmygrU57g1qIqX2Upw97qwUeu93wXTrhqhiN1RB7LUZrrdySFBgnBx5pCDh9ipv6ws6B2kB6y1wHRSFlQ8Eo8afHzJzHRAfAgKQiaZVyT1XQ1dX6Bw_eUJzZRdo84NkAAsNUJSCRHqjyShSj577GMc4QHIcWSqZ4Qe-L9Ot9qBKXsZiue-8bnilX-S_GkM6Aa8q2b6t8x3UuXpnyiJBlk0keZM2Lfm7_R6AWtiONhPdDu8r0bR4QHIdsFUyO8hmMF2CtAqT0R81igwQY00fW4QloeuWkK2A0FK0YgiI1opFdhtoW2GF-B3S-Z1nOpt0-Gq7svwlNbIM8BQVDlZDwkZG3SgXFFhJtswgdZlZbYh3_8qpk3M1Jz2rv56bN915W2o0uWJc06NaJl48K0DGZ0PC8HINgIFWZD-b7N4Qm2bYvCB8VNjs1AW1QFoQwuYJZTDO4eY8berMdESyG8hWEC29eDYW35vm7F5fyHc-3pc2v08f0kG2AABIGsNujjo8K8jGL9v1Q28g5Yg3L-z6U3fu8ZI3q4HOB5X2hh_zqo4JSitjdmwUoRjl8qucJWEtjaQOd30vhWIDI8qWvRw_Ca8s3LbKiKcyebRveEIuY28YDOHK7Ak2i8g3r2HG4Q51XDpt6qQKJ9I6Ba-CEBbmYiha0LASw0AXYlrk2gS8q2100_VQHPZSC4M8B8ZY-Oz0Y28yDZp3jzn5W7I08Z0MC5Dtr4MK39JYBj0fX28oDZBkkxOYE08SvzrU4He9pU35NX4V3P-eDnOkCVtiC3BRED2uO8cB1ZSmZlki8Z8DCX4K2nJxXgo8YaHbwiwj29CRfebhkI9iRjWYH3P48_TxHOGKGlthmI8o0fbe_RXGSLm75e5fW1c-JInYP64KiN5WCto7MSIemIY2Oe7Ilq0huY9mST-Z5R5HsDWtW_sfSKa-IqyO8nbIzv8aIIBNwUdHLqVfbr_--9VR0cJlDli28BpXEvIzmv2n__xwfo-_b5Mq8y12hlRNHbuJdQZJPxx4xEmfwN6w5KKRzQTxaYGZTsLPtCIbV32tsFsMfaVuAEqb54-FnNLmPjac1OFC4iTLE07yf-veIeyjtgBAnb5clhQwLAshs5kWzeraw8g4sGBrBzFfITLMsGmzQDyzf7mgJVGSwTIR1vIjwR6Xaidt3YZNiAPDo_OOEgTMnZE4KozQaiqJg8dpzQJGcJULLk5eNDleOjiyMusREQAFVMYlzceokFl89gNTqzLugJ5wwZjbhTLuQlrYYd5NTJNkmptTPZxKhqDujni1q-EKxM66G84ORqj5ezOzHYipnKXwjslCj3JKkyVrhRxsauqiVqv9sNjdaGIzfDZ2khBADeRr8pWiOzdBI2KjEgjmPQRkdOtfSPtLtthWP6vTVn7Kp8xxHQHHQPPlUYLgE6bCXXLjZqp-DsbgX7FkM7GAgrWrYYr-9RqK_W4iF6vC46iaKMkZ_enNNYIC8-Oa1XEzbDLIEDTGuHFFdLn8wTFDChezwqzdO9buePo6D5-nS6jxA8-1c7BN2l9dlVHSJjmPYHNCNENDWjUHyZjma7PbLg_7QklHnbN8ag6CqUikJFUIQACztTfp1UuJ_5oSGiax9LGWDuysDSjr6FMtalVORKUhhoA5RdGDC-yChYKy6nxC99uiTqSqb3SfeSBd1eeXDuGqx01ZQ8jXxY0KBCoG5RNfsLBpQFVKNX4tbJwKgDtgIbYpbLSSfPp3qdouUyEfc5JQDXyS0OFPw9SGj5_2zD9PTENO1IZ4jQyisw4YduU6iM1hpTcwVmLJwsyG4NERA7c3uKRzT_sUAEgoI7RZzoJf-MdzcGxbSHDMvC2ZllTt5Vvc-WM3l_beWB-TnJfeNUHwlxEZhKUDGMqLhov6ws_NopQzeextOlTLxTrtUAs2wRS3K1qmK1qic8e34gf-vYyKPVMpoNAoCH-Ro9bLzMTp96jp5pUBQFMhRg1mYlP14sLZ6KLBQREEvdmvAvp3EuHXtgbdeNptEzHwQU2BtfCatFeUz5Ti-cwBkVJDDjpeJPdeqJH_ibQMOYiEXyodDOzm-YRjZSQ39LRoqf3ns7hpEEKKRRUGmlpfmwRxaNZa8Pmr3TZv7us9e9S_RDD_sBxvE2AsMGHTWbfL6lD5JbhkB7jB16er-QuZw02erktr-O-sMNXhBPQdJNGne4FguKQ7wm1IEBbFSLr9HLkDO6CzPaWXLX9Yh8FuzOoL11bg2IThFMVQAasmxGZwjC5Y_W7sTEdYcZWpVgszjEX8RmON72jACZfIkMKP6QYMIZFPHBOivWkhI-8IWMsSKYKZgSuMIE0SAyn70_rrJIa6S73oDP9EhJLRCOtePcJkMbKEztIfpPEwL8cL2MZr818sIlsYIVDbyfC17v1d5u0-jxWsNWYhVjA5qCF3xhe74jTbc_Q_pXFfy9Alw6udTk6aptsHF8FkkfuSoPfRb0nkdOjyUelIYBDSs_ynIzJfeFp67PzVog_plchVBrsm-YVfgLgM-hH8I-p1wTcQoyniNvr9frf9pwUpo1tKZ0GNFRUG6ZdiygHr-wpXXThqt5691lJyoBJowTM4-g5fDe_BGAH2O-ICLCpZrTZuEdLbqC-Yvuu4r8NwtgYaJgKnUv1IGWiQzYZ4Pj0sevCTPNrGdqMtmxScs80RIiav3JLKIN--2UUWPLBIIE-xqXaq6tka4dytwOwKK159kdbyhUtajFv_V1FvShxE7SP3p1rRYfTBuCDu6RzXRBUBqHpQHM3owEyWcCFBPJLsVFfMepgwiUpO1oLgdvBr99Xsbpoc9KhRec1gxP7ZkZVM1r84nKJb7PazL33nkZbIk7QuhRWxgzdTgs_MMftduAOjfmpEsadTVkiT5k3YdwcZ0S5S3LMhMMYw5aolfQMiksj5iJ42QwhwEUP0HRQFYCjMaKKRgTpsyqJDGsiSM13acwrgRVb2-lPIHkTXBc6MyP4Rv2k-4vkL2y3ustqkZYYAy1YjJQTG1YwJk67HjuT3gVivN1HSFcwMKFwkFLgAMt-FrXpQzawXZhRn99osA_nS4-z7dqEfZxK2NW7rmIM-OZ6mkW_bOivXYhG-XONIwtB0YAto5Aep0Qmj3IPepzYRRjwUHSinQ7Pa5u-OhimBBOTxwq7I7BTVUExblYRJFtinYqNxIZDnVT_IR-QkfcJYt30-Id_NU1BE7JoRcRUnxvZv6GE7R_r9EsnUvdCEJFUJUNEpZucmtcc0LTZeXm4EnC8BjtLPchON2papjmov9GIjdTcs4sO1OIFml2hf0KVwFn7VaQhPvssMzmfNbSTmuUhUMBGk8o-bTXuBdAiFcS-Pmm2TgDsWqdvPdVnWW6LTDeOxx7f7IRNTzMpCZVcuPw-Ppzt6aaFm0NOZDQUFLuuAuJh-E7UqAiJgeTxDw4rZz9WTQrVkifTV3P_44ZMTYtlt2Qsv_ONv7xwQosBW5DBIGSHqagzafcprSmtpEfYzTtl-O5DxxOERs1P7DMmly3wN7XwEgo-5lt6Dcb7JkO9gSSKsXk3VZPLtilOpIjDbgy8Hf5XcPL7TBpltsnIHneKwbuhwjYJv1yHvLHR9_mC0 \ No newline at end of file diff --git a/docs/logical_data_model.puml b/docs/logical_data_model.puml index 15fe88b1c0..fd01f07390 100644 --- a/docs/logical_data_model.puml +++ b/docs/logical_data_model.puml @@ -410,7 +410,6 @@ class GoalTemplates{ * templateName : text * templateNameModifiedAt : timestamp with time zone * updatedAt : timestamp with time zone - deletedAt : timestamp with time zone lastUsed : timestamp with time zone source : varchar(255) standard : text diff --git a/frontend/package.json b/frontend/package.json index 84cd456896..bc141e3b72 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,7 +12,7 @@ "@react-hook/resize-observer": "^1.2.6", "@silevis/reactgrid": "3.1", "@trussworks/react-uswds": "4.1.1", - "@ttahub/common": "^2.2.1", + "@ttahub/common": "^2.1.7", "@use-it/interval": "^1.0.0", "async": "^3.2.3", "browserslist": "^4.16.5", diff --git a/frontend/src/components/filter/FilterTopicSelect.js b/frontend/src/components/filter/FilterTopicSelect.js index 8d47f39dbe..6178c7ad1f 100644 --- a/frontend/src/components/filter/FilterTopicSelect.js +++ b/frontend/src/components/filter/FilterTopicSelect.js @@ -1,21 +1,15 @@ -import React, { useState, useEffect } from 'react'; -import { getTopics } from '../../fetchers/topics'; +import React from 'react'; +import { TOPICS } from '@ttahub/common'; import FilterSelect from './FilterSelect'; import { filterSelectProps } from './props'; +const TOPIC_OPTIONS = TOPICS.map((label, value) => ({ value, label })); + export default function FilterTopicSelect({ onApply, inputId, query, }) { - const [topicOptions, setTopicOptions] = useState([]); - - useEffect(() => { - getTopics().then((topics) => { - setTopicOptions(topics.map((topic) => ({ value: topic.id, label: topic.name }))); - }); - }, []); - const onApplyClick = (selected) => { onApply(selected); }; @@ -24,7 +18,7 @@ export default function FilterTopicSelect({ onApply={onApplyClick} inputId={inputId} labelText="Select topics to filter by" - options={topicOptions} + options={TOPIC_OPTIONS} selectedValues={query} /> ); diff --git a/frontend/src/components/filter/__tests__/FilterMenu.js b/frontend/src/components/filter/__tests__/FilterMenu.js index 020aeaa980..1ca2ef0159 100644 --- a/frontend/src/components/filter/__tests__/FilterMenu.js +++ b/frontend/src/components/filter/__tests__/FilterMenu.js @@ -53,14 +53,6 @@ describe('Filter Menu', () => { jest.restoreAllMocks(); }); - beforeEach(() => { - fetchMock.get('api/topic', [{ id: 58, name: 'Behavioral / Mental Health / Trauma' }, { id: 60, name: 'CLASS: Classroom Organization' }, { id: 61, name: 'CLASS: Emotional Support' }, { id: 62, name: 'CLASS: Instructional Support' }, { id: 63, name: 'Coaching' }, { id: 64, name: 'Communication' }, { id: 65, name: 'Community and Self-Assessment' }, { id: 66, name: 'Culture & Language' }, { id: 67, name: 'Curriculum (Instructional or Parenting)' }, { id: 68, name: 'Data and Evaluation' }, { id: 69, name: 'ERSEA' }, { id: 70, name: 'Environmental Health and Safety / EPRR' }, { id: 72, name: 'Facilities' }, { id: 73, name: 'Family Support Services' }, { id: 74, name: 'Fiscal / Budget' }, { id: 75, name: 'Five-Year Grant' }, { id: 76, name: 'Home Visiting' }, { id: 77, name: 'Human Resources' }, { id: 78, name: 'Leadership / Governance' }, { id: 79, name: 'Learning Environments' }, { id: 80, name: 'Nutrition' }, { id: 81, name: 'Oral Health' }, { id: 82, name: 'Parent and Family Engagement' }, { id: 83, name: 'Partnerships and Community Engagement' }, { id: 84, name: 'Physical Health and Screenings' }, { id: 85, name: 'Pregnancy Services / Expectant Families' }, { id: 86, name: 'Program Planning and Services' }, { id: 87, name: 'Quality Improvement Plan / QIP' }, { id: 88, name: 'Recordkeeping and Reporting' }, { id: 89, name: 'Safety Practices' }, { id: 90, name: 'Staff Wellness' }, { id: 92, name: 'Technology and Information Systems' }, { id: 93, name: 'Transition Practices' }, { id: 94, name: 'Transportation' }, { id: 124, name: 'Child Screening and Assessment' }, { id: 125, name: 'Teaching / Caregiving Practices' }, { id: 126, name: 'Disabilities Services' }, { id: 128, name: 'Training and Professional Development' }, { id: 129, name: 'Fatherhood / Male Caregiving' }, { id: 130, name: 'Ongoing Monitoring and Continuous Improvement' }]); - }); - - afterEach(() => { - fetchMock.restore(); - }); - const renderFilterMenu = ( filters = [], onApplyFilters = jest.fn(), diff --git a/frontend/src/components/filter/__tests__/FilterTopicSelect.js b/frontend/src/components/filter/__tests__/FilterTopicSelect.js index 0e0aa6a5e9..7ad8fc697b 100644 --- a/frontend/src/components/filter/__tests__/FilterTopicSelect.js +++ b/frontend/src/components/filter/__tests__/FilterTopicSelect.js @@ -5,7 +5,6 @@ import { screen, } from '@testing-library/react'; import selectEvent from 'react-select-event'; -import fetchMock from 'fetch-mock'; import FilterTopicSelect from '../FilterTopicSelect'; const { findByText } = screen; @@ -21,7 +20,6 @@ describe('FilterTopicSelect', () => { )); it('calls the onapply handler', async () => { - fetchMock.get('api/topic', [{ id: 58, name: 'Behavioral / Mental Health / Trauma' }, { id: 60, name: 'CLASS: Classroom Organization' }, { id: 61, name: 'CLASS: Emotional Support' }, { id: 62, name: 'CLASS: Instructional Support' }, { id: 63, name: 'Coaching' }, { id: 64, name: 'Communication' }, { id: 65, name: 'Community and Self-Assessment' }, { id: 66, name: 'Culture & Language' }, { id: 67, name: 'Curriculum (Instructional or Parenting)' }, { id: 68, name: 'Data and Evaluation' }, { id: 69, name: 'ERSEA' }, { id: 70, name: 'Environmental Health and Safety / EPRR' }, { id: 72, name: 'Facilities' }, { id: 73, name: 'Family Support Services' }, { id: 74, name: 'Fiscal / Budget' }, { id: 75, name: 'Five-Year Grant' }, { id: 76, name: 'Home Visiting' }, { id: 77, name: 'Human Resources' }, { id: 78, name: 'Leadership / Governance' }, { id: 79, name: 'Learning Environments' }, { id: 80, name: 'Nutrition' }, { id: 81, name: 'Oral Health' }, { id: 82, name: 'Parent and Family Engagement' }, { id: 83, name: 'Partnerships and Community Engagement' }, { id: 84, name: 'Physical Health and Screenings' }, { id: 85, name: 'Pregnancy Services / Expectant Families' }, { id: 86, name: 'Program Planning and Services' }, { id: 87, name: 'Quality Improvement Plan / QIP' }, { id: 88, name: 'Recordkeeping and Reporting' }, { id: 89, name: 'Safety Practices' }, { id: 90, name: 'Staff Wellness' }, { id: 92, name: 'Technology and Information Systems' }, { id: 93, name: 'Transition Practices' }, { id: 94, name: 'Transportation' }, { id: 124, name: 'Child Screening and Assessment' }, { id: 125, name: 'Teaching / Caregiving Practices' }, { id: 126, name: 'Disabilities Services' }, { id: 128, name: 'Training and Professional Development' }, { id: 129, name: 'Fatherhood / Male Caregiving' }, { id: 130, name: 'Ongoing Monitoring and Continuous Improvement' }]); const onApply = jest.fn(); renderTopicSelect(onApply); diff --git a/frontend/src/components/filter/__tests__/goalFilters.js b/frontend/src/components/filter/__tests__/goalFilters.js index 93ca3d810c..f95b17ebc9 100644 --- a/frontend/src/components/filter/__tests__/goalFilters.js +++ b/frontend/src/components/filter/__tests__/goalFilters.js @@ -7,7 +7,6 @@ import { screen, waitFor, } from '@testing-library/react'; -import fetchMock from 'fetch-mock'; import { createDateFilter, reasonsFilter, @@ -91,13 +90,6 @@ describe('goalFilters', () => { }); describe('topicsFilter', () => { - beforeEach(() => { - fetchMock.get('api/topic', [{ id: 58, name: 'Behavioral / Mental Health / Trauma' }, { id: 60, name: 'CLASS: Classroom Organization' }, { id: 61, name: 'CLASS: Emotional Support' }, { id: 62, name: 'CLASS: Instructional Support' }, { id: 63, name: 'Coaching' }, { id: 64, name: 'Communication' }, { id: 65, name: 'Community and Self-Assessment' }, { id: 66, name: 'Culture & Language' }, { id: 67, name: 'Curriculum (Instructional or Parenting)' }, { id: 68, name: 'Data and Evaluation' }, { id: 69, name: 'ERSEA' }, { id: 70, name: 'Environmental Health and Safety / EPRR' }, { id: 72, name: 'Facilities' }, { id: 73, name: 'Family Support Services' }, { id: 74, name: 'Fiscal / Budget' }, { id: 75, name: 'Five-Year Grant' }, { id: 76, name: 'Home Visiting' }, { id: 77, name: 'Human Resources' }, { id: 78, name: 'Leadership / Governance' }, { id: 79, name: 'Learning Environments' }, { id: 80, name: 'Nutrition' }, { id: 81, name: 'Oral Health' }, { id: 82, name: 'Parent and Family Engagement' }, { id: 83, name: 'Partnerships and Community Engagement' }, { id: 84, name: 'Physical Health and Screenings' }, { id: 85, name: 'Pregnancy Services / Expectant Families' }, { id: 86, name: 'Program Planning and Services' }, { id: 87, name: 'Quality Improvement Plan / QIP' }, { id: 88, name: 'Recordkeeping and Reporting' }, { id: 89, name: 'Safety Practices' }, { id: 90, name: 'Staff Wellness' }, { id: 92, name: 'Technology and Information Systems' }, { id: 93, name: 'Transition Practices' }, { id: 94, name: 'Transportation' }, { id: 124, name: 'Child Screening and Assessment' }, { id: 125, name: 'Teaching / Caregiving Practices' }, { id: 126, name: 'Disabilities Services' }, { id: 128, name: 'Training and Professional Development' }, { id: 129, name: 'Fatherhood / Male Caregiving' }, { id: 130, name: 'Ongoing Monitoring and Continuous Improvement' }]); - }); - - afterEach(() => { - fetchMock.restore(); - }); it('renders correctly', async () => { renderFilter(() => topicsFilter.renderInput('1', 'test', ['ERSEA'], () => {})); const topicsInput = await screen.findByLabelText('Select topics to filter by'); diff --git a/frontend/yarn.lock b/frontend/yarn.lock index f75443a4f8..931acb5bce 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2431,10 +2431,10 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@ttahub/common@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ttahub/common/-/common-2.2.1.tgz#a2e6cc6c79c40fc90ac59b4f5524fef1fbf2196e" - integrity sha512-acVo635O0I6qMtkge5G2rM00OjXcW9AErphs9Uut0mRvcex4BSuO3KCAqZFM3lTExE+OcaBcf4FeciW6SXF2KA== +"@ttahub/common@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@ttahub/common/-/common-2.1.7.tgz#739668720f08874b04ec21a428e7453737a5cfb3" + integrity sha512-LNV8DmklA2jwztAF8KOcK3/SFdJNzWCn+o6QquMxGztN8YIzsDoxik9zoygCVtVQwUQo7Y5XXPA9h3fwkUHjag== "@turf/area@^6.4.0": version "6.5.0" diff --git a/package.json b/package.json index 7854a7096e..fddf13bdd3 100644 --- a/package.json +++ b/package.json @@ -322,7 +322,7 @@ "@babel/runtime": "^7.12.1", "@faker-js/faker": "^6.0.0", "@opensearch-project/opensearch": "^1.1.0", - "@ttahub/common": "^2.2.1", + "@ttahub/common": "^2.1.7", "adm-zip": "^0.5.1", "aws-sdk": "^2.826.0", "aws4": "^1.11.0", diff --git a/packages/common/package.json b/packages/common/package.json index 4fa512907f..ecac3555f1 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@ttahub/common", - "version": "2.2.1", + "version": "2.1.7", "description": "The purpose of this package is to reduce code duplication between the frontend and backend projects.", "main": "src/index.js", "author": "", diff --git a/packages/common/src/constants.js b/packages/common/src/constants.js index ec4a7987f0..d455f5c4cf 100644 --- a/packages/common/src/constants.js +++ b/packages/common/src/constants.js @@ -56,6 +56,7 @@ const TOPICS = [ 'Disabilities Services', 'ERSEA', 'Environmental Health and Safety / EPRR', + 'Equity', 'Facilities', 'Family Support Services', 'Fatherhood / Male Caregiving', @@ -156,6 +157,7 @@ const TARGET_POPULATIONS = [ exports.TARGET_POPULATIONS = TARGET_POPULATIONS; const EVENT_TARGET_POPULATIONS = [ + 'Children/Families affected by systemic discrimination/bias/exclusion', 'Children/Families affected by traumatic events', 'Parents/Families impacted by health disparities', ]; diff --git a/src/migrations/20250122205314-definitionally-dirty-work.js b/src/migrations/20250122205314-definitionally-dirty-work.js deleted file mode 100644 index 47f41c0008..0000000000 --- a/src/migrations/20250122205314-definitionally-dirty-work.js +++ /dev/null @@ -1,27 +0,0 @@ -const { prepMigration } = require('../lib/migration'); - -module.exports = { - async up(queryInterface, Sequelize) { - await queryInterface.sequelize.transaction(async (transaction) => { - const sessionSig = __filename; - await prepMigration(queryInterface, transaction, sessionSig); - await queryInterface.addColumn( - 'GoalTemplates', - 'deletedAt', - { - type: Sequelize.DATE, - allowNull: true, - }, - { transaction }, - ); - return queryInterface.sequelize.query(` - UPDATE "Topics" SET "deletedAt" = NOW() WHERE "name" = 'Equity'; - UPDATE "GoalTemplates" SET "deletedAt" = NOW() WHERE "templateName" = '(DEIA) The recipient will implement comprehensive systems and services that promote diversity, equity, inclusion, accessibility, and belonging.'; - `, { transaction }); - }); - }, - - async down() { - // no rollbacks - }, -}; diff --git a/src/models/goalTemplate.js b/src/models/goalTemplate.js index 72ed9a7df7..e1e1af4546 100644 --- a/src/models/goalTemplate.js +++ b/src/models/goalTemplate.js @@ -86,7 +86,6 @@ export default (sequelize, DataTypes) => { afterCreate: async (instance, options) => afterCreate(sequelize, instance, options), afterUpdate: async (instance, options) => afterUpdate(sequelize, instance, options), }, - paranoid: true, }); return GoalTemplate; }; diff --git a/src/services/dashboards/resource.js b/src/services/dashboards/resource.js index 9561cb7267..c17c06b429 100644 --- a/src/services/dashboards/resource.js +++ b/src/services/dashboards/resource.js @@ -9,10 +9,12 @@ import { ActivityReportObjective, ActivityRecipient, Grant, + // NextStep, Goal, Objective, Recipient, Resource, + // Topic, sequelize, } from '../../models'; import { formatNumber } from '../../widgets/helpers'; @@ -2091,8 +2093,7 @@ export async function rollUpResourceUse(data) { } export async function rollUpTopicUse(data) { - const filteredTopics = data.topicUseResult.filter((topic) => topic.name !== 'Equity'); - const rolledUpTopicUse = filteredTopics.reduce((accumulator, topic) => { + const rolledUpTopicUse = data.topicUseResult.reduce((accumulator, topic) => { const exists = accumulator.find((r) => r.name === topic.name); if (!exists) { // Add a property with the resource's name. diff --git a/src/services/dashboards/resourceFlat.test.js b/src/services/dashboards/resourceFlat.test.js index 92c48ab223..8fff6c6c51 100644 --- a/src/services/dashboards/resourceFlat.test.js +++ b/src/services/dashboards/resourceFlat.test.js @@ -225,6 +225,12 @@ describe('Resources dashboard', () => { raw: true, }); + const { topicId: equityTopicId } = await Topic.findOne({ + attributes: [['id', 'topicId']], + where: { name: 'Equity' }, + raw: true, + }); + // Report 1 (Mixed Resources). const reportOne = await ActivityReport.create({ ...regionOneReportA, @@ -433,6 +439,14 @@ describe('Resources dashboard', () => { [ECLKC_RESOURCE_URL, NONECLKC_RESOURCE_URL], ); + // Draft Report 5 Topic 1. + await ActivityReportObjectiveTopic.findOrCreate({ + where: { + activityReportObjectiveId: activityReportObjectiveDraft.id, + topicId: equityTopicId, + }, + }); + // Draft Report 5 Topic 2. await ActivityReportObjectiveTopic.findOrCreate({ where: { diff --git a/src/services/goalTemplates.test.js b/src/services/goalTemplates.test.js index f7a0cd396c..0fa6758182 100644 --- a/src/services/goalTemplates.test.js +++ b/src/services/goalTemplates.test.js @@ -286,7 +286,6 @@ describe('goalTemplates services', () => { describe('getCuratedTemplates more coverage', () => { let grant; let recipient; - let template; beforeAll(async () => { recipient = await Recipient.create({ @@ -302,14 +301,14 @@ describe('goalTemplates services', () => { recipientId: recipient.id, }); - template = await GoalTemplate.create({ + await GoalTemplate.create({ templateName: faker.lorem.sentence(5), creationMethod: AUTOMATIC_CREATION, }); }); afterAll(async () => { - await GoalTemplate.destroy({ where: { id: template.id }, individualHooks: true }); + await GoalTemplate.destroy({ where: {}, individualHooks: true }); await Grant.destroy({ where: { id: grant.id }, individualHooks: true }); await Recipient.destroy({ where: { id: recipient.id }, individualHooks: true }); }); diff --git a/src/testUtils.js b/src/testUtils.js index 02dd3fd5a8..2b36d9a4e8 100644 --- a/src/testUtils.js +++ b/src/testUtils.js @@ -334,6 +334,7 @@ export function mockTrainingReportData(data) { 'Affected by Disaster', 'Affected by Substance Use', 'Children Experiencing Homelessness', + 'Children/Families affected by systemic discrimination/bias/exclusion.', 'Children/Families affected by traumatic events (select the other reasons for child welfare, disaster, substance use or homelessness)', 'Children in Migrant and Seasonal Families', 'Children with Disabilities', diff --git a/src/tools/createMonitoringGoals.test.js b/src/tools/createMonitoringGoals.test.js index c59f491dd9..f5d2e3413b 100644 --- a/src/tools/createMonitoringGoals.test.js +++ b/src/tools/createMonitoringGoals.test.js @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* eslint-disable jest/expect-expect */ /* eslint-disable max-len */ import faker from '@faker-js/faker'; @@ -1978,7 +1977,7 @@ describe('createMonitoringGoals', () => { ], { individualHooks: true }); // Retrieve the goal template. - goalTemplate = await GoalTemplate.findOne({ where: { standard: 'Monitoring' }, paranoid: false }); + goalTemplate = await GoalTemplate.findOne({ where: { standard: 'Monitoring' } }); // Create a goal for grantThatAlreadyHasMonitoringGoal2. await Goal.create({ diff --git a/src/tools/importPlanGoals.test.js b/src/tools/importPlanGoals.test.js index 43bb870cff..3593133016 100644 --- a/src/tools/importPlanGoals.test.js +++ b/src/tools/importPlanGoals.test.js @@ -64,7 +64,7 @@ describe('Import TTA plan goals', () => { ], }); expect(allGoals).toBeDefined(); - // expect(allGoals.length).toBe(16); this is a foolish test + expect(allGoals.length).toBe(16); // test eager loading const goal = await Goal.findOne({ diff --git a/src/widgets/topicFrequencyGraph.test.js b/src/widgets/topicFrequencyGraph.test.js index 5405637883..b29240b35f 100644 --- a/src/widgets/topicFrequencyGraph.test.js +++ b/src/widgets/topicFrequencyGraph.test.js @@ -467,6 +467,10 @@ describe('Topics and frequency graph widget', () => { topic: 'Environmental Health and Safety / EPRR', count: 0, }, + { + topic: 'Equity', + count: 0, + }, { topic: 'ERSEA', count: 0, @@ -636,6 +640,10 @@ describe('Topics and frequency graph widget', () => { topic: 'Environmental Health and Safety / EPRR', count: 0, }, + { + topic: 'Equity', + count: 0, + }, { topic: 'ERSEA', count: 0, @@ -805,6 +813,10 @@ describe('Topics and frequency graph widget', () => { topic: 'Environmental Health and Safety / EPRR', count: 0, }, + { + topic: 'Equity', + count: 0, + }, { topic: 'ERSEA', count: 0, @@ -973,6 +985,10 @@ describe('Topics and frequency graph widget', () => { topic: 'Environmental Health and Safety / EPRR', count: 0, }, + { + topic: 'Equity', + count: 0, + }, { topic: 'ERSEA', count: 0, diff --git a/yarn.lock b/yarn.lock index f82f271162..7b806e4944 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3261,10 +3261,10 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@ttahub/common@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ttahub/common/-/common-2.2.1.tgz#a2e6cc6c79c40fc90ac59b4f5524fef1fbf2196e" - integrity sha512-acVo635O0I6qMtkge5G2rM00OjXcW9AErphs9Uut0mRvcex4BSuO3KCAqZFM3lTExE+OcaBcf4FeciW6SXF2KA== +"@ttahub/common@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@ttahub/common/-/common-2.1.7.tgz#739668720f08874b04ec21a428e7453737a5cfb3" + integrity sha512-LNV8DmklA2jwztAF8KOcK3/SFdJNzWCn+o6QquMxGztN8YIzsDoxik9zoygCVtVQwUQo7Y5XXPA9h3fwkUHjag== "@types/argparse@1.0.38": version "1.0.38"