From 0cc0a1cc92c59ac64b58fe604ca95e2236072daa Mon Sep 17 00:00:00 2001 From: Josepablo Cruz Date: Wed, 1 Apr 2026 17:39:53 -0600 Subject: [PATCH] feat(SQL): Adding document tables for vehicles and company and apikeys table --- db/Models/assets/ETA_RBAC_model.svg | 9420 +++++++++++++++++---------- db/Models/eta_rbac.mwb | Bin 46154 -> 52611 bytes db/Models/eta_rbac_requirements.md | 204 + db/Models/schemas/eta_rbac.sql | 196 +- db/service/initdb/00-schema.sql | 196 +- 5 files changed, 6386 insertions(+), 3630 deletions(-) create mode 100644 db/Models/eta_rbac_requirements.md diff --git a/db/Models/assets/ETA_RBAC_model.svg b/db/Models/assets/ETA_RBAC_model.svg index 223d484..1773a09 100644 --- a/db/Models/assets/ETA_RBAC_model.svg +++ b/db/Models/assets/ETA_RBAC_model.svg @@ -1,5 +1,5 @@ - + @@ -60,14 +60,17 @@ - - - - + + + + + + + @@ -200,28 +203,28 @@ - + - + - + - + - + - - - + + + - + @@ -242,263 +245,339 @@ - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - + + + + + - - - + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -507,7 +586,7 @@ - + @@ -516,7 +595,7 @@ - + @@ -536,7 +615,7 @@ - + @@ -561,7 +640,7 @@ - + @@ -583,7 +662,7 @@ - + @@ -626,881 +705,1064 @@ - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - - - + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - - - - - + + + + + + + + + + + - + + - - - - - - - - - - - - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - - - - - + + + + + + + + + + + + + + + + - + + - - - - - - - - - - - + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - - - - - + + + + + + + + + + - + + - - - - - - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1523,7 +1785,7 @@ - + @@ -1532,7 +1794,7 @@ - + @@ -1555,7 +1817,7 @@ - + @@ -1581,7 +1843,7 @@ - + @@ -1596,12 +1858,12 @@ - - - + + + - + @@ -1623,7 +1885,7 @@ - + @@ -1645,7 +1907,7 @@ - + @@ -1751,7 +2013,7 @@ - + @@ -1763,7 +2025,7 @@ - + @@ -1772,7 +2034,7 @@ - + @@ -1786,7 +2048,7 @@ - + @@ -1820,7 +2082,7 @@ - + @@ -1842,7 +2104,7 @@ - + @@ -1864,7 +2126,7 @@ - + @@ -1886,7 +2148,7 @@ - + @@ -1982,7 +2244,7 @@ - + @@ -1991,7 +2253,7 @@ - + @@ -2000,7 +2262,7 @@ - + @@ -2017,7 +2279,7 @@ - + @@ -2027,19 +2289,19 @@ - + - + - + @@ -2050,7 +2312,7 @@ - + @@ -2071,7 +2333,7 @@ - + @@ -2085,12 +2347,12 @@ - - - + + + - + @@ -2109,11 +2371,11 @@ - - + + - + @@ -2131,11 +2393,11 @@ - - + + - + @@ -2157,11 +2419,11 @@ - - + + - + @@ -2174,7 +2436,7 @@ - + @@ -2187,7 +2449,7 @@ - + @@ -2199,7 +2461,7 @@ - + @@ -2211,7 +2473,7 @@ - + @@ -2225,7 +2487,7 @@ - + @@ -2237,12 +2499,12 @@ - + - + @@ -2250,7 +2512,7 @@ - + @@ -2263,7 +2525,7 @@ - + @@ -2284,7 +2546,7 @@ - + @@ -2306,7 +2568,7 @@ - + @@ -2328,13 +2590,13 @@ - + - + @@ -2347,13 +2609,13 @@ - + - + @@ -2487,843 +2749,901 @@ - - - + + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + - - - - + + - - - - - - - - - + + + + + + - - + - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + @@ -3338,9 +3658,10 @@ + - - + + @@ -3349,7 +3670,7 @@ - + @@ -3363,7 +3684,7 @@ - + @@ -3377,12 +3698,12 @@ - - - + + + - + @@ -3404,7 +3725,7 @@ - + @@ -3426,7 +3747,7 @@ - + @@ -3447,10 +3768,10 @@ - + - + @@ -3459,7 +3780,7 @@ - + @@ -3471,10 +3792,10 @@ - + - + @@ -3484,7 +3805,7 @@ - + @@ -3539,1111 +3860,1102 @@ - - - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + @@ -4651,7 +4963,7 @@ - + @@ -4662,7 +4974,7 @@ - + @@ -4671,7 +4983,7 @@ - + @@ -4688,7 +5000,7 @@ - + @@ -4706,14 +5018,14 @@ - - + + - + - + @@ -4726,836 +5038,2796 @@ - + - + - - + + - - + + - - + + - - + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + - - - - - - - + + + + + + + - - - + + + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/db/Models/eta_rbac.mwb b/db/Models/eta_rbac.mwb index dc4ce00474973ca6af7df809e2d0048fcd5d3f77..8182af657d21caeab7adf4581b3d4fbe14e31ff1 100644 GIT binary patch literal 52611 zcmZs?b9Cfw*DM^{wr$(CZQGjIwkEc1XOc{8+qSJq@@4M(dA_sG`<`Cwx4T#O)%{O* z@2Xu@TR|Ea1O?#ljVLrgXK%PU72^Bx-wWjXvavU|W@P1LXJuvwQ26I0(D!SDQ2{!? zheM@#YXJbt3y=U1zE7Ii8@t+?+PTo#{xG6*x3#(au>G;#mO>ltyWP`QcolZ$D^>{w z00=a4QgeLfx*c7^ak_H4^)U)eA}Efl?Ii7_bc*%3eO*98-eNpX02u+&Jhe(b>^L@# z0%0%(TE%+Y^V#F4qo3{F5_Rap_uiU&LVr;D_1xO?VQr>%bl_CqF>)Mb-T2m;i}9yl zl1<*e_R_|+{>{_)>#~$xfBJL(Iq55do{!Wm#h1r}dHP~e{yFGY|3$v%}T*+$B#{)U8Y?~6*S+It-9w=)KdpW3*CqK~SP`PEQ}wdE!WCxCQR@7H&PT(C$T>Ks zwIs@}qdmn?5?(6u=DhdDbqtwMEOGe?Ne<5k0jGJi2ol&$(#M-Uzip7ck$ukP`n>K& z6&m{BG()D85X+y5qk!5HY4;5mKJDI_2Rz^K&gkKJL)@=wT`D8RSF7)|ensLSgvy|2S!^OC!A^PKG}1GUeW z#>_7S-+LFg_7C}}?XP+Jueb9z{+Fj*eOdEdH`&}CdNupj?d?B(^vv!z+Z$##J)c^^ z+fxhgJuhMMX~k0O8^Z(c(A1Cj3%(xaW`i`_JP#k&KG;>{_(X9&JOh)%wd3#BwjU@z zwsrjMU+0tTFG5KFa9nx94(mLSC&zk`sNGP#1qsSS&tAunJ28=vV8NyPdcsEOoN^SN ztv9yu$fo>p`fz>iQSX5NcAV|y+$V>hYD-1~% zc}%Yd0(p247(*=Kc$NPsJd;>Rzo9e#2psByE5L4EB zI{1VSOs#5qygKVN17Zf{w|FO8{W!wxx%iV(9bdUJr@Oa$Kb`K`m&teP!^k<Js`DqfBsNJyby9{3A;auud8yN9{sL#c_0GEr{6-0i24Ha65G)H-q?hnUSPYf@%72~B&7Pi0PdJMp6!~#9ILl3H+F_;ewn@= zAS45~*)BYCBPLT(t<;GdzXVkp-pYwAoZn04)+Z>aRFrN@8YMSGmrV1_GzMAOsoyU* zx)?4;^xL}(k6ih7KE-8*=%SsDPyOiJSEQq@<7;eKy+Z%>&e#pgsXd8)gfw#E*X`@~ zng8W=7=9|=$Z$GFH+6CLK#;g=aC#(0&5T>QH;>D2|sGq zfMVE_X@j~f@hZTo(PFGxkOdZ2)?;eC;IuY|FeeX&5T4+=Q4@u_#d3xEvkKmuPO$^j zN9F0TZh9{V1xwCW6Cdtyz+ffwVVLMlJj1B~;Vm$LFLTJj)qe&Z<)KWx=!&ru$>42)x;FairU7|#KuH~y|iMG>U;j)3FO z&F9CgV}NN`kph$mPmyU?8(dh1cYEOml6n^zL(CMx(CI)=~C zn53wNqMs$@pNtpxh30Znyl0Yt854n7ca!B1FoA`{ewqR$%mOpz{Nm+(y|G*1$Ioqo zX5EE74$lbBKvledBD)XGxT;?Z&!~A6kJIb70gHn~zPIrT(x;qoqsK^Dz15FB`nAZ{ zDXg1b`(@Yjxop(YfErn4a*#h_#iYM-dI*EJZwLMU6l2cTP?|d^zIt`8Y4+8&j%==g zV9&eYWgArUs*aCEJ0vy8n>O50mcG~ph&jkBHJ|`H>RwgQJO77TI*&-BbXERvxwgF{ zs~`K*U6=AvZf<3HB&Dphl4%G&t%fLhUIW%M=o3TCvp_{YskaRs9y5Mp*1hU|cAglw zk%LGw`O3ZFm>O+4&O!b51!?VF&_5g6JAF-4?O9Sv!Cu|phXEChtu?9ufOFmVoxQbV zWOGF;-+qufg|qrGl`n9Zs~#NRPm3naFBi?Z5Nkbxe^mePF)L9i{J;((RY23tFnr8KJTej@ibIS!vXAg1hcI4#N))JTRN*0Eon8GChw`7&Ivq3~N z@G`dmrFm*`&iO4wwHNsIRE>^VcE6rR{HzWCf$y?L)y3l^s6qf1^ow@RK9jx=ITrl$ zycA*0B>s$Debw8%o1>-vv;n-%V#JN%)0|p2@oyKkec*`;{L0Uxrh21b>?B{UQe0H0 za_mM8S!fLGDSLgc6K|@3`UUVw-yhE?#F_Hu=e2nJ+s}Th*?PR3eCrs->_RVd3cVW7 zJ;!84d)(__>jHX%7~`Za{Z~gqbX8BoG$dM~BC{@N0*DY5tHzgRx@KU4UfF(M6MO@9D~!JSr4?h#p z*;xae!L^K9)&gvWL9=p!(sgq0A(i>@4(}KIBG>f0f)SSd4vtzlp^NDtFkAzj)B_nK zNq`Kr9C;IV_Aysv5(C#Xc!ncIOmIybBCshcFA47?Sphp%VmAh3K1)R1Jx>vlq@*$p zC}g!HT(WfCAr7^8-QmWo)?|n@PWLsP65PUS9Q>}oc3fEDmI;aEKqxX-GzOYl zXmE*Rumu)Q#t_ad%50OWg_g-0Iv>Fzqe82LD@VjIB7T2FQgEgb96L!D;C_|(4oIl1 zSfPd(PVa;Lj15YzAZNSTJX| z9B2efBpx*F88GU%6l97Hkh#dR2$;YQ@kSJhJLj=hZ$cG`-@_H}$HlqVRkpGw(6_CW zTT^|=Q=L0`ULl|gdvJcHJn_wfBFu(m$t!{!wUnX3Az9VDKG0`bT^IqH zp^+CMIxI`GL@^e(HPEO3IcJ9)HFhyW$!YgFCLeOyQ&vXKR0&ht85Z>G)Jyz2ip&){u~pa zQlt+9%CL$j;`ujGx~vQtDexg!x_vUX3Qc0_Pwb5Scuv@O;hN!932o1;1i==6L9Phn zmJGp;s{4#T^;OV4a z&|Pzm>52;sOI6g2rBJ1$RL!;u@>#H?yjYT#5|}I~HXVgeGZrx|C}KkA{wdSK5Q4&| zQFj*lK+>{z_5J8q(#1Fw@wc!>M25+;r5L&Y8jTvsZV%sJ2#Bi{G zZnchGKs1TSKky{hVRq}h8Fqq39heNOh)d>^Zy97tAu~@9Pv9QOY#>ijhfgY z@uky+=4*HAk}V@NA~n{?Xjs_?xwLC_=%?ln_gtZjzer{k?(;F8L!+%MdP`H6k=Y8n0L=y2D+|VnSh0LHMJYeDyK7@ezh?(!cm>VIr)k_7;^_CdcTC8ixEQj1a z&en?5*#+e77=$w!7UE$`wq>OvT7->Z#A<^_k3gCyHu41;Fc4TMkD^rcf?p*y_(qkz z#PU%N?0jggIUB12MyqQMS;{2zTSmk-&>U zV686f&WRq5d?wS0$wx<`(|ePF@$x~60sp8sVR$OD+|&{kD*fzEvDWIWaz)VBTLu%4?UaEj8bj3}9ijBgkg@-b+zs|# zC{=Zga&W{5hVt zU5B!T+AGo+$>6C8&s=VPZa?|~p|N!Bpw4#}AW@hkO!p?jd#~oBOqU2+02Qj-h(e`) z4@K+;vJ3m|shyBV@D&;E5B74+h=41y6T85_<<9%ETIpXvSb+sU)j>(q_={`ltxpuqRK1cvnIw;XwkHfTBy0CovzM%#gRlsrwu#IWh-y zyd;GjnXv)~2D%eC;zHSd0@fpnh2XOZ4?>cnhyVtm5P4Gk0(^3`;s*hRz^qQ{@;6Y@9JOM6UF_BuVjXnKekCdbFSb ztZ1)b0pHQE{=F47)Ysy(xII3^S%<(GbfgE&QN%Z)AU)Y5*v9TzH2-urxTq7QuT{t&j?*fSmAd> zjHu2CQ1 z7C=7)yeP>Yc1-4z=^(W(J^fg4-kHnH-(RR7X)#(y7KtYas+C_jW4rNUMgYy={RK~X z{6I12fFfdNfXa2Zh{dzBMO}Tr=zM%H-B=v8zQ2gjGwTzJIiLDwk$k$^9-5NOSTf3d zOS(wvdIcQWIf8aWpyw|ZRz|Bkuo0N^+%47#Xk9gr!dNm$(-dVpM~~n%4$kIG+;^bf zCdhd*7ZyljXDLQ!C~{}3nc0Cu&wAZe<&<@R#!{m!VTHV{+0#*7LRT?)J<8g zYrBGRIVep0sZA1JQVruPvgbA)&n%UD4o6I(YdLbAxCMt1&ksO!fk-mOq9}nl3>ea7 z7ot#;4aCwUojQgrIkM!LZvXRlLU)d50{b{GU_wjzI>O}UxczWA2(D}plAKZq(Zjr% zf%~0eO%-!-K~NViM|&^F9VGD7f*25&#<*f2v}v#zd6qL_ZjCChkilmKXo~cCsA7vC zp?MN<7Fal0eGWW97Eu;nh77cv0zDZy9AH;yb?ALPUObU54m>#m>EfAEYC=m~>YEsH zZv;d-M0MdlRV?g*#Tkd6-Ff42ZINxB209EMVk# zoA_t-1%9j*)$hmQ@WV`a%5A|Iz4ega=(iyN<0S$I=B=P3#h|7)qg*e-UR`tUHovE> zuU?;w)7gEM`;m_k8;tkdhCtvU;ktk=LUk1rig-=UsuC^km*00a57p_ac-n4RzE)WG zPHu?Idp53U-xqpA2wIdRCFH314Vx7C$Xo^eJqpIHp7L97P&>Z-%D1rcP@Sqq?_9Aj zfJWj}L`i&2yF-e(DB~fI4`~AEgAO?NiZlypNuh*p{28lMdlio1t{pD7aP^4Oad<|9 z7EBp+y=BW`Yz26^{!?@Q!~J*=643_K*(1IzBH_Fg13=q0$OB8uv|{13p!Lt)TgWq9 zU!gv|w4k!={SmZ2zz9w1(UDB6EDIeQT`%Bk6L{P+Xv}<*7Fxy|h-M#sRWY;FM;3xh zJ%%zd`n%JtV97>-4l$ULq+kTcSV@2fUM?%wkAo&KejzgPvk@sm&Eu?Mw;ZsutfBHm zC14@46K&t8p*aYnR6&Npvnc5f!jVI27^_kF-Okc&+O4ClucE-^{MgKEe!OTzz@86ioKbW4=nqJQCZ9B5S2$w0({jZD$c_qK;D1n|OfB7De69N{A6`5czRl zCt>tqR~<@e^wC0I6fS|t?LiiYw)|YrDjUxc>P->Hw|wHfnKkW7NBO4nWAnH}4gFkkj)MwmGn|?GFiZfgGtMo0~3f_11!x{7h;Z;F$ zA;<^7Zb}6Y5i#L0V#10MXYrkaXJQ$)Hcf-+zwMwG6%q4^@55uFkR$^J?AYvwSilxT z1{EFc-*u0UT_)tr#;BY2=GHkYu-u!yz5!pb09Bg!DkXn~Zq-`$#wGE6hhv)etx@N6{( z5<}`ojEIzjZTo>2EzVm`fgdBvj~7q)J@K|>h;i;&S+r$1#e6r3H8Pz|wQw(LR(>j- z$&fh`=}S7vA0mtK3X51Gi#rOe$Ke&>6(>%clN+j5d??6pZ!fndEBiZf8|QI(Z2}7M z#LA2z;L2&8p}`I5X5kHoif%8vAMdxPuY<4W?E8)PpP4@<`|L{Q8|vPvg^U|#G&I<& zOO~IA?6C;hQN33~G#ACipEYo~7emJ9FjSiI!yuAHInJpaVlmM<%R;r4Iq?Q~oT_P{-V=d&k(&RUJf(TiW z6evA{`>|T#e30YM1;j#}2EcJ;N%)_!j3`*oVN($8`0XpQ5TR~ZRUgV~i+7^#c(BK{ zuyMNGpYRW3nJ|OT3=fDgt_Tc8KA-^qbOxfzM3w@@Jn7Z9!2c-nak2e78XhTnT@-$y zBvV0^52>74U^{)G9p2>4E4+ibaZ%+cQDypnlyaQC7HXlmvv7;`ueMK zurHfHNC!t7P5}hU<~8fhZjme*6_5#y1=wMziFicQgs5hXmpN*i_gkuQ+JFxa5s=-55 zwj0p~sxr{e6?WtNonxZa{X=mzMo09%8}f-38drgEuquCDM?K^{Y$crHGiap;o~EVi zD^Q(qfK^U_2>+qAqnM&()@=l8)i-q!u8=;>wigJQu8zZ1h{Cj=x_{n>3Ut9-tj{MNlo5wypwF&F0^7kmNIOkOP*}VI5i2HJfyKWVBx&?$zMH(WuQEUBMi;(noCYtqzSC!@K<1+*FRX;mfY>@%-bx{dI^bIIFwg7{lmR z7)uX}8twY!1t(0^-Dq0}E1(u#uj89e@5W62!!qQ(tB4(Yg0=|X>N$k>3s9hi{eO$L z0_6K^Dw{qjd9xifOW#&nWW8lJ#dTgHe9DgW!Zl~_8qq*HrHJWv0LMeaz(hCt0b6-p zAt@C8NDsh?!7tmDs#!Hp2eup^KWr#i|V-mP%Zs-Un;$Ax!*; zB@do!Unw5Jfj48S7d9(4s^XmYc_eofV6SxYVJil*`Oz7Vqcd{Hd{pjVk(i=8lQy8Dyxt*- zU%O&K@9Q{IIV@`};Dy|+Oa`K;U}j!vZpC=ggA`c6Z>``8Om*|gS-?5lI3a#DflN}) zx);eFCG){hKAQ=h_7TI`Hi;(Eq{!5l#G}}@coSO|AW8-a&#?%Rh?3a;oV>q0Bi^7F zqM(4eF@DftGD=loo4ylaj-^;fOa`^L6Iq>6P#cuwsF{+12p011n>JIdT3K^=$#r9# zZ2iehUinJS%?;StgY0EnqTaLRoi%+?+xU9+?&oB?yF67geop#lnH=p3;c^eecd|)g znlB(X*mkx??#k{km37zcLj)av^3K>N&oyq5F#M<5;FwT4H4n0II4r&qD`$#KnoewM6&VKRY5?zk`0MRB`Dywo{T|HR?C0%Y))w4$RrSf*+7C8DYr>rTwqrCe^hN$GbVQk z4TW-S&yT4>R<8j2nKGZpXS04xn*S)FR(|mOLT4FTqv91>6OKc0QCvSYoh|Tcb@h1< z4b#hipM|FCZ#GLPIy|ratHN@=mQT6e<>g-_oGl!65{MH~M3EbBA{%i4_EZC2KZbp~ z1@#x=|F{K#0iH&|{J@V*1-5VFs7HJ@^Y}hj3sHSBe%T}%K2KA=J}dm#PvXY#;g2Jj zINhJsY4=14u0tQ`ax0N^5C5vKP=X9j&#A@aES_dkWE2d@@5R)JfDo8LssokV1q)i&vBE^-0V*9hh zwo>Jq3rqIrj0)u6a{AiG9Z@2s%c2T2Ur>fVi#(*KsOF}m;0vK#+<9!=z^GhIKIJ>B zTb|LWl%D@!(`Z5@)x>gW4IJ30Ii`xiCM_xAZ2D6)v)InXAG@y}n5PNO!QIlLF?jRP zqVd2J{rI~fR2L^k?(q=_W)@Eol#2@1-^8~6z)HBIlL$4B=_F`J@qc#{44n3PppzKPN@d$y3~7&D1TCk- z;$acX;z2-F&dJmeU@B{s-Gok*pU2Op2T#Gh-ucHQtKi0&kG5UhK{=IO%c za=<1=hDM1rzyM(sGTI5=ZGk-46f@`WQh-9pg=YD)1gfFcC=2y&@b^nW(2GRnYr!~` zcz3vW{due?|Cwl>Ga`UhbQUAbl!onRK@cJr#;Xg%7%Uft>qc+cRxvXdM*iO?^MhvZ z4_!|T7CgX-HQkhMfVnV4Yb7?)f@U}C>DSOcs^!pJ7;1@rLiA3))ok1N*t#Z0TzQ~k z{tVt#ErN{ey{-C#Em&LN=4NdjvANdk`hBM-x&j%iCtB0$K*zH;(?PywGMDkVXhtj% z*+HI@fWq>IC@Czg6#psq7p0IBg|e_uG@p&s5AZ65N31M_3Pg&+t8@jIP@ETT;#miA zP!pPUM>?8KCA!}l-Q79W!s1y~nTWV3J91&fO(G7xdSUH2cuazbYv|9|DEDOh9(zXTJ+lWemCpbR&%CCjTZVeB&HEV$hgB1amg5(IYcz)a2PbW4YH zOEmCMDQ>K8c= zCuJ07xPZXW3S7?Z4ahG>4BV{`G|b;};0^NwlDN>PE2%SzhF8()E6t(zJ^^VTI7J{+ z8nOk!qa9=(43EJ5Jph6{aKpgZ3vz40SWotVntL`cdOQ8NJI$*WMxZc5k{S`sNP7VR zas)Kr2ZbP!G5DKjsIzy503lMbyCrV|35!##=}Hdq1A(~*@O)BDTlp2szz&Srp4&=5$=!^)W@ zQeg#@f+Y<-6g)&SSRq_N0}{&K{Ij=CX9BJ_UscLHp?9K=+Cc);EVQ?m5Ow7sTw%R} zY?$87^L18OutGbFj<5oh)~#BREsr@o!#EHVr+_IC(#+vG)&O{gmQp56 zAWjmH7XyX+wG+s5!T<{s?*vnZ7*Rp{rx@BC+p@Lnl1sOa2WJ&6Vy*OZisKLo>WR!8 zYH$ok$xl>-|Ho`DWJglh%{mYzBY^0Y&?@@AQT4|%H`7>1G#ju%vG}I0nYt{^col=p?iEfcJPdrK2dQqs;l4Ak0%{i<@g4E-5r!DAj&O|gLhjCu)mn_aZB2z&STp6 zkVmaoVznk|Ki-|rDf1Uw7tuvbVv?EU6x7M7e`D?hdr;>w3Jx|UV@MUWzn;?wQtujg zQ0J%RuyxvBzG9SP8wK>2uYi8@m6yMKW!n5l8TI|+_T}=ImW(<*38Z{^c3H+JdL}D# zI(?pnCs>?gYlzSLkTWPY>B+>$iFGEkUKwb~A$4gGb4|5v(o$McGL>MpKyP`cnYH3#h5zr?)o+$BM>U_-|f@oD4_=mQhd)WF-YW5=w zf9#MwUC9Z(cOBG;<-C0^cc$;U-P}59nL8S`w`JW#q`Fz+>7vVHGaP5|B6tbqwS818 z-$gF$dtp8JfhX_y1^$n^?$5VYqbX@6>y2Ez2y15GyiEFTwW)SOp&0y}euVC9-S%Ig zVF{f*G`#t<%*ss1pDBCKuqGOoil3Aesw#DcaYHxY>itGNh>Eq-|cl9** zJ>A#xpCx-do^@Gl$LpDgE^kjo{5*aiPfea3hY`Mqxl41%<5BCyx-^zPP-h#!OZTJwC8_#qRTEZc{XyIZfN)=;^&xtr@A0O07R6r6@%6N>6MoO$9 zkt{+bJV+!YUjj>Ns*=!p#bqMFKexrXm04Qx>TKHu)kwEPg0I3_Nqr|$As40oX1DZX z|7N!~Uxv@67S$rP^!K&UN~L3Of)YJ2%+rU99yo?!Hslj2Hg9#N?XWZB9^PBRPl|1~ zr>V9j!BWbzO{Kbs?Hy70)cR!Ip$1aRX*ahHlBVhS-h`wqh@w>RjY<{SL^-X5byAQO<6c7ki=#rORd%z_8(DR&21-uKg1 z^GiTh4KXh2E+#gCm0c)ztkIQOl0ipMmiMcORKL{<%9fpnIyYCxewljTbUG$clgLfO z$nA0MxNKT1qj*}dAvEcUEnWt(RG~#T#-SoJN^|CDN8YK>WPEdz=t<_GH`52$?|OJL zf|0=J7RKmHzt873l;&==Bsk>GF{EMibQQ$Ng<{eg#aKcDm%xa&Pcx5#X&fG1@75_X z|6SKXnZ!(@aZRExPB4w_5*S0rFf?(8G$aRaclER>2by2^c`2;aKP)@jnrhAK_-oEY zUKqSAGq({9xGHY}%?$E4wk5>WqaBRrIX465F@nbDMPvu%THcfRrP@NV3@K9jut zhwt{aPvYf1c_k$02 zNNwv+j%OZ6?9D z4g?{hJ?AY3&L9ivL#nzdjYthIT|tg?9T(oA8Xk&IFk*U80_!5baNTrKC%ihBY4WIe z&SA%qH4VT2kEHaMDrjf+T$<-GA{^w*Rj=14{zjZ_YX|l@ur@g75;?q0dpIZf=Yw*) zyd|H$kecHUHElyld;ENs(lB^a9-C3psX1z{_cjT&tNGQig2p&~bA0Jpbb1bR{Bf!E zJ?G3hLh(RIs+E91s8 z1VKSvI${>E*cr84D6}kgP|%BoQKubz(?OI~UUhJQ24l)-gB>I9PK`b#X-FWy1ppaH zQSQ5;03@(P1>CIxNqxipu|cw?x?6V2kfECS{vkTmyp!j^hNJ$tK*EVmsOKvwS0jQ9 zHk24-X|QSl{kvh$*Tbd9=*P9&(bH4!_FJqlv6jI*7#JLAzT}ms&0QmzL&LI)T5g7F zkNLCT97`dgAzAY#T1@2vf@%&!Sp>h#{qE`Epubb`yMfIy4HPk!B!#D`B0BG@9f31$ z8oNR;GN)r0OGJiM;0nr!eUD7n3O^Mmu;U&T9{=pScqGbSs=67~)a0?hlTc`#!juJ|PSmVQ}UBqVphaYg~{cnDtd=mKweS~2Js;j&nz6*2a zqHca%2x0G^jPGUvU|fzUr~#**%jl8Ty1@nMyhN}CC)~bG`UK6IG#JIn>73M-ouGV} zYHVN*#YsfUes<~&$R8fh@!O7MK7?_{zXJkkBM>E?YzJyTqp2{2f;w6A{T1)Rb65iZtj? zF(r*rdg0*zRxuJ=^hCRci&}I(ghgJp)c8dWz#eWflS`-uymX2u{tq3DgWrD7f5!!H z?#|~_lkT^ddwwsWE!n2fTlT?}=NX2%DZAQCu+csIv;IQqWH`V=DU#M9Es&vDfI^Yg ziyI|5O5ij5QW?Ud=3&|b3fwz?FF8Xl5bq3#Vv#^hLv?@od>uFU-=#uI<6=A3s5iY@ zFK4?P3xwZ)hB#6o>lpRu>;PVrAvlC5rHN;Rr;065A@kur@Vj== zt&%pkEKSq`5bT{0!TErONaEs$Qwom)u2Df1utzXAhBcF_^9=5X{Rz8P_Hr<`!8`~p zM(Iqk_dMQcNGF#7jwV|T{uO;@xz*A$-C#~Mi3sj{yagNdhYS5 zBJLXz!`VLtYF`@p&e}yzkuJ)!4infQyl?}$WDH8saV|`Os?CG$ZNY`JhGflqy&M>I zJ3BoXvR&bq2mwffO_(;zoQMJ300EpQ-l+g~Zu;M!_vi1U?w9R{%#T0VujT#^k@tOR zHJhDFgb10QDeEFK+uA~z-Wx96{Qh$zFi&GJm-qF})DV=grZK$NGUF!2Klc{SaSD!%+`2YOJjLm)2eau z$A_j5zq=|Y`lGvlXUH0}@oi>Q<2W>a6_3*q&*L8M7r=bLF6lfq!em81is9wzPai++ zU-yPzHY@lsym?DL;D@Jg=i8B(_|lE{SY;q0oA#?2tE<33CV8Cdb_&90w|7SL}c<=8- ze%;BVtKYlC%#26b)8*s6sa1m1h(_b}`AYHp{w&P4%Fu$h=z;BMJ}6?Wo>@yGRiVx{ zYZVB&WQ?A}D+b+fzt=X|?# z@K+gF;>|F?)2qDs{8yuEnHl2#<=b8BS(0~XP`ay|67H|=-`x^2LSm^dIsOJsLM}fZWP2Rzgqxsdh%Hiqf5B(g%efWy>RBX)hK9?u@XbB9L3wE~vBBhJ11ICxd()tmjxs;RA8+Mxz9 zf2>*q#xEdMl;x7ME#(y|x~RpkEg>H@E%Gt$PK`bw?}#g2bv(6T4rWovW$v;`os_iY z=fDjz)Tg9UzL_q8N3_ci3BIMv4|mq1$%-~bdW=PjjxuB;o=y-=p}fV$Rd1FuJoBz6 zYrb*Jo%nfoo({&JcmV$zN}nzN7)t(ozMlWfP`VK+3-_h0UzMf#*H9|9Vt)o1pnWw6 z9^~!w3eG`zimYo$61t;`2=_vAx_&M578UvHBuVHcSG5!0x)OM+3*8?pG`g2P6tUyU zTEsnz7c9pSuOj;lf*~`-Bd>i`LiutRGe1s|=^S|K;ru@S>ixj@p$({tvopjrjf7M= z2i~S5;7VF}RO*zw;N2a3v3GUR(l@uoCuC^{|3Np_zofHg(`95Hi_%^fQ78M@pmZ^D zyOy5BNL|lN&cGNJeb{6}9J>#@{zUHg?%?_Kc3rxkFboZ0bGNFU1ka;7zsWma^(lBh z&Pb&<*nSf({M;tx0LV-vuZUVeEP+*ylfc4464Ue_&Cbpaqet&WK;=7%Afz_5N0Mq1 zQ-w%m{W3B}JfRpQtTxq|SXhu|C?3zMEyKSaf^P6F#u4ho0H|_~FcH?cfvPi4X!Q51 zRwAk+s;>uEsyion2&xVX==Q1Pkgy#)gJz;ed6iM2}!$W1g;Sq8H(2_FiwC6^$VdY4hRkOy=jbi8xwL9(V(!YQjNi;ip*>*>X8PP{ot51*xu81=F=_kO-1|YzT zotvBG`||NTRu}wR%}|oW(aZl*Ua-6%5Y~$&l)nuN?Oac!i!b*96B|;r_zgOL61ZtI zusPLU!#TX2ULt4|zAbMZ+L8)!Pfl@EKQv85ao+!k2=x$mCUJxyk1&syla<37KF_jm zKg}s5eJy9VDjxX`)*Oz}8dry(Cnd&6zvX;eKJnXDa=`MMp2FiX+?z15Rx|9SrEI9;IcJBVUT)FB%H(<1 zA*B~v?T_^8?kW8%N1@cpv2SaM#q^&69@_X{YiU`L<=a|9Cn5MBeYi^n+&}&ie^>@- zet$lfVj7$(fyiv=;PhI0*^%9|d`!VN^p+NE9VdG!*9$OkcI%S4iCk z>_qk(*!F)M-ro56qOr+iw{-^S&Uj{Ub&CY&McWF+J21d>X;^Ka1(4cN4CvBJcH>1d z2LKZX9y!Dlgc30bB&+lTml-5oG!G?^5=h*#N$g~A9_eSgXyUy<8Ja6PV?$kHf}ccz|^9=-68RewKaTukuHad0y~2s+EBgt>8QaUbe zxt%s>rA4sr;QO99KA2QMtK%sl`9JZC5pv~U{PO+p65H*+_?2hyU;N^ALbva%&2nz+ zT@=!(DM1_h#;+RO{|A0?dH=<)Mv&zY)B3k3s_y) zGULD&_p6qDC(Sv5ah$N?#4GgE!2vk+W$5VxT5R#n@7dAw+Hz&Gs_l}b?(uvdsH=XR zNAi2axgg-A>q!~A-H*EZH@f&Lk1F=_UOS9)Vi-Ec-QeYu2X_@T9TerYD6v<2T{->( zVAQ|ZhItN(f8Ez0H^T*9OBsLSSfRoH%y}3pguJ}{lz4b^B=IV!T`>>>a}s*@Qw^{$ zB`MjG3>JR7-+TF9bGtHc(LS7NmTy-<3^Kb8gc&sL0BH;7G++3maut*@of@ybfxDol zv9c~sF?m5tIMhF+vzJp|KyNTbQfyP`g~PrBEisEeQ%RpkS}vyl`*+qp?Px)RnqTa) z<$7*#&|c%RA3ts!&lX!=%+8h#$ZmPY6MUB0qrAF)tm5s~WQaJokU2~@m242`vw^VaA2W9AzqtSp0@ONC9@97 zWbwLbsy-s$a|5Z03Kh`=5tSP#Y9R(a&;RYUjw3K9rg0J(sfkX+JXhfle4i&AK;cxh zEJ0-K3{1;1!o%DcBr6S*!Is=7kdUNBP_g|j@WQZs^#2j|m0?kKQM+^r(nv{ncY}0; zbayw>(%s!HjdX)_cXv0^DM*Rnc?RG2tMgsw{8=+R*ZgAk?7h}qyX?o4M9F4n^EJ3{ zRXh)r5AzW*IgTNmk1lu@)ZD;TH)Ax)Z&@?;bkvOTD+%Yx^uX0z-q2KR3~P zm1CH-K_ZUXY%oeVZL;QUq*lq!e0kQNp0J{2yPucM<&c5a%Avd*izhN}aUt zhnN9-hTt851-K4_e|FSkv-n;9u4lEL_UWbR^I_l1O3epcPrve~>o?ZkWY})GTcVb# z#_KtjdhD!zE$%Z8I;bb0spYO@2a?pySJ9(4|FGEP#GYCJE0MO1ihajH);)Wpcy{dR zW!;`;G9Nb5(ut@;Q}(O<$6tNG2>21X-2Sd%1NNoN9 zZ~H;KEw?fN@XmeqHq<*hnsCt~ILdTvuO~4lMz~=aNi!?^$yIP|aWh)LV0(G4M&P2c zU&0qLTHvWn;C=scoB8ter;46m+S)N%Ys%p(r?l{0Ykhvk=Eu~Z;vJ@Ro{M-c>6K4R z)}JJU*9PE?GXV`lq=URhL>3d!>_25ySpv2D4L7l4FK*V=?Xku0*ujCL9B#6J$;S^d z>Ewecq%w$sIvHxGbLud&muZMU91TkMw^b=a;6LJIg;g&;6rsWJE9I{6D$DKQpS0O-&^eu@E zVNm3O3JxdJk#Gk%M@*`5<_<*U>ubNLur!n~cR%->iF}RPM#Ib7Ba<&Vh(5l&T>eP5 zK5de=a%61f$x_x?FPw;DP#P#`> zmoTZqT$h_j>2hs*8=nfX5L}3N($nLe8Wgy&-UQp9=-=J2(F#<5#0!@0dDf)1AP7i? zV8c)}%fG&#j}Fh#w1mL;Ks%_J7L`h1j`6`-@Ar7oY1P86Iq-cBOey?Eti)(#Ot2>B zbzNb#PnY4W#E7C$9K?YSML$S@9fn`p!ym%pHVn(ExvSOe%bGS#Uiu!yo(em!AfZF8 zLqN=c9I94htWS`}VmKP)G1EgP@1A7@xSe)^KT6(h#OXC)0WS_6M;>2~OWs9;9s*@* z2`N|4`S3PhbwmoBJSKE5(yW?fAx-ZmvMO&0j;kN0a zC`#)L35#M@;rNK)zHs8Xm>ikz+JX=O?jg$*#wjihO~4&(BHee+?)t`TXgG_oD& z5Hg*=&@nw-+0) z_k0RdP=SsqKZ2f#Zxeh-QAPu?!Qe6Ptjo>-U7$09B2{Jx9XD@2^_t3tW=6~U@Pi9*TAi1+tvG8~&nlHcXkitw&u?AeG;0$r=tXEyttoqU`n zt2fAiatw>WV#mKKG~11T9CIvYqrFf2ZdPtdBvpIE)j@dT`W03YvVnU2HMovQ^<~xg zoCA#w@O$9eIh~t%AdGHnJ*RQ;6L9pI!}hm)L-M3Z1(Kv9#qk%c?#QyUMUr22Wmyar z{bbPwxhWgCkZHIlhsiR{6K-kY@XQi!Wq!m-ktCi`C9cm`zUPgWsE@{yvIn30J0ktq}EymDpe!XTl`23UI zkPpgkX#JbrfT{Zdx)N9Jor`dkdFq^|P>p&0qlE(hq{sP^R|;!4@z)=p=SK|rz=j`< zJlx^Q?4GzXyIQ~oo<;X;TryQM?ym~;4fl1`fA2UEg%U|VC`Hs~>Q+H!72RY?2Pj== zhH1m}!bN%p-NW${pCyM$%OfPHmqmY?620Ij#H_}q{a_TMIU>V-94p)THsw;<{{PeT zf;)cwUcBiLETW}iM3(ah_MUXpcFWA6Ia3_#SHsP9QL#>c7ORyH&3*jDq0BJn#iR=@ z-Q789lKE3<5&_34+TjIek)v`ZItiPlG)-#0N|k=;I$eY!4JX@DQWU!LFHzGCj>q`N zE8?}xKWT4bxf+hVC=%G_qH>SC)Z^Id!wP$dOI5=P!wPMMXY-$WA}hawVEi(uY|OFg z;Ud~JD@?PmJ%(iqY1t&jO$f@D@>Lz%R^bNkd(~vf599m28fljiE)K&g^9-#C3_By1 zS7~h6Ev@VkU>m+$d)v^XR>&-8D54%>)Hbp%XBckccGA1q!DmF}j~p>CJAOmOyn(xr zM34E}vLQGSg%XZqo@(2&gG3t)s9oF$hp)QPy_lQABwc4z|sAA`)W0$A;|9~p_*Jx$~WnI`Ap zYriHP;F?r>?uP76pGoakwptjmW6%mpIV_34O2!UN@CJ?#u_5&{+3F?fy zSK+L&AEJgK!}dp6JKqQhQ@w2nSllEH`&h9k9lmn&6UmwUPZ$=ecMq!2R8y5MIsv_Z5res zMShy<#MW1IZ^o-O`Kc~4j9O)=E>_tItA$t8omO0j*X0<0P2-b_Gja_uQcGX=+|G;= zd{0g#71YNmHX%K4_F%?5ndA`Sh5nHld5Tk4jr&^ed#2}JCZW9kpP^8Py&xxAZXd-% zhl?;Wqzp-fkM!b_WcTu9GP0}uD59yqE?rUkx#Gdm0Ei(FMfBJ~JYbnmsA4N?mIXWAKfDa4nv0Y#+JFMU{T~HD zJ@#J(08!n)3IN^~x125ehPIVlyP5a;^)3g10)Tko|5gBi6Z=~$yIg7ppd8d`JYUie zI~Kd-w+B8GV!b*URHs2sh9urCf1S&^{`S94hMa$#3>F|KgWX>zgP4qaPx=4mWOxEO z89srW4D9e<{{^10{yG@|;Q4=ZGN6q3{8uMKyz)I;KRvYJe*n+Y!*z)yWrdQ*Un15$ z1!(k`6@B{g=MqxuW+_X&-ZO0_Z~x|=rz4=@KaQ3_U)_6-Kf2wMyc5+2c^JM2-Tf&G z_%44e*Ma^fw7+CrK>(QBhuXC@<6P`LN7D|3ldHhCNe;3UZKYzlj47LKTRO{$7B+*)tCHV<`9*u{JCx)2)GJSl>)$Xts z7D1t$o=2T;M2XhRM-eZma#q2~a7B=j4hL$rsM;OwL(`6;PZ#jsRfSTmedD~SzL?5~ zWTN%6KJVA6>Wz11ViT>0z&=dU3Qu?|B+bJ$@6*s~JY||}JVfAnmZvFn&wGO?Rv(a& z)VXH{or0Dv66nU2#gs>!fmt!6i53hR&yExZ=B?yG7#=za>5HkNmIzhYVuFqXTa0BOu=!zD zD41=;gG6~wNQ$-fMu@@dA%z&Poozoh(AiQAZfiynC%3a3A(qNQpcwnnp3DAV%N^t` zw+M@NW158Dhr+uQZusb0@?_z*m)%D*G{|eyF2Wpg5y`Ak8ryML#ZYwFj15_0sg)lM z8ed+T@4!J!82VT|I?OO2s!G$EfCqN7SN-%mV~uaF7^nMy!gY(zFi_MKMsOZZ(+Hcc zb{9%K9VW^0ih6E)2IH>HngBeoIO}nJSD7q@u{ElNm3Sy(3 zyLz1mTt&VsR^)|f1g=SXq}UMAgeQ+LQWqT8nLv_T5(Jq*jtCx#X{-H;&NUIC#gn5} z#j=isv}P;%L?4!bq!AI7fE45A1dG7}h8ZmaSt1+ZzDbfdM#&tpHk2Oe`YYMSK&43c0Dk4T^ z68P^EnTtA`S!bk^(llu{6O#^9$WN*Y|p>P{61>-fT zQc*2}QPITVg!CZF$ZBC&2>QdsLLen+L_#2KU|E#7>4ZTbQBC`S$`zmACk%_DRzVRR zS0xJ%Nq?Bp3`~pVYqxo`l7fk=T_TSZQv)b86Op-#F_y3}7~-++pd^|Iq)`^lD5<@74UQ;M+F^yYhE!vIb%+bA z3Oi<-B9LVwNen$-Fu5b0B0;*MM11t&ZG(@FfihO0F*0S1!_rQn;_do*C#3pXs zxrDP_pLQ7x>&1QG3Fn1*(~-Y!wnMt_^k$y?%Ge>JuUg{j6z+jKT2uei_Sc`pK(Nd9 z67khj*RdSJzQ%3O6thBT_Y~Yny{x0k+G)`0mnc#*l;03bx#T3Hm^3GO`J2oZ(@kiY zMJPB^Mxq1qg+WRP`KXw@6+$wJlG>uOqT|NXxf`TL`7o8{NLr|+ix$(uYN&oN^v*v@ zxGJaB7t%J_Q zjcn0t01fh~>Z5E*6cI{i&8G+n2g`N@_zA^9#0ew`P4H60lhNtk9asJ(7qvV=6*T!t zgUli(=Wun!Fd$>VLT&)gU7flLQy?;@{^vL*r-(U$qrSILQ}5x#FFPRfID%UUz2%G@ z%NxQ*Wv(SbXk&p&cJ}uk-SGm5GXQNI%a?>BUE+(JFJ1DyDr3=`dQ)z5-yI7GCdOvQ zL4pZAGrk{6U?*J$*o$9uSMI+J@Dkolg*+>YecT45#D(dpRoFf#d4tHF6~@8guD-UP z1A@%WLc)Gmh7H+bm@dIQ7+^IG7Y^oE|Ge(}aGx1bf7Fw;`IFM_;OFsL;>*?V+qJnq zwYv{Jo`4?04d*GOmF}BwD6gAV&RbPv{m61Y;a!wpmxXnrH3*x8(YITs>2GWPRAHNo zU1L98LY#Ful|oy({K*D>o-e#-U41WY7x!D><@|Rqy!IuYu$6m4Hu(4TkDXloCL$>v;P>uINsY9H~Q%=dsVOMOsbWCmWGbvg<+HF?TX zb3qStJx1!mj1)QwZ%)Wt&k9jsRTvGcNjB0vMheQ_t1vxkSK5`NhRoDQgimr!;K=Y+ z8})`A2$iH^%d@7$VW`Ts&JYh;Y@lhLq40hV#cppv^sKJE$5oZZzueUM+`l8Yi`~ef zx@^6HNj8BlIy)Vggz7IDAsInK@m_e5EP+GbHfnek)x`AgIx#6R3ZS7#CaQT*$zh1_ ztwQz(k}P5UOU!oFC!k_h61V4NmBi$r=D#=3%WCwS&RJ0~NU(J-$Zk7ntFXfBOcXMZ z@v*XsMp;n|6`NgWcb>`36!unM6OK5a3BR$vB9$FbewS<-OQYVxch5XbnoOoITI1Qh!`Y(~ z+A5qvF6gl*6o^NZWtq;}8-<(cJY|`=t?-~Sa>lY{ zH`(9p@3VmVfR73`1_x3J5=Qgq;c{=tx+4=sk8+%2YZBHZi5D)LQ2 zlsrGckJdrQc%~q1^et+#y*Y$71Y|44R_CFVXwhKxl?%ZY7PirLN%|D@_|wurgDH-eT(Cs4>F9;fY|FG!YIkwn!=^aJA4|MU(Xl^bY_g zt9?}qO{hB7TCHWad$i1Z*U}#BSvlbGX+(3ySz+_i&nA1Z_1#BN z;Wsl|Xm2BlO*m?eUgV(k=b!htkNLP$tqOYuJt2k#aR zVc07ui?CYC&8HkOyozKJ4cCXy&SnxV8N^LPVqG5B_yEgTbAnysofd)H{Du7!ePWO0 zws=GsRiv%83%GH*xxz`;MY>sM|1e2{nA|BuYu4k#B6QG{tpX(HC-=_QxU2DTKkcEr z;hS)sWzl8aNP_)GSB#4fHT4}&nUrFkG`06d9(Y9@@mfvqHk=17CpAt~t`Oiu)R15^*2`EoL$fqJJ5y?J@tHPGI=?i;HM&}_PP z9tz}h@ZWv$v|o|s#I*NsrTEl|jzSs4bNLEnR*K4FlL1?a$im;Pgl1D*MQT}=jv*E- zRpOcS;(`%bHl4}Ts$=*3zSjby9r_E7@dbwXg^Jzg1#zTfi;ays)__=8C-JF643tDh z7~794wpt%4@LAEqaNX%P@5kNe;RQR=Nmi3s!y1VXH#m)Uil>WT7b~M3=UdO47HvDE zk>*>)Dz!mn?GRivchPpK(XJpNk)&;Dy~(~(n?@gXHf`}7QaYCAn{T;GO{XUc|LNLb zc)+PfA8)li9(+OI^ta?738@T?`ETc8t_p|?vL){^(p(kjaI9eSTv1Nec=VP)Jw*A{ zNSFkwIdj>S3zQT&d01f{acLn;JVtzjoTSH_dmBBK2Otd!UKv`>J@A4ythAGvz2}UL zPgahZS4`Fxv)Jdx;>N$6JfIO-TXAQxy4RKr4K1s;GM|iHvsbGe{NZn!N!o|l$C@G2 z4<|^?6dm9eH@&Zs-Y+za{KcZH4G6hoEwOHxf|wE|4tUMj`nn3A?aau|QTLvd70OBs z`Us+TkgGxl>fZfpBoazr*QXj%@6hq}ruZabkaF7Pp|nj)=&q0O4Pmu6sIIv2XmB^l zidgE0-~5(zQ<;N}6PNFgSX+({uED^{k~xwT30_O_vtn3-EFoltYz0MM$l z)}boT`TBDo^^TO?<+hWKeTI$s`s56V{SpJGb!tuk1gd2P6#n?l}@OrD(LoZy-=Rc63-|DzOE zKA|M@Btkz+91)2SAAla|^Z0>qqjyO*IUSZCT*0+V-U|(4!x&evM=O5Aa zS(-qRc`5{|Qqg(sf=vXnu8fe56))3N0t5>kV5s^@MH(@J&4|hi>48%mzvKU9fDH}2 zQPr|gw@Q!&kg7=@${-(`w0zbT*635VLlg=+hwF6=wlw_&H>Mf@7YVmU5d^)XhQfPG z!nciICexfTs#A=`DA*QI9${uRgrr+T2fg?C{Kv=3!^h#}*TlnF`=0~dzPL>C9XK>1x++7|&YDjzmW!GOHR!)vKfS{=XHd*RItokoCjO~XKu3X& zICgdq(otCCY~)nQ?odDI8}yi!H&0t2Gq7zh!6vT;op-_FT!=)494@i{Zn~CGASsO*KV3==As(uW8BsH zxa4zX*k$==4NF@S%aj=^Qg$rwqSX8679jsY4Ef+^$a|arGS-}o#8bXNzN`bXPTh6* z_Y902Jon0Ng?j5<MV+-3vGl{Al`(ArRuQr)IpfY`g zd}L0zlVoYF1w(n3z~(s-h!Yqc0n-`sTHdQ8yoJ$8+!RCw|AQBskNQ~N8zFBwcXYDr ze@LjSypUbLVzsR`?#|G-0T2c{$Z%CSmdMTj59_G#=UbTSZw4v#ISmWMj+K$8p-XjH zpPN&>8?-@5O&qRx&bDud!p0vDY8sNbby5^6oim<&KL9aSoA)MA`5Tluc=s&JWqF2`>$q_l+RsE*hb$}_tTMdwF@;Q&T?i>mc<-Gyf zzg#*n+N$O4gUHj(*WOO9Gf>!=1Wec2xla=y}cUyiPi^^ zopm0G(ilB`1N|U`G1DK5ZzCsO9-n?q*p>ae^;+*-1ueB zmE(C!Tf1ez{z=W|?ygDg`L5g7({&v{HFageX#4EZO+#WS!; zL&_MtuyzrM2n=<$h_HAU zI$nYlFVf59L;~+PjKXblo>Ey1)J4kgal^!IFxi$6GQ}N8d$7xLL2u;=5g%UbSevf*e$Bu~*im$eTa#V^nPU%Vx zxHTa)fe%J7r;IV)4A>2Rui|v<8u?`w*ceP8J<&9BNJxlCP`5L*rkUNbryXS)4aTn5 zWAp-DXxtsqwmZcrlliZc(`KjlPAbtnCD_MK{V#Jw>QJ&4?b z@?BbV3lSp~Td1*d%!SkYTIPF0-A>LnM*tMHFjh0FRN#os6jow0yNxc?43fmfPcYNu z(kl;O3F7r@d(DF?CI&gHjsRyB%9;OgEro+H${i1cr-~5-4*r=UIm#W%9Zk>X^~qhG zz}c()>W5_inz``uDcBiv$co;lnxSRldj0_OOacXa=mk$X5xp6O+O#T}#ZyxKa06Wk z!6H@BbTP0q1hC??dsVRR|Jzp?6{aZ|PDHYci~7d1@}D55-C`p8HYQqRY5&RE)}V;N zezWs{@RDVCl_;{}U;%|6-_MUnLfr~p9v=!#!*E6r0V1NF#K>-(`I)HLv*M1}Y(VQ^ z1(5))cz>lywo)nWT%L)peyahAb&o8?_#$^PtW=LbYP5CD010d&B!<;M zcHaIwV*BTjw+H~U#%L#qlf;v$)8Wg*>0JVwm{At>9s(dbk)C=>-d=eS1b_q}JzrJk zC?LOzGlCLB8@T0d3L1PXxZ6Q+rM_FPuhc?T*t-sSBFawXr2w8M zVHGxCb2?x1fL@vxCKWNyglKidW2~5ibDPe8!g`}aUNW_A>wVziHe50l^=tgK08EpZ z_W{ExtMW_4Rb67hO5ZVS-_6M2&-4ko8O0ih0}+=4tCMkg<0H+?^zyVTI&J;@Q3h+) zH#p@)4e9P`d^Q-VKBOfR>yu_I17sYD!NtrFG_WNTQ61(b6K9|I4uDjmjT9vAbh@f3 zV5!-R-9;B##=I^y+`mJb*5_`$2R~(i?dVlORUBn`Pg?8>rQFzm#>OSPfKad8Kd)wZ z($QzlIIYE?7mA`*Ms~mI~u2Dp0 zGwSlmpYDC|qqlS}MD-pFFl$)Z^?ot_{&v=V@>hs@`YJ>%Tc&cdHS^=RnMM2XH(1M- z4Aeor{g?|N3d3n#m_M51YtL36l>I1RFm09#n1A;y)M(uOXWY<&zJS`$-hbq3nca#j zIkT33-1_n}6z~~;A!us5fPb6h+p3Y1y2a?E?Q1S|nwVeK<86BN!9a&38V$#ie$d?- z&a>tV`WMdVPYj$Go2U%_1bvf4S$$BRg(nF5f7Hf58{2sM30mCNV+7kGH!Qv*5;LHO zt+@YF$LQtq=Y3-g6ahs$%Ui)@+=ynUcxh$a7rexDDVs1B)&Z_^I>2{E#X8qM9wqZt zq}Ker`O3ieDqDesLH+@Ox0> z<=2c90%whVc5cIo{T{T$eoJ6E+a?j)BL;GMq>Y!{ z$9P;4+-?S|pxth^Ro?4W^FZEiDqg+^mFGvEdBodI-l}`~0$}~8i=1?@0^G?HvKN8a z7BE7}cEIo7^L->s9QjqK;G*@&zr+K#?}lbgvTLFHl&|>6|9L;B8Rd=Oeojrptq~gQ z{Gtddv5Jpddksj#x;RZ5QPi^AL`^1!#6Kk|4KDLQQ4V3CQrf%AJS!N8%cDiBj6z;fZHW4XZOpA5dR!GRiGh1# z1+Ohqn*7~1^MU*IxNVFrP3hUR%xgr-PXqU9`|XzeI;m|aTOQ3=bznmqYQQJhp6i{VOe zgyO+p4r6Utw&=E{7k!^$lts>z3fNtE*d|V=n}4!2XoU`%CKtR# zI+@OG@;oduGm?+dvl`Ssn3c12%aBMSBS8v9NBFB*&9aXC3qw$p8UD+#i~cwvMXiRx zNFGM)GYFZ8P;XmLZ-^us6or*US=!60$AC8qgQ~p?w(EnceVL#_6D14NMXC0=p!hMY zS`MyCjW);xXPm7W<+wnley&`_^ATfI)lIvqbu*ZCRJA~d9aL^_id?Yv%Xk^oCw2j| zA6aN(d5k{%Y?{t3BuT8&f^RwbWG#SVjj1?g6sfG-#%CPY$-2;qVFk&uf8!t?Il$e@ zm34V=B#$VjQb)@`Ni$+b@Xx!3A64Pin*ae>Z+zj+lzO*pvk6;1{%Xbm>Ln@VS0DpN! zl<8|e0xJgk=v8tdQez2OwDjyyF4=~-N)&b2T@hkp&t$Gqz(_8#3ZJ{D$Mw!eiLZcw zC7w|+GYJKW*}}`u#?J+>jsk&x(M#yA%{OtHH{0#+3Yje#Y#(I~YHmvtn;pEZQct}v zf6YtL&A1bPN-du>5*k@`6>Z8CCmb>uppC?yoQszDBn&xQ8S;g4#C@jbC9pd zv^S~rmgi(k+etzC{paHTb?T_~()D&RdfEBjpC!RKGU@qPX5Si_PP0o3uqdny^Fc)b znFz6wiMJ{kCmh%s4npU8zXQCd?3)|IA8#WJ)zJH#@x`XB(rC>1nkddYaVb=Sq4GlD zPlVE$nI+iAW7tynK_X_$?^n-8E%PNi!5tPQA;+H~K}mfZ#g+bn=1O=ra~CiP(!%5< zmIjhE@CC2?LdXiaNm06-awN}Ow$LKfe+Hqc4z~)l-vyLc#kU5PQS6i^g_Y?Fsp1-U z;^LPng+J2dTa_y;=;%&#`I)3mwKsZ=za_S{a_l3)xH?0eWeIq+zN%YHP>d$YrkZs} ztXuRH6~j3GNjGbWj*}&6-rKwwRKACHoJ1F%fpzR$%5z0O3!k&*EKxXT7{ITz8d&X1 zYsP1hT>Qo3eXQjB1_qD=Tsh<v+33^tU*2-PbUB=&zWhZ|zRG_EK63DJzUQ#v1Y$-z53=FTQEd>#$TF zS&ZJzf@3CcXd-WFb`AuWr+O^7nkqO*LyqSz?p3g`UA##kS!5`-Pa|2ZmX?SJ!>EN3 z^YZ4w{Zrr&@*oV&nF|^XHwh?lHI1<=YA<9#>G4$KcJC6Cq|itb=?1w+YXu;Y@iGk( z8rK+KmB3tyCPR~C`yDW!O%lLarPM;D@{t%;w^LHNrJNdi&YO_zI&k$Hdc^Q_KxG{S zyd&8y*?!ss_NzLP)ot8gn>7I! z=M^3mM-^2Po#h}tURXELTMvE(-i53v%lqsASnAfZMLM||; z1912Lnm)uR_U;a?67tavEG%~TR3#LlFc_sVRoxJsF-C(Lkg4*>&MxVtm8>$SXEyfF(q}ENtCDqTtg2GRkwm+ zvB9$CF@-Sx&}yb5oEH*&7y`vDMEf@AyMxxR_59j{9+hFROxQ?=gQNkF5C%5Wp1_%! z-_qqK7a(#Eglq^z9S$$P!4>m;xWf{%Z;{~~$kt8R1^l40K~!>01c!XJ|B5vG{X#_a*3vyJ-(-M`H6H^s$RmA{ z3#ATYuLj>)~k-^m0BSB*-$g7IuZ;ep*`Z!t!o zMq%=7P!O)T|JpGkp~=yBbXBV|gq1MfTt^kEh=WKN>SP??=(5a=`x&XZ9DB1?berF+ zPN5Y#&7NNyp%i(vis@{MaWlU?oy_d75BC3I}pOf6y zv+#k0CQQ1ndC)FU$qRsSx(G4(P6*|ey3eH&syFR_P)xuEbwd$Nz}}zFnngj+373=f zK-%O5JA{yiAS46kie<0ZTp2~_a!)9Lb-RNziY1c1anZ9E6XWB*yAZT*k>xCU+@2;! zm;DMb_>;DNSxj=J31wUx!t&Voloh^!>-LqyA1y1iM6k}xcQg$HIDCQK|KRY|_I4>}i`?4!!;?;NT6sz}a1rj@*T?>4M_QLIq(vAv53j;003)=Z61dZ0tBJCg1-Uodq zjHPQ-Oi1w|rP^GQSATb5g%OshoWX@ujNfsj z{QHPOG>J6s-+h3(zXd!Gj&aueRm2mZJ^eWjCccq$xa`G}ovZTZKsh>tle@FGu9}3L z0MP))T9i~OXA+UNf;leBjEBU4w@@my{08w(O~Lk`Fi7xQK)H1c$1xWqXbc;mCm}f1 z|2bU~{AUQ^W*1@37yYa*A65b0%P#jNIt1MC5q%3PjidOg*P9o9KRD~MrRt_7hwdqZ zf@}rILs%yP3y*{Xb6y(4|1{^D2{YS^_E$ut;jue>07X4|hlPhwe?d|9$(N z?IvIV`Lt$y2yy7Z<#GtGVpff({whOxjXy`PUPFfAUjm*=&S#FDnn^^eh=DYV8H1kN zaT)df7N{tp4T@Mqp*pcnqgOhp+$NCtv!=7+X6=#<)o}yFE8S(af8|*xkOGSm18d6Zdg1oiW;1{Sw^xVQs0>)r1QD~Z|QbR=c65hZUVoaZz!GV#tBNF1XMj;4OR$ zl@2FaqNNZ*v`m0P_wsXlc^jojq(*|h(H-mERR7Ukdj2rUSumU@Dtge+?r_$#JST_G zJ^k}9PR_{3!|1PDp4wgpIbVDR7;WBCkS197vXv^3%whG^hENLhaw zVOt6-67qx+-)@Ni0o8-~J~pO@v?jR(d!LMB5%44v_mNo+N=B6|>&ABTMbFBT7?Bte z1WIfZprZ3b@OwfXXh9#MTB!Cr_r{EqDzIv(AbCQyHmE+{!Ohdf#%z$*0IrYqr2+{9 z&Dic%ji2jDveTqj%X|=*(%JWB=o-J?JvbqZyAb#(6CD|27pvk%<$sI8KvI}#!#0mc zi;UO=r}1bD8*b2=Sp&w$d`=pV0%e24bA4yB+uAqoo?`~B#~4QmxWI~bOosv)9_io! zl@$@NL)!s6bcHWi2uP%wngx-=L&xJ-FDSSOw_=2C18T+~6UURooH9f9-jxJnfU}J7 zNd@hrN>GH$USG)qi+afJzyLAJP#jZS ze4od7Mi`x*&0EVtm>OTp!gWo!UQY~0%OXFR0#ptFv7AxE^jT|gF>s5bs593axknn3 zXl)ChHW;CI6CMm1jL3!Nq;gV#!bR`CAe{lv(h6rl2-}jT$5xn{_E~&dvOfFQ8Oytp zSdJ5Y_rboe_gb=vp5s^IxB$KJ~;#s+t1>VSXxMyMT!2k!DnO|Wml?K zy(6u4{Lvazpr3_r zc?`K!T88P-I#Nnn7unKc8o1(+{EC3Da3jzK9?Y0PCJzq6Kmu&qV*DupQm_DW^a=3X z`kjwFZI4C9nmyJEKmd2bqWwP3$`B>`?E?Lh0C&?>6Wy_BA73B`znX*}T&s?!$UM@s zM3VQJW)(-JAq~TIdD;3o#OYQ3%5-N%YE%p_7j2X#;R?;H9PDoLX{e-h&{OoE7=Mf= zVMZb#>))Fw>>|ZygFa86{ms+{iz-vw_4RFcsN=VB))A7?H|*FXO~}~FN^?q#krs0o zDGVL*n;Z1?k}g9V*OGD+r^3CgtbvJlX|e$|HWb}M?HWHF8pUEM5_wIYCnhjD!5j8H z@uDc*My}&KR-~;)+`*a>aWuWO7flrB%M z1R4t(?SeY?RcY5PDk_TAb3T!>GzoO85Zu07>^(Nf@8JOf0Ko?*Vt7 z%o~|h4p>E9g= z-^(NB@xg_nOIJ=)>=aE+%brzA*qEe`@ z)JDsCy6B|)+ai&d9q@5~Yox_sK)MSPsc3!G+yKMaNtk;1(Y0om@kjE+A3wJU8ey?j zt@bD7|G1se4w|4;sCtTI0q@5T1C|33>7m3fnhJY#_L$FaRl#0Rr_wHnzVu;uk|o1~ z09SVk6{KkNAgyYJ%$hsF^Bj|LF2XT~YQkE@*x31!uWWPtILQ4b81X(iqQ1n-9?)x^ z`j<%7*}g-Yxf~;yUo#r9tnNuxZT-G+AT==TgKhe&iT;>@q#u9KkO~xBdz%~FS9u3! z>-}gFv@*+m-YVe{dt4#nWv}%sgbB+pMc^m-P=+K{lwBDrHL?O{BVcPGgK|-ZoR@R4 z+_Z1BD+89&hRVF082$64^|1(AHbI*~*|*zO93 zI-oB&{R>F%yQ6cPBFXXV%b4oQl;*JHKFvTa6~I>!D+WM>YXHVncJIP$U-01d3>7XNsm`>)lbRB@)oe+&OT z%Azf!w+F^&upY_;aZNH*DM%5e6q6+F|LmNlm>DO90l`gBg%)#xalr5@yoo9z{Zqi0 zqG}Q)Zak2TFZZuk{Y_o#&kR2=BA$e8}F+P>|pQhp)4;!x7vOn>YAd1H_3e*~801&x4 z14OQd8ZauZ&Pwi-T1hy5C}-oQS$_JO^YJ|OH6mrH{{HU9`NrkXff@53oBG|;`=*EP zt6L!da`=|f=Guq#V^q}i6hBi^L;c!mF>&3IR*UW;tkgHI_W>gqZ!OSJZUxiMAY@sx zui)zYYU)IUk=%E5@C>WHYrX}zp1XE$4%l?oZFW!5YlRXqeT}0X#9|$Y!H<(RzDlWq zfO`9(-S>k4e;1eUvzeFcrteLakZhrQmQsKJG*c}Tl&)O$x!C4s)st3OZV+jxTKY;F zqH5S{rvM!cIHo&dN-dh=3?$8$c7FcHE4%p*ggFiH%%l^^@+i!x%(Ns2gOh8>MxZ+= zjMS2<&p>cG=c@VrS6XE%zh~ffs1-*oR8*Z4?0h~8F~8On zAjff5?r)CcbW}5ti z*6OQoDOj6}aeS3LKP@_Fa+^xN0a{asH-6o~ScMm*TpAl;?s@h57(-t9Y=x*qUYiWx4ZXj!F%95v}AuB}MYW4m0 znN#8UUH$0I_@Wqv{A|Iy#c3uJ8~DL!#TaZzY@#<{z?(3-?YinYy<8&oPw{s*oe#nn z(;0bdE}s_J8VM3kJvpp%hb)Y>g<@-QG8=&#e&aZ-2e|O8Mz=O|V^wYhlo;}hD(~VQ zHTRE5g9Vg4Z{j`v&0Dc06SHQC)tW->q_r0{gd9#VzK^|5={j5aFlyR#(c`hS|Gh;l zD^6(=5&m@qGHd_IMM`M{4#;Wg0cC!LZ&whgXGD_!N9D1Y&$vF|$2LJIG4_ARdgs8n zo~R8tYO=9yqp_35Y|z-YZQDlE*iK`ov2ELEY$y9|fA9Bx-22DgKj!Yv%sulQ%$)OJ z;f|tJB`}2bVx3JL@H0!Le*J~TA{F3LEfydP;%+1v4wq#Wqtbl)Y_UvzUBfQ_kM}WI z%CFs(&x#Bew^cqq;XAY}#U}MFkq1R|=y%L`$lXMRR$C=Zl6VukSXHwG$-PJuNWOpO z=RqPzYWR_3z3S!QA?nJlL!z$0<6)pBR*B|xspkJC^Lnb?9E)e0x5<=Q^uS^UME+pO zha=B-%C76m%p6K{xpOYaUKL6**kiZfh|H5FU|EZ;= zRWSbK`Clz9gVlevw4lb(qkbS%sPR+e|9>h8Ow(wb|4&(N^8YQ%?fySWxehh|o0N;v z)-tqt1=+evVmbRqy`laIl$0x#{{K(P4P+etmy}C;fSo#c>TfTcM^S}-n5|212;Mbt zoHH*;E0UEi(tkh*z-Ew{IP(^^ONM(JRVF^s%kzqU^rIj?d-UtTyE9XD>A*y=V%J@O zWy#T%Gaq~yu;C;|tQgj;`N)`dg62M8Cqf1bp&Eh=$YLr83j&FF$gjd**C!SJk zkt+5?7JS82+j1Qw7JwlFI2kfgGPXw^@b+l(c9&B;?d3SMQsT$dwn}=$&!E%kv#6OV z_538MR648mp1ZkzDS)e)WC3@4czbt)SArRHr)2d<;)o8HmiPK!X0Z?MB>q`-8)i~S zp8SvQik((vJmo8tf{@j}Q$Yvd(h0wc9FrAP2J-E>pa1cv`+D~eTI#*jTDva{e2>QfTdg-ZrPLn%ga~wsUfDhw#YPkuf)gU zKQ1|DQ}He)ZJ$T6C|?%Om6P*#-lqb~PXsfMvyjM`MX>Ide&s#-DE<831^KddU^*ke zFQ0v)z?z9+_j6=Z2BYzjW&Qg4{e0iHOZNl%DJwYUN5nJS5ZS3^mp)_V$AR^5fvm?{ zL@wVYV&8I97bq@VI_Z*(=@I#pF`a8B(pWxv*zZRN|8kR*@)^T|5t4}Zr$UBjR{7k% zQW25yAd#`>Ys{z%bg6YtGyXUIYF7J+ACeRJX&=**4|CgL&e;z3y%y&T3(EV4878!9 zRO3&DFBigR>rx9uQLr_W{UhsFssi79comDA&>Elau3odR50PQhWiAe>Boysljss*+ z9Vxwii^KT^6dc-k^6ROG_w$L6B#l{3{P{HZ@-L zlEB47b^JbSpcPH!D_>`Q>f_tP_0g5QYUH=>AaBLxt01|bm&k3Gh|rK}rs!A?7z8i( z+*b`Z+(a?BXM%T(d7nfGn7P%x+qUFMX~mmaVz$4gfp@_7TcC>amOqM(GnWVFJ1}

6JV^4f$Y1 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 auye6>VpRSB diff --git a/db/Models/eta_rbac_requirements.md b/db/Models/eta_rbac_requirements.md new file mode 100644 index 0000000..bbc9176 --- /dev/null +++ b/db/Models/eta_rbac_requirements.md @@ -0,0 +1,204 @@ +# ETA RBAC and Domain Data Requirements + +This document translates SQL constraints from the schema into software requirements language. + +## 1. Global Requirements + +1. The system shall store all data in the schema `u947463964_etaviaporte`. +2. Each table shall use an auto-generated unsigned integer `id` as primary key. +3. Every foreign-keyed record shall reference an existing parent record. + +## 2. Users and Authentication + +1. A user shall provide `name` and `last_name`. +2. A user record shall always include `created_at` and `updated_at` timestamps. +3. An auth identity shall always belong to an existing user. +4. An auth identity shall include `provider` and `identifier`. +5. The combination of `provider` and `identifier` shall be unique. +6. Auth identity flags `is_primary` and `is_verified` shall default to `0` (false). +7. Deleting a user shall delete the user auth identities. + +## 3. Applications, Roles, and Permissions + +1. An application shall include unique `name` and unique `slug`. +2. A role shall always belong to an existing application. +3. A role name shall be unique within its application. +4. A permission shall always belong to an existing application. +5. A permission name shall be unique within its application. +6. A permission record shall include `created_at` and `updated_at` timestamps. +7. A role-permission assignment shall reference an existing role, permission, and application. +8. The pair `(role_id, permission_id)` shall be unique. +9. Deleting an application, role, or permission shall delete related role-permission assignments. +10. A user-role assignment shall reference an existing user, role, and application. +11. The pair `(user_id, role_id)` shall be unique. +12. Deleting a user, role, or application shall delete related user-role assignments. +13. A user shall be allowed to have multiple roles as long as each `(user_id, role_id)` pair is unique. + +## 4. Verification and Sessions + +1. A verification token shall belong to an existing auth identity. +2. A verification token shall include unique `token_hash`. +3. Verification token purpose shall be one of: `email_verification`, `phone_verification`, `password_reset`. +4. A verification token shall include `created_at` and `expires_at`. +5. Deleting an auth identity shall delete related verification tokens. +6. A session shall belong to an existing user. +7. A session shall include unique `session_token_hash`. +8. A session shall include `created_at`, `updated_at`, and `expires_at`. +9. Deleting a user shall delete related sessions. + +## 5. Companies and Locations + +1. A company shall include `name`. +2. Company `privacy_enabled` shall default to `0`. +3. Company `disabled` shall default to `0`. +4. A location shall belong to an existing company. +5. A location shall include `state`, `city`, `country`, `zipcode`, and `address_line1`. +6. Location type shall be one of: `loading`, `unloading`, `both`. +7. Location type shall default to `both`. +8. Location coordinates, when present, shall be stored as decimal latitude and longitude values. +9. Deleting a company shall delete its locations. + +## 6. Loads, Vehicles, and Shipment Lifecycle + +1. A load shall belong to an existing company and an existing creator user. +2. Load status shall be one of: `Draft`, `Published`, `Completed`, `Closed`, `Cancelled`. +3. Load status shall default to `Draft`. +4. A load shall include `product`, `sector`, and `truck_type`. +5. Load `privacy_enabled` shall default to `0`. +6. Load `disabled` shall default to `0`. +7. If an origin or destination location is deleted, the corresponding load reference shall be set to `NULL`. +8. Deleting the load creator user shall delete the load. +9. Deleting the load company shall delete the load. +10. A vehicle shall belong to an existing company. +11. A vehicle shall include `VIN` and `truck_plate`. +12. Vehicle status shall be one of: `Available`, `Busy`. +13. Vehicle status shall default to `Available`. +14. A company shall not repeat the same vehicle VIN (`(company_id, VIN)` unique). +15. A company shall not repeat the same truck plate (`(company_id, truck_plate)` unique). +16. A driver shall be assigned to at most one vehicle at a time (`driver_id` unique). +17. A load shall be assigned to at most one vehicle at a time (`load_id` unique). +18. If a driver user is deleted, the vehicle driver reference shall be set to `NULL`. +19. If an assigned load is deleted, the vehicle load reference shall be set to `NULL`. +20. Deleting a company shall delete its vehicles. +21. A load shipment shall belong to an existing load. +22. A load shipment status shall be one of: `Assigned`, `Loading`, `Transit`, `Unloading`, `Delivered`. +23. A load shipment status shall default to `Assigned`. +24. Shipment tracking coordinates, when present, shall be stored as decimal latitude and longitude values. +25. Each load shall have at most one load shipment (`load_id` unique). +26. Deleting a load shall delete its load shipment. +27. A shipment evidence record shall belong to an existing load. +28. Shipment evidence type shall be one of: `loading`, `unloading`. +29. A load shall have at most one evidence per evidence type (`(load_id, type)` unique). +30. Deleting a load shall delete shipment evidences. +31. A shipment proposal shall belong to an existing load and an existing user (`created_by`). +32. If a proposed vehicle is deleted, the shipment proposal vehicle reference shall be set to `NULL`. +33. Deleting a load shall delete shipment proposals. +34. Deleting the creator user shall delete shipment proposals. +35. A shipment agreement shall reference an existing load, shipment proposal, and accepting user. +36. A load shall have at most one shipment agreement (`load_id` unique). +37. Deleting a load, shipment proposal, or accepting user shall delete shipment agreements. + +## 7. Master Data and Categorization + +1. Sector names in `meta_sectors` shall be unique. +2. A sector record shall include `created_at` and `updated_at` timestamps. +3. Vehicle type names in `meta_vehicle_types` shall be unique. +4. A vehicle type record shall include `created_at` and `updated_at` timestamps. +5. Product names in `meta_products` shall be unique. +6. A product record shall include `created_at` and `updated_at` timestamps. +7. A city record shall include `city`, `state`, and `country`. +8. A city record shall include `created_at` and `updated_at` timestamps. +9. A company sector shall belong to an existing company. +10. A company shall not repeat the same sector (`(company_id, sector)` unique). +11. Deleting a company shall delete its company sectors. +12. A company vehicle type shall belong to an existing company. +13. A company shall not repeat the same vehicle type (`(company_id, truck_type)` unique). +14. Deleting a company shall delete its company vehicle types. +15. A location-category assignment shall reference an existing location and existing company sector. +16. A location shall not repeat the same category (`(location_id, category_id)` unique). +17. Deleting a location or company sector shall delete related location-category assignments. +18. A vehicle-type assignment shall reference an existing vehicle and existing company vehicle type. +19. A vehicle shall not repeat the same type (`(vehicle_id, type_id)` unique). +20. Deleting a vehicle or company vehicle type shall delete related vehicle-type assignments. +21. A user-location assignment shall reference an existing user and existing location. +22. A user shall not repeat the same location (`(user_id, location_id)` unique). +23. Deleting a user or location shall delete related user-location assignments. + +## 8. Templates, Memberships, and Privacy + +1. A load template shall belong to an existing company and creator user. +2. A load template shall include `name`. +3. A user shall not create duplicate load template names inside the same company (`(company_id, created_by, name)` unique). +4. Deleting a company shall delete related load templates. +5. Deleting a creator user shall delete related load templates. +6. Deleting an origin or destination location referenced by a load template shall set that location reference to `NULL`. +7. A user-application assignment shall reference an existing user and existing application. +8. A user shall be allowed to be added to multiple applications. +9. A user shall not be assigned to the same application more than once (`(user_id, application_id)` unique). +10. Deleting a user or application shall delete related user-application assignments. +11. A company-user assignment shall reference an existing user and existing company. +12. A company-user assignment shall include `created_at`. +13. A user shall be assigned to only one company (`user_id` unique in `company_users`). +14. Deleting a user or company shall delete related company-user assignments. +15. A privacy group shall belong to an existing company. +16. Privacy group names shall be unique per company (`(company_id, name)` unique). +17. Deleting a company shall delete its privacy groups. +18. A privacy group company rule shall reference an existing company, privacy group, and allowed company. +19. An allowed company shall not be repeated within the same privacy group (`(group_id, allowed_company_id)` unique). +20. Deleting a company or privacy group shall delete related privacy group company rules. + +## 9. Alert Email Constraints + +1. A load alert email record shall belong to an existing load. +2. The same email shall not be repeated for the same load (`(load_id, email)` unique). +3. Deleting a load shall delete load alert emails. +4. A warehouse alert email record shall belong to an existing warehouse location. +5. The same email shall not be repeated for the same warehouse (`(warehouse_id, email)` unique). +6. Deleting a warehouse location shall delete warehouse alert emails. + +## 10. Identity and Access Interpretation + +1. A user shall be authorized using an identity provider and identifier pair, such as email address or phone number. +2. A provider-specific identifier shall map to one and only one auth identity record. +3. A role and permission model shall be scoped by application. + +## 11. Company Compliance and Documents + +1. A company status record shall belong to an existing company. +2. A company shall have at most one company status record (`company_id` unique). +3. Company status shall be one of: `Registered`, `InReview`, `Enabled`, `Disabled`. +4. Company status shall default to `Registered`. +5. A company status record shall include `notes` (NOT NULL). +6. A company status record shall include `created_at` and `updated_at` timestamps. +7. Deleting a company shall delete related company status records. +8. A company document shall belong to an existing company. +9. A company document shall include `document_id` and `name`. +10. Company document status shall be one of: `New`, `InReview`, `Approved`, `Rejected`. +11. Company document status shall default to `New`. +12. A company document shall include `status_notes` (NOT NULL). +13. A company document record shall include `created_at` and `updated_at` timestamps. +14. A company shall not repeat document names (`(company_id, name)` unique). +15. Deleting a company shall delete related company documents. + +## 12. API Key and Permission Model + +1. An API key record shall include `name` and `key_hash`. +2. API key hashes shall be globally unique. +3. An API key shall belong to an existing application. +4. An API key record shall include `created_at` and `updated_at` timestamps. +5. Deleting an application shall delete related API keys. +6. An API key permission record shall belong to an existing application, permission, and API key. +7. API key permission assignments shall include `created_at`. +8. An API key shall not repeat the same permission assignment (`(apikey_id, permission_id)` unique). +9. Deleting an application, permission, or API key shall delete related API key permission assignments. + +## 13. Vehicle Documents + +1. A vehicle document shall belong to an existing company and an existing vehicle. +2. A vehicle document shall include `document_id` and `name`. +3. Vehicle document status shall be one of: `New`, `InReview`, `Approved`, `Rejected`. +4. Vehicle document status shall default to `New`. +5. A vehicle document shall include `status_notes` (NOT NULL). +6. A vehicle document record shall include `created_at` and `updated_at` timestamps. +7. A company shall not repeat vehicle document names (`(company_id, name)` unique). +8. Deleting a company or vehicle shall delete related vehicle documents. diff --git a/db/Models/schemas/eta_rbac.sql b/db/Models/schemas/eta_rbac.sql index 77b2b30..8b671e2 100644 --- a/db/Models/schemas/eta_rbac.sql +++ b/db/Models/schemas/eta_rbac.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 02:54:57 PM CST +-- Wed 01 Apr 2026 05:30:16 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -99,6 +99,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, @@ -229,7 +231,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', - `disabled_at` VARCHAR(45) NULL, + `disabled_at` DATETIME NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -247,8 +249,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`locations` ( `zipcode` VARCHAR(10) NOT NULL, `address_line1` VARCHAR(512) NOT NULL, `address_line2` VARCHAR(512) NULL, - `lat` VARCHAR(128) NULL, - `lng` VARCHAR(128) NULL, + `lat` DECIMAL(10,8) NULL, + `lng` DECIMAL(10,8) NULL, `name` VARCHAR(512) NULL, `description` TEXT NULL, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -272,7 +274,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads` ( `created_by` INT UNSIGNED NOT NULL, `origin_id` INT UNSIGNED NULL, `destination_id` INT UNSIGNED NULL, - `status` ENUM('Draft', 'Published', 'Completed', 'Closed', 'Cancel') NOT NULL DEFAULT 'Draft', + `status` ENUM('Draft', 'Published', 'Completed', 'Closed', 'Cancelled') NOT NULL DEFAULT 'Draft', `product` VARCHAR(100) NOT NULL COMMENT 'Maiz, Trigo, etc', `sector` VARCHAR(100) NOT NULL COMMENT 'Automotriz, Agricola, etc', `truck_type` VARCHAR(100) NOT NULL, @@ -322,6 +324,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicles` ( `company_id` INT UNSIGNED NOT NULL, `driver_id` INT UNSIGNED NULL, `load_id` INT UNSIGNED NULL, + `status` ENUM('Available', 'Busy') NOT NULL DEFAULT 'Available', `VIN` VARCHAR(45) NOT NULL, `truck_plate` VARCHAR(45) NOT NULL, `trailer_plate_1` VARCHAR(45) NULL, @@ -332,6 +335,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicles` ( INDEX `fk_vehicles_companies1_idx` (`company_id` ASC) VISIBLE, UNIQUE INDEX `driver_id_UNIQUE` (`driver_id` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `VIN_UNIQUE` (`company_id` ASC, `VIN` ASC) VISIBLE, + UNIQUE INDEX `truck_plate_UNIQUE` (`company_id` ASC, `truck_plate` ASC) VISIBLE, CONSTRAINT `fk_vehicles_companies1` FOREIGN KEY (`company_id`) REFERENCES `u947463964_etaviaporte`.`companies` (`id`) @@ -359,8 +364,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_shipments` ( `status` ENUM('Assigned', 'Loading', 'Transit', 'Unloading', 'Delivered') NOT NULL DEFAULT 'Assigned', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `last_lat` VARCHAR(128) NULL, - `last_lng` VARCHAR(128) NULL, + `last_lat` DECIMAL(10,8) NULL, + `last_lng` DECIMAL(10,8) NULL, PRIMARY KEY (`id`), INDEX `fk_load_shipment_loads1_idx` (`load_id` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, @@ -405,22 +410,22 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_proposals` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), INDEX `fk_shipment_proposals_loads1_idx` (`load_id` ASC) VISIBLE, - INDEX `fk_shipment_proposals_user_roles1_idx` (`created_by` ASC) VISIBLE, INDEX `fk_shipment_proposals_vehicles1_idx` (`vehicle_id` ASC) VISIBLE, + INDEX `fk_shipment_proposals_users1_idx` (`created_by` ASC) VISIBLE, CONSTRAINT `fk_shipment_proposals_loads1` FOREIGN KEY (`load_id`) REFERENCES `u947463964_etaviaporte`.`loads` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT `fk_shipment_proposals_user_roles1` - FOREIGN KEY (`created_by`) - REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION, CONSTRAINT `fk_shipment_proposals_vehicles1` FOREIGN KEY (`vehicle_id`) REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) ON DELETE SET NULL + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposals_users1` + FOREIGN KEY (`created_by`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -438,8 +443,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_agreements` ( PRIMARY KEY (`id`), INDEX `fk_shipment_proposal_agreement_loads1_idx` (`load_id` ASC) VISIBLE, INDEX `fk_shipment_proposal_agreement_shipment_proposals1_idx` (`proposal_id` ASC) VISIBLE, - INDEX `fk_shipment_proposal_agreement_user_roles1_idx` (`accepted_by` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + INDEX `fk_shipment_agreements_users1_idx` (`accepted_by` ASC) VISIBLE, CONSTRAINT `fk_shipment_proposal_agreement_loads1` FOREIGN KEY (`load_id`) REFERENCES `u947463964_etaviaporte`.`loads` (`id`) @@ -450,9 +455,9 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_agreements` ( REFERENCES `u947463964_etaviaporte`.`shipment_proposals` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT `fk_shipment_proposal_agreement_user_roles1` + CONSTRAINT `fk_shipment_agreements_users1` FOREIGN KEY (`accepted_by`) - REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -464,17 +469,21 @@ ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_sectors` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `sector` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `sector_UNIQUE` (`sector` ASC) VISIBLE) ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`meta_truck_types` +-- Table `u947463964_etaviaporte`.`meta_vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `type` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `meta_truck_typescol_UNIQUE` (`type` ASC) VISIBLE) ENGINE = InnoDB; @@ -486,6 +495,8 @@ ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_products` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `product` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `product_UNIQUE` (`product` ASC) VISIBLE) ENGINE = InnoDB; @@ -500,6 +511,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_cities` ( `state` VARCHAR(100) NOT NULL, `country` VARCHAR(100) NOT NULL, `zipcode` VARCHAR(100) NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -522,9 +535,9 @@ ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`company_truck_types` +-- Table `u947463964_etaviaporte`.`company_vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `company_id` INT UNSIGNED NOT NULL, `truck_type` VARCHAR(100) NOT NULL, @@ -562,9 +575,9 @@ ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`truck_types` +-- Table `u947463964_etaviaporte`.`vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `vehicle_id` INT UNSIGNED NOT NULL, `type_id` INT UNSIGNED NOT NULL, @@ -578,7 +591,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`truck_types` ( ON UPDATE NO ACTION, CONSTRAINT `fk_vehicle_types_company_truck_types1` FOREIGN KEY (`type_id`) - REFERENCES `u947463964_etaviaporte`.`company_truck_types` (`id`) + REFERENCES `u947463964_etaviaporte`.`company_vehicle_types` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -633,22 +646,22 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( CONSTRAINT `fk_load_templates_companies1` FOREIGN KEY (`company_id`) REFERENCES `u947463964_etaviaporte`.`companies` (`id`) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_locations1` FOREIGN KEY (`origin_id`) REFERENCES `u947463964_etaviaporte`.`locations` (`id`) - ON DELETE NO ACTION + ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_locations2` FOREIGN KEY (`destination_id`) REFERENCES `u947463964_etaviaporte`.`locations` (`id`) - ON DELETE NO ACTION + ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_users1` FOREIGN KEY (`created_by`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -684,7 +697,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `company_id` INT UNSIGNED NOT NULL, - `created_at` DATETIME NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, @@ -787,6 +800,133 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_status` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_status` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `status` ENUM('Registered', 'InReview', 'Enabled', 'Disabled') NOT NULL DEFAULT 'Registered', + `notes` TEXT NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_company_status_companies1_idx` (`company_id` ASC) VISIBLE, + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_status_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_documents` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_documents` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `document_id` VARCHAR(255) NOT NULL, + `name` VARCHAR(512) NOT NULL, + `status` ENUM('New', 'InReview', 'Approved', 'Rejected') NOT NULL DEFAULT 'New', + `status_notes` TEXT NOT NULL COMMENT 'Add metadata like user who reviewed and reason behind the status assigned', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_company_documents_companies1_idx` (`company_id` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_company_documents_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`apikeys` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`apikeys` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `key_hash` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `expires_at` DATETIME NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `key_hash_UNIQUE` (`key_hash` ASC) VISIBLE, + CONSTRAINT `fk_apikeys_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`apikey_permissions` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`apikey_permissions` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, + `permission_id` INT UNSIGNED NOT NULL, + `apikey_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_apikey_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, + INDEX `fk_apikey_permissions_apikeys1_idx` (`apikey_id` ASC) VISIBLE, + UNIQUE INDEX `apikey_id_UNIQUE` (`apikey_id` ASC, `permission_id` ASC) VISIBLE, + CONSTRAINT `fk_apikey_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_apikey_permissions_permissions1` + FOREIGN KEY (`permission_id`) + REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_apikey_permissions_apikeys1` + FOREIGN KEY (`apikey_id`) + REFERENCES `u947463964_etaviaporte`.`apikeys` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`vehicle_documents` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicle_documents` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `vehicle_id` INT UNSIGNED NOT NULL, + `document_id` VARCHAR(255) NOT NULL, + `name` VARCHAR(512) NOT NULL, + `status` ENUM('New', 'InReview', 'Approved', 'Rejected') NOT NULL DEFAULT 'New', + `status_notes` TEXT NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_vehicle_documents_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_vehicle_documents_vehicles1_idx` (`vehicle_id` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_vehicle_documents_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_vehicle_documents_vehicles1` + FOREIGN KEY (`vehicle_id`) + REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/db/service/initdb/00-schema.sql b/db/service/initdb/00-schema.sql index 77b2b30..8b671e2 100644 --- a/db/service/initdb/00-schema.sql +++ b/db/service/initdb/00-schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed 01 Apr 2026 02:54:57 PM CST +-- Wed 01 Apr 2026 05:30:16 PM CST -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -99,6 +99,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`permissions` ( `application_id` INT UNSIGNED NOT NULL, `name` VARCHAR(512) NOT NULL, `description` TEXT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `name_UNIQUE` (`application_id` ASC, `name` ASC) VISIBLE, INDEX `fk_permissions_applications1_idx` (`application_id` ASC) VISIBLE, @@ -229,7 +231,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`companies` ( `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `disabled` TINYINT NOT NULL DEFAULT 0 COMMENT 'This field allows blocking publications based on business rules', - `disabled_at` VARCHAR(45) NULL, + `disabled_at` DATETIME NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -247,8 +249,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`locations` ( `zipcode` VARCHAR(10) NOT NULL, `address_line1` VARCHAR(512) NOT NULL, `address_line2` VARCHAR(512) NULL, - `lat` VARCHAR(128) NULL, - `lng` VARCHAR(128) NULL, + `lat` DECIMAL(10,8) NULL, + `lng` DECIMAL(10,8) NULL, `name` VARCHAR(512) NULL, `description` TEXT NULL, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -272,7 +274,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`loads` ( `created_by` INT UNSIGNED NOT NULL, `origin_id` INT UNSIGNED NULL, `destination_id` INT UNSIGNED NULL, - `status` ENUM('Draft', 'Published', 'Completed', 'Closed', 'Cancel') NOT NULL DEFAULT 'Draft', + `status` ENUM('Draft', 'Published', 'Completed', 'Closed', 'Cancelled') NOT NULL DEFAULT 'Draft', `product` VARCHAR(100) NOT NULL COMMENT 'Maiz, Trigo, etc', `sector` VARCHAR(100) NOT NULL COMMENT 'Automotriz, Agricola, etc', `truck_type` VARCHAR(100) NOT NULL, @@ -322,6 +324,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicles` ( `company_id` INT UNSIGNED NOT NULL, `driver_id` INT UNSIGNED NULL, `load_id` INT UNSIGNED NULL, + `status` ENUM('Available', 'Busy') NOT NULL DEFAULT 'Available', `VIN` VARCHAR(45) NOT NULL, `truck_plate` VARCHAR(45) NOT NULL, `trailer_plate_1` VARCHAR(45) NULL, @@ -332,6 +335,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicles` ( INDEX `fk_vehicles_companies1_idx` (`company_id` ASC) VISIBLE, UNIQUE INDEX `driver_id_UNIQUE` (`driver_id` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + UNIQUE INDEX `VIN_UNIQUE` (`company_id` ASC, `VIN` ASC) VISIBLE, + UNIQUE INDEX `truck_plate_UNIQUE` (`company_id` ASC, `truck_plate` ASC) VISIBLE, CONSTRAINT `fk_vehicles_companies1` FOREIGN KEY (`company_id`) REFERENCES `u947463964_etaviaporte`.`companies` (`id`) @@ -359,8 +364,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_shipments` ( `status` ENUM('Assigned', 'Loading', 'Transit', 'Unloading', 'Delivered') NOT NULL DEFAULT 'Assigned', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `last_lat` VARCHAR(128) NULL, - `last_lng` VARCHAR(128) NULL, + `last_lat` DECIMAL(10,8) NULL, + `last_lng` DECIMAL(10,8) NULL, PRIMARY KEY (`id`), INDEX `fk_load_shipment_loads1_idx` (`load_id` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, @@ -405,22 +410,22 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_proposals` ( `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), INDEX `fk_shipment_proposals_loads1_idx` (`load_id` ASC) VISIBLE, - INDEX `fk_shipment_proposals_user_roles1_idx` (`created_by` ASC) VISIBLE, INDEX `fk_shipment_proposals_vehicles1_idx` (`vehicle_id` ASC) VISIBLE, + INDEX `fk_shipment_proposals_users1_idx` (`created_by` ASC) VISIBLE, CONSTRAINT `fk_shipment_proposals_loads1` FOREIGN KEY (`load_id`) REFERENCES `u947463964_etaviaporte`.`loads` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT `fk_shipment_proposals_user_roles1` - FOREIGN KEY (`created_by`) - REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) - ON DELETE CASCADE - ON UPDATE NO ACTION, CONSTRAINT `fk_shipment_proposals_vehicles1` FOREIGN KEY (`vehicle_id`) REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) ON DELETE SET NULL + ON UPDATE NO ACTION, + CONSTRAINT `fk_shipment_proposals_users1` + FOREIGN KEY (`created_by`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -438,8 +443,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_agreements` ( PRIMARY KEY (`id`), INDEX `fk_shipment_proposal_agreement_loads1_idx` (`load_id` ASC) VISIBLE, INDEX `fk_shipment_proposal_agreement_shipment_proposals1_idx` (`proposal_id` ASC) VISIBLE, - INDEX `fk_shipment_proposal_agreement_user_roles1_idx` (`accepted_by` ASC) VISIBLE, UNIQUE INDEX `load_id_UNIQUE` (`load_id` ASC) VISIBLE, + INDEX `fk_shipment_agreements_users1_idx` (`accepted_by` ASC) VISIBLE, CONSTRAINT `fk_shipment_proposal_agreement_loads1` FOREIGN KEY (`load_id`) REFERENCES `u947463964_etaviaporte`.`loads` (`id`) @@ -450,9 +455,9 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`shipment_agreements` ( REFERENCES `u947463964_etaviaporte`.`shipment_proposals` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT `fk_shipment_proposal_agreement_user_roles1` + CONSTRAINT `fk_shipment_agreements_users1` FOREIGN KEY (`accepted_by`) - REFERENCES `u947463964_etaviaporte`.`user_roles` (`id`) + REFERENCES `u947463964_etaviaporte`.`users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -464,17 +469,21 @@ ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_sectors` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `sector` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `sector_UNIQUE` (`sector` ASC) VISIBLE) ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`meta_truck_types` +-- Table `u947463964_etaviaporte`.`meta_vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `type` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `meta_truck_typescol_UNIQUE` (`type` ASC) VISIBLE) ENGINE = InnoDB; @@ -486,6 +495,8 @@ ENGINE = InnoDB; CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_products` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `product` VARCHAR(100) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `product_UNIQUE` (`product` ASC) VISIBLE) ENGINE = InnoDB; @@ -500,6 +511,8 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`meta_cities` ( `state` VARCHAR(100) NOT NULL, `country` VARCHAR(100) NOT NULL, `zipcode` VARCHAR(100) NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE = InnoDB; @@ -522,9 +535,9 @@ ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`company_truck_types` +-- Table `u947463964_etaviaporte`.`company_vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `company_id` INT UNSIGNED NOT NULL, `truck_type` VARCHAR(100) NOT NULL, @@ -562,9 +575,9 @@ ENGINE = InnoDB; -- ----------------------------------------------------- --- Table `u947463964_etaviaporte`.`truck_types` +-- Table `u947463964_etaviaporte`.`vehicle_types` -- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`truck_types` ( +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicle_types` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `vehicle_id` INT UNSIGNED NOT NULL, `type_id` INT UNSIGNED NOT NULL, @@ -578,7 +591,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`truck_types` ( ON UPDATE NO ACTION, CONSTRAINT `fk_vehicle_types_company_truck_types1` FOREIGN KEY (`type_id`) - REFERENCES `u947463964_etaviaporte`.`company_truck_types` (`id`) + REFERENCES `u947463964_etaviaporte`.`company_vehicle_types` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -633,22 +646,22 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`load_templates` ( CONSTRAINT `fk_load_templates_companies1` FOREIGN KEY (`company_id`) REFERENCES `u947463964_etaviaporte`.`companies` (`id`) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_locations1` FOREIGN KEY (`origin_id`) REFERENCES `u947463964_etaviaporte`.`locations` (`id`) - ON DELETE NO ACTION + ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_locations2` FOREIGN KEY (`destination_id`) REFERENCES `u947463964_etaviaporte`.`locations` (`id`) - ON DELETE NO ACTION + ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT `fk_load_templates_users1` FOREIGN KEY (`created_by`) REFERENCES `u947463964_etaviaporte`.`users` (`id`) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; @@ -684,7 +697,7 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_users` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` INT UNSIGNED NOT NULL, `company_id` INT UNSIGNED NOT NULL, - `created_at` DATETIME NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE, INDEX `fk_company_users_companies1_idx` (`company_id` ASC) VISIBLE, @@ -787,6 +800,133 @@ CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`warehouse_alert_emails` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_status` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_status` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `status` ENUM('Registered', 'InReview', 'Enabled', 'Disabled') NOT NULL DEFAULT 'Registered', + `notes` TEXT NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_company_status_companies1_idx` (`company_id` ASC) VISIBLE, + UNIQUE INDEX `company_id_UNIQUE` (`company_id` ASC) VISIBLE, + CONSTRAINT `fk_company_status_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`company_documents` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`company_documents` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `document_id` VARCHAR(255) NOT NULL, + `name` VARCHAR(512) NOT NULL, + `status` ENUM('New', 'InReview', 'Approved', 'Rejected') NOT NULL DEFAULT 'New', + `status_notes` TEXT NOT NULL COMMENT 'Add metadata like user who reviewed and reason behind the status assigned', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_company_documents_companies1_idx` (`company_id` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_company_documents_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`apikeys` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`apikeys` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, + `name` VARCHAR(512) NOT NULL, + `description` TEXT NULL, + `key_hash` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `expires_at` DATETIME NULL, + PRIMARY KEY (`id`), + UNIQUE INDEX `key_hash_UNIQUE` (`key_hash` ASC) VISIBLE, + CONSTRAINT `fk_apikeys_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`apikey_permissions` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`apikey_permissions` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `application_id` INT UNSIGNED NOT NULL, + `permission_id` INT UNSIGNED NOT NULL, + `apikey_id` INT UNSIGNED NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_apikey_permissions_permissions1_idx` (`permission_id` ASC) VISIBLE, + INDEX `fk_apikey_permissions_apikeys1_idx` (`apikey_id` ASC) VISIBLE, + UNIQUE INDEX `apikey_id_UNIQUE` (`apikey_id` ASC, `permission_id` ASC) VISIBLE, + CONSTRAINT `fk_apikey_permissions_applications1` + FOREIGN KEY (`application_id`) + REFERENCES `u947463964_etaviaporte`.`applications` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_apikey_permissions_permissions1` + FOREIGN KEY (`permission_id`) + REFERENCES `u947463964_etaviaporte`.`permissions` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_apikey_permissions_apikeys1` + FOREIGN KEY (`apikey_id`) + REFERENCES `u947463964_etaviaporte`.`apikeys` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `u947463964_etaviaporte`.`vehicle_documents` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `u947463964_etaviaporte`.`vehicle_documents` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `company_id` INT UNSIGNED NOT NULL, + `vehicle_id` INT UNSIGNED NOT NULL, + `document_id` VARCHAR(255) NOT NULL, + `name` VARCHAR(512) NOT NULL, + `status` ENUM('New', 'InReview', 'Approved', 'Rejected') NOT NULL DEFAULT 'New', + `status_notes` TEXT NOT NULL, + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + INDEX `fk_vehicle_documents_companies1_idx` (`company_id` ASC) VISIBLE, + INDEX `fk_vehicle_documents_vehicles1_idx` (`vehicle_id` ASC) VISIBLE, + UNIQUE INDEX `name_UNIQUE` (`company_id` ASC, `name` ASC) VISIBLE, + CONSTRAINT `fk_vehicle_documents_companies1` + FOREIGN KEY (`company_id`) + REFERENCES `u947463964_etaviaporte`.`companies` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION, + CONSTRAINT `fk_vehicle_documents_vehicles1` + FOREIGN KEY (`vehicle_id`) + REFERENCES `u947463964_etaviaporte`.`vehicles` (`id`) + ON DELETE CASCADE + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;