@opengis/fastify-table 2.0.141 → 2.0.143

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "id": "u",
4
+ "text": "UK"
5
+ },
6
+ {
7
+ "id": "p",
8
+ "text": "PK"
9
+ },
10
+ {
11
+ "id": "f",
12
+ "text": "FK"
13
+ }
14
+ ]
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "id": "u",
4
+ "text": "UK"
5
+ },
6
+ {
7
+ "id": "p",
8
+ "text": "PK"
9
+ },
10
+ {
11
+ "id": "f",
12
+ "text": "FK"
13
+ },
14
+ {
15
+ "id": "c",
16
+ "text": "CHECK"
17
+ }
18
+ ]
@@ -1,2 +1,2 @@
1
- select uid, coalesce(sur_name,'')||coalesce(' '||user_name,'') as text, email from admin.users
1
+ select uid, coalesce(sur_name,'')||coalesce(' '||user_name,'') as text, email from admin.users
2
2
  where enabled order by coalesce(sur_name,'')||coalesce(' '||user_name,'')
@@ -59,7 +59,7 @@ export default async function dataDelete({ table: table1, tokenData, referer, id
59
59
  type: "DELETE",
60
60
  });
61
61
  if (config.redis) {
62
- rclient.incr(`pg:${table}:crud`);
62
+ rclient.incr(`pg:${client.options?.database}:${table}:crud`);
63
63
  }
64
64
  if (!isClient) {
65
65
  await client.query("commit;");
@@ -106,7 +106,7 @@ export default async function dataInsert({ id, table: table1, referer, data, pg:
106
106
  type: "INSERT",
107
107
  });
108
108
  if (config.redis && rclient?.status !== "end") {
109
- rclient.incr(`pg:${table}:crud`);
109
+ rclient.incr(`pg:${client.options?.database}:${table}:crud`);
110
110
  }
111
111
  if (!isClient) {
112
112
  await client.query("commit;");
@@ -172,7 +172,7 @@ export default async function dataUpdate({ table: table1, tokenData, referer, id
172
172
  type: "UPDATE",
173
173
  });
174
174
  if (config.redis && rclient?.status !== "end") {
175
- rclient.incr(`pg:${table}:crud`);
175
+ rclient.incr(`pg:${client.options?.database}:${table}:crud`);
176
176
  }
177
177
  if (!isClient) {
178
178
  await client.query("commit;");
@@ -120,7 +120,7 @@ export default async function dataUpsert({ id, table: table1, referer, data, pg:
120
120
  type: "UPSERT",
121
121
  });
122
122
  if (config.redis) {
123
- rclient.incr(`pg:${table}:crud`);
123
+ rclient.incr(`pg:${client.options?.database}:${table}:crud`);
124
124
  }
125
125
  if (!isClient) {
126
126
  await client.query("commit;");
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs";
2
2
  export default function fsStorage(): {
3
3
  deleteFile: (fp: string) => Promise<void>;
4
- downloadFile: (fp: string, options?: Record<string, any>) => Promise<NonSharedBuffer | fs.ReadStream | {
4
+ downloadFile: (fp: string, options?: Record<string, any>) => Promise<Buffer<ArrayBufferLike> | fs.ReadStream | {
5
5
  original: string;
6
6
  full: string | null;
7
7
  } | null>;
@@ -145,11 +145,11 @@ async function init(client) {
145
145
  return data;
146
146
  }
147
147
  // CRUD table state
148
- const keyCacheTable = `pg:${table}:crud`;
148
+ const keyCacheTable = `pg:${client?.database}:${table}:crud`;
149
149
  const crudInc = table && config.redis ? (await rclient.get(keyCacheTable)) || 0 : 0;
150
150
  //
151
151
  const hash = createHash("sha1")
152
- .update([q, JSON.stringify(args)].join())
152
+ .update([q, client?.database, JSON.stringify(args)].join())
153
153
  .digest("base64");
154
154
  const keyCache = `pg:${hash}:${crudInc}`;
155
155
  const cacheData = config.redis ? await rclient.get(keyCache) : null;
@@ -1,2 +1,2 @@
1
- export default function getRangeQuery(value: any, name: string, fieldType: string | undefined, filterType: string, sql: string, extra?: Record<string, string>, pk?: string): string;
1
+ export default function getRangeQuery(value: any, name: string, fieldType: string | undefined, filterType: string, sql?: string, extra?: Record<string, string>, pk?: string): string;
2
2
  //# sourceMappingURL=getRangeQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getRangeQuery.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.ts"],"names":[],"mappings":"AAkHA,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,EAAE,MAAM,UAwFZ"}
1
+ {"version":3,"file":"getRangeQuery.d.ts","sourceRoot":"","sources":["../../../../../../../server/plugins/table/funcs/getFilterSQL/util/getRangeQuery.ts"],"names":[],"mappings":"AA4NA,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,EAAE,MAAM,UA0FZ"}
@@ -15,18 +15,19 @@ const numberTypeList = [
15
15
  "bigint",
16
16
  ];
17
17
  const isValidDate = (dateStr) => {
18
- if (!dateStr)
18
+ if (!dateStr) {
19
19
  return false;
20
- if (["min", "max"].includes(dateStr))
20
+ }
21
+ if (["min", "max", "cd", "cw", "cm", "cq", "cy"].includes(dateStr)) {
21
22
  return true;
23
+ }
22
24
  // iso date: 2024-01-01
23
- if (dateStr?.indexOf("-") !== -1) {
24
- const [yyyy, mm, dd] = dateStr.split("-");
25
- return new Date(`${mm}/${dd}/${yyyy}`).toString() !== "Invalid Date";
25
+ if (dateStr.includes("-")) {
26
+ return new Date(dateStr).toString() !== "Invalid Date";
26
27
  }
27
28
  // locale date: 01.01.2024
28
29
  const [dd, mm, yyyy] = dateStr.split(".");
29
- return new Date(`${mm}/${dd}/${yyyy}`).toString() !== "Invalid Date";
30
+ return new Date(`${yyyy}-${mm}-${dd}`).toString() !== "Invalid Date";
30
31
  };
31
32
  const isValidNumber = (numStr) => ["min", "max"].includes(numStr) ? true : !isNaN(numStr);
32
33
  function dt(y, m, d) {
@@ -45,58 +46,134 @@ function formatDateISOString(date) {
45
46
  const [day, month, year] = date.split(".");
46
47
  return `${year}-${month}-${day}`;
47
48
  }
48
- function getRangeValues(value = "", filterType = "range") {
49
- if (["range"].includes(filterType)) {
50
- if (value?.includes(","))
51
- return value.split(",").map((el) => el || "min");
52
- if (value?.includes("_"))
53
- return value.split("_");
54
- return value.split("-");
49
+ function checkValid(value, fieldType, filterType, sql, extra) {
50
+ const sep = (value.includes(",") ? "," : null) ||
51
+ (value.includes("_") ? "_" : null) ||
52
+ (value.includes("-") ? "-" : null);
53
+ // number range w/o valid separator => skip invalid filter
54
+ if (filterType === "range" && !sep) {
55
+ return { isvalid: false };
55
56
  }
56
57
  // date range, specific options: current day, week, month, year etc.
57
- if (value === "cd") {
58
- return [dt(dp.y, dp.m, dp.d)];
59
- }
60
- if (value === "cw") {
61
- return [dt(dp.y, dp.m, dp.w), dt(dp.y, dp.m, dp.w + 6)];
62
- }
63
- if (value === "cm") {
64
- return [dt(dp.y, dp.m, 1), dt(dp.y, dp.m + 1, 0)];
65
- }
66
- if (value === "cq") {
67
- return [dt(dp.y, dp.q, 1), dt(dp.y, dp.q + 3, 0)];
68
- }
69
- if (value === "cy") {
70
- return [dt(dp.y, 0, 1), dt(dp.y, 11, 31)];
71
- }
72
- // date range, example: 01.01.2024-31.12.2024
73
- const [startDate, endDate = "max"] = value?.includes(",")
74
- ? value.split(",").map((el) => el || "min")
75
- : value.split("-");
76
- const min = startDate === "min" ? startDate : formatDateISOString(startDate);
77
- const max = endDate === "max" ? endDate : formatDateISOString(endDate);
78
- return [min, max];
79
- }
80
- function checkValid(value, fieldType, filterType, sql, extra) {
81
- const [min, max = "max"] = getRangeValues(value, filterType);
82
- if (["date", "datepicker"].includes(filterType)) {
83
- const isvalid = (dateTypeList.includes(fieldType) || sql || extra) &&
84
- isValidDate(min) &&
85
- (isValidDate(max) || value === "cd");
86
- return { min, max, isvalid };
58
+ if (["date", "datepicker"].includes(filterType) && value === "cd") {
59
+ return {
60
+ min: dt(dp.y, dp.m, dp.d),
61
+ max: dt(dp.y, dp.m, dp.d),
62
+ isvalid: true,
63
+ };
64
+ }
65
+ if (["date", "datepicker"].includes(filterType) && value === "cw") {
66
+ return {
67
+ min: dt(dp.y, dp.m, dp.w),
68
+ max: dt(dp.y, dp.m, dp.w + 6),
69
+ isvalid: true,
70
+ };
71
+ }
72
+ if (["date", "datepicker"].includes(filterType) && value === "cm") {
73
+ return {
74
+ min: dt(dp.y, dp.m, 1),
75
+ max: dt(dp.y, dp.m + 1, 0),
76
+ isvalid: true,
77
+ };
78
+ }
79
+ if (["date", "datepicker"].includes(filterType) && value === "cq") {
80
+ return {
81
+ min: dt(dp.y, dp.q, 1),
82
+ max: dt(dp.y, dp.q + 3, 0),
83
+ isvalid: true,
84
+ };
85
+ }
86
+ if (["date", "datepicker"].includes(filterType) && value === "cy") {
87
+ return {
88
+ min: dt(dp.y, 0, 1),
89
+ max: dt(dp.y, 11, 31),
90
+ isvalid: true,
91
+ };
92
+ }
93
+ // specific period from now - days, months, years
94
+ if (["date", "datepicker"].includes(filterType) &&
95
+ value.match(/^(?<val>[1-9]\d*)(?<unit>d|m|y)$/)?.groups?.unit) {
96
+ const { val, unit } = value.match(/^(?<val>[1-9]\d*)(?<unit>d|m|y)$/)?.groups || {};
97
+ const min = (unit === "d" ? dt(dp.y, dp.m, dp.d - +val) : null) ||
98
+ (unit === "m" ? dt(dp.y, dp.m - +val, dp.d) : null) ||
99
+ (unit === "y" ? dt(dp.y - +val, dp.m, dp.d) : null);
100
+ return {
101
+ min,
102
+ max: dt(dp.y, dp.m, dp.d),
103
+ isvalid: isValidDate(min),
104
+ };
105
+ }
106
+ // specific quarter - before skip date value validation
107
+ if (["date", "datepicker"].includes(filterType) &&
108
+ value.match(/^(?<year>\d{4})-q(?<quarter>[1-4])$/)?.groups?.quarter) {
109
+ const { year, quarter } = value.match(/^(?<year>\d{4})-q(?<quarter>[1-4])$/)?.groups || {};
110
+ const startMonth = +quarter * 3;
111
+ return {
112
+ min: dt(year, startMonth - 3, 1),
113
+ max: dt(year, startMonth, 0),
114
+ isvalid: true,
115
+ };
116
+ }
117
+ // date value validation
118
+ if (["date", "datepicker"].includes(filterType) &&
119
+ !sep &&
120
+ !isValidDate(value)) {
121
+ return { isvalid: false };
87
122
  }
88
- if (["range"].includes(filterType)) {
89
- const isvalid = (numberTypeList.includes(fieldType) || sql || extra) &&
90
- isValidNumber(min) &&
91
- isValidNumber(max);
92
- return { min, max, isvalid };
123
+ // specific date / day
124
+ if (["date", "datepicker"].includes(filterType) &&
125
+ value.match(/^\d{4}-\d{2}-\d{2}$/)?.[0]) {
126
+ return {
127
+ min: new Date(value).toISOString().split("T")[0],
128
+ max: new Date(value).toISOString().split("T")[0],
129
+ isvalid: true,
130
+ };
131
+ }
132
+ // specific month
133
+ if (["date", "datepicker"].includes(filterType) &&
134
+ value.match(/^\d{4}-\d{2}$/)?.[0]) {
135
+ return {
136
+ min: new Date(value).toISOString().split("T")[0],
137
+ max: dt(new Date(value).getFullYear(), new Date(value).getMonth() + 1, 0),
138
+ isvalid: true,
139
+ };
140
+ }
141
+ // specific year
142
+ if (["date", "datepicker"].includes(filterType) &&
143
+ value.match(/^\d{4}$/)?.[0]) {
144
+ return {
145
+ min: dt(value, 0, 1),
146
+ max: dt(value, 11, 31),
147
+ isvalid: true,
148
+ };
149
+ }
150
+ if (sep) {
151
+ const [minValue = "min", maxValue = "max"] = value.split(sep);
152
+ // range for numbers
153
+ if (filterType === "range" && fieldType) {
154
+ const isvalid = (numberTypeList.includes(fieldType) || sql || extra) &&
155
+ isValidNumber(minValue) &&
156
+ isValidNumber(maxValue);
157
+ return { min: minValue, max: maxValue, isvalid };
158
+ }
159
+ // date range, example: 01.01.2024-31.12.2024
160
+ if (["date", "datepicker"].includes(filterType)) {
161
+ const min = minValue === "min" ? minValue : formatDateISOString(minValue);
162
+ const max = maxValue === "max" ? maxValue : formatDateISOString(maxValue);
163
+ const isvalid = fieldType &&
164
+ (dateTypeList.includes(fieldType) || sql || extra) &&
165
+ isValidDate(min) &&
166
+ isValidDate(max);
167
+ return { min, max, isvalid };
168
+ }
93
169
  }
94
170
  return { isvalid: false };
95
171
  }
96
172
  export default function getRangeQuery(value, name, fieldType, filterType, sql, extra, pk) {
97
173
  const { min, max, isvalid } = checkValid(value, fieldType, filterType, sql, extra);
98
- if (!isvalid)
174
+ if (!isvalid) {
99
175
  return "false";
176
+ }
100
177
  // with sql subquery
101
178
  if (["date", "datepicker"].includes(filterType) && sql) {
102
179
  return sql
@@ -1 +1 @@
1
- {"version":3,"file":"getSelectVal.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/table/funcs/metaFormat/getSelectVal.ts"],"names":[],"mappings":"AAaA,wBAA8B,YAAY,CAAC,EACzC,EAAqB,EACrB,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,EAAU,GACX,EAAE,GAAG,gBA6GL"}
1
+ {"version":3,"file":"getSelectVal.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/table/funcs/metaFormat/getSelectVal.ts"],"names":[],"mappings":"AAaA,wBAA8B,YAAY,CAAC,EACzC,EAAqB,EACrB,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,EAAU,GACX,EAAE,GAAG,gBA+GL"}
@@ -38,7 +38,9 @@ export default async function getSelectVal({ pg = pgClients.client, name, values
38
38
  ?.split?.(" from ")
39
39
  ?.filter?.((el) => /^[a-z0-9_]+\.[a-z0-9_]+/.test(el))
40
40
  ?.map?.((el) => el.split(/[ )]/)[0])?.[0];
41
- const crudInc = table && config.redis ? (await rclient.get(`pg:${table}:crud`)) || 0 : 0;
41
+ const crudInc = table && config.redis
42
+ ? (await rclient.get(`pg:${pg.options?.database}:${table}:crud`)) || 0
43
+ : 0;
42
44
  const key = `select:${name}:${crudInc}`;
43
45
  const cache = values?.length && config.redis && !config.disableCache
44
46
  ? (await rclient.hmget(key, values)).reduce((p, el, i) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.0.141",
3
+ "version": "2.0.143",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [
@@ -1 +0,0 @@
1
- [{"name":"prc.application_id","module":"APPLICATION","type":"select","hash":"d5b27c80a2a4682e164c8713f36053fd","dbhash":"d5b27c80a2a4682e164c8713f36053fd","update":false},{"name":"prc.application_status.parent","module":"APPLICATION","type":"select","hash":"1d63a805e56b9b350f7a2ec7df26da3c","dbhash":"1d63a805e56b9b350f7a2ec7df26da3c","update":false},{"name":"prc.application_type","module":"APPLICATION","type":"select","hash":"fa2baf8fbb896363b740a74487281b6b","dbhash":"fa2baf8fbb896363b740a74487281b6b","update":false},{"name":"prc.parcel_purpose_id","module":"APPLICATION","type":"select","hash":"22e43518957449f90b63170033b4ae3b","dbhash":"22e43518957449f90b63170033b4ae3b","update":false},{"name":"prc.parcel_status.parent","module":"APPLICATION","type":"select","hash":"7310662b3e674b4dd3c3a0ae4bc76c80","dbhash":"7310662b3e674b4dd3c3a0ae4bc76c80","update":false},{"name":"addr.address_id","module":"LAND-CADASTRE","type":"select","hash":"19c0d463fa55a284d789bb15318f5ef7","dbhash":"19c0d463fa55a284d789bb15318f5ef7","update":false},{"name":"addr.address_id_full","module":"LAND-CADASTRE","type":"select","hash":"6257b7f173167b7057cc2ff1859a21c1","dbhash":"6257b7f173167b7057cc2ff1859a21c1","update":false},{"name":"addr.address_id_parent","module":"LAND-CADASTRE","type":"select","hash":"01b41b8690c6eb5ad3638d74ae4c007d","dbhash":"01b41b8690c6eb5ad3638d74ae4c007d","update":false},{"name":"addr.city_id","module":"LAND-CADASTRE","type":"select","hash":"a943aa5241a30a33c88e58d223d201db","dbhash":"a943aa5241a30a33c88e58d223d201db","update":false},{"name":"addr.district_id","module":"LAND-CADASTRE","type":"select","hash":"a811b43f9d0eb6e79a796e0a5b988294","dbhash":"a811b43f9d0eb6e79a796e0a5b988294","update":false},{"name":"addr.street_id_full","module":"LAND-CADASTRE","type":"select","hash":"d0e3db667578cf8017e69ca6c0c42b0f","dbhash":"d0e3db667578cf8017e69ca6c0c42b0f","update":false},{"name":"address_id","module":"LAND-CADASTRE","type":"select","hash":"e993b5c610baa695cbc8db8f5d20af5a","dbhash":"e993b5c610baa695cbc8db8f5d20af5a","update":false},{"name":"gis.srid_from_setting","module":"LAND-CADASTRE","type":"select","hash":"138a168c385a79ec7a3e949be4daef57","dbhash":"138a168c385a79ec7a3e949be4daef57","update":false},{"name":"prc.acc_id","module":"LAND-CADASTRE","type":"select","hash":"3ed8c88c51586b256b97743f07ca4821","dbhash":"3ed8c88c51586b256b97743f07ca4821","update":false},{"name":"prc.cad_zone_id","module":"LAND-CADASTRE","type":"select","hash":"1c53abf0fad143bbba6b331f9ddd8272","dbhash":"1c53abf0fad143bbba6b331f9ddd8272","update":false},{"name":"prc.decision_type","module":"LAND-CADASTRE","type":"select","hash":"f9490ca91fa59d256651f51262300a75","dbhash":"f9490ca91fa59d256651f51262300a75","update":false},{"name":"prc.doc_id","module":"LAND-CADASTRE","type":"select","hash":"185d98585e3e0be5d4ee929a19b03bfe","dbhash":"185d98585e3e0be5d4ee929a19b03bfe","update":false},{"name":"prc.doc_id_note","module":"LAND-CADASTRE","type":"select","hash":"c83b6536588cfa2ab7b5bac00f04bcd3","dbhash":"c83b6536588cfa2ab7b5bac00f04bcd3","update":false},{"name":"prc.doc_id_short","module":"LAND-CADASTRE","type":"select","hash":"29f98ae3fe10e834b542d53e2dcef592","dbhash":"29f98ae3fe10e834b542d53e2dcef592","update":false},{"name":"prc.parcel_id.full","module":"LAND-CADASTRE","type":"select","hash":"0a3846884fc21a87058d8943ae02df18","dbhash":"0a3846884fc21a87058d8943ae02df18","update":false},{"name":"prc.parcel_id","module":"LAND-CADASTRE","type":"select","hash":"7408a469d8994d4da3235c5e201f8b3a","dbhash":"7408a469d8994d4da3235c5e201f8b3a","update":false},{"name":"prc.techdoc_id","module":"LAND-CADASTRE","type":"select","hash":"1c4c2ebcf86244c5caf6ab345fb8707c","dbhash":"1c4c2ebcf86244c5caf6ab345fb8707c","update":false},{"name":"prc.techdoc_id_parent","module":"LAND-CADASTRE","type":"select","hash":"9f654d802ab549c406ea4b8b9db80a47","dbhash":"9f654d802ab549c406ea4b8b9db80a47","update":false},{"name":"user_id","module":"LAND-CADASTRE","type":"select","hash":"4339922d053e66ccd43e34f2838037b1","dbhash":"4339922d053e66ccd43e34f2838037b1","update":false},{"name":"core.roles","module":"management","type":"select","hash":"ed1290380ea5e5e7e48bd08b41cb7793","dbhash":"ed1290380ea5e5e7e48bd08b41cb7793","update":false},{"name":"core.user_uid","module":"management","type":"select","hash":"45f7d8a57ecbca5b433be7937be51d5c","dbhash":"45f7d8a57ecbca5b433be7937be51d5c","update":false},{"name":"prc.documents_id","module":"RENT","type":"select","hash":"bc5f97cd6c556fefac244b3ff8629be9","dbhash":"bc5f97cd6c556fefac244b3ff8629be9","update":false},{"name":"prc.lease_id.main","module":"RENT","type":"select","hash":"f53e8e47e8ad68572f966d95fcf88163","dbhash":"f53e8e47e8ad68572f966d95fcf88163","update":false},{"name":"prc.lease_id","module":"RENT","type":"select","hash":"3372135b6009a9f2170d18b664750db0","dbhash":"3372135b6009a9f2170d18b664750db0","update":false},{"name":"prc.parcel_parent_id","module":"RENT","type":"select","hash":"bb2617b27f3226757cf816b55011c2bd","dbhash":"bb2617b27f3226757cf816b55011c2bd","update":false},{"name":"core.user_mentioned","module":"core","type":"select","hash":"6687f073de73a3ec4b6e0811d9310e7e","dbhash":"6687f073de73a3ec4b6e0811d9310e7e","update":false},{"name":"prc.application_status","module":"APPLICATION","type":"cls","hash":"d67580fb015c51a6da5cb5c82b405149","dbhash":"d67580fb015c51a6da5cb5c82b405149","update":false},{"name":"prc.application_status_final","module":"APPLICATION","type":"cls","hash":"0c27260728c4beced279366bf5b8662d","dbhash":"0c27260728c4beced279366bf5b8662d","update":false},{"name":"addr.str_type","module":"LAND-CADASTRE","type":"cls","hash":"9c5a1d1cc9dbb53a888894bf4e2c0e34","dbhash":"9c5a1d1cc9dbb53a888894bf4e2c0e34","update":false},{"name":"prc.acc_type","module":"LAND-CADASTRE","type":"cls","hash":"8db9b5df034826fbf54e3c6eec61bf71","dbhash":"8db9b5df034826fbf54e3c6eec61bf71","update":false},{"name":"prc.acc_type_legal","module":"LAND-CADASTRE","type":"cls","hash":"dfd54768ed4ebc9703b157a930578f48","dbhash":"dfd54768ed4ebc9703b157a930578f48","update":false},{"name":"prc.act_type","module":"LAND-CADASTRE","type":"cls","hash":"d5eff799a96149aebcdd67253c0f15e6","dbhash":"d5eff799a96149aebcdd67253c0f15e6","update":false},{"name":"prc.area_determination_type","module":"LAND-CADASTRE","type":"cls","hash":"de9d7085ba3e411bbe7d2bd03845705a","dbhash":"de9d7085ba3e411bbe7d2bd03845705a","update":false},{"name":"prc.document_type","module":"LAND-CADASTRE","type":"cls","hash":"2edc45649c4fc9b84968ad9872efd0fb","dbhash":"2edc45649c4fc9b84968ad9872efd0fb","update":false},{"name":"prc.experise_required","module":"LAND-CADASTRE","type":"cls","hash":"2bbb6c3d6999fab6e0550a03378b956d","dbhash":"2bbb6c3d6999fab6e0550a03378b956d","update":false},{"name":"prc.expert_opinion","module":"LAND-CADASTRE","type":"cls","hash":"742f77e355cfecedfb1497b15bb1e383","dbhash":"742f77e355cfecedfb1497b15bb1e383","update":false},{"name":"prc.f6zem_id","module":"LAND-CADASTRE","type":"cls","hash":"130790407b88fbff11d3fe8e60f7f553","dbhash":"130790407b88fbff11d3fe8e60f7f553","update":false},{"name":"prc.isfinite_restriction","module":"LAND-CADASTRE","type":"cls","hash":"752f30bf64facf53da89d5169cce4fd1","dbhash":"752f30bf64facf53da89d5169cce4fd1","update":false},{"name":"prc.isfree_payment","module":"LAND-CADASTRE","type":"cls","hash":"0fc5499f9035ac2e2bb554225c5d2046","dbhash":"0fc5499f9035ac2e2bb554225c5d2046","update":false},{"name":"prc.kvzu_id","module":"LAND-CADASTRE","type":"cls","hash":"05c068bfe09eef1ddadf67497ad1d131","dbhash":"05c068bfe09eef1ddadf67497ad1d131","update":false},{"name":"prc.legal_mode_status","module":"LAND-CADASTRE","type":"cls","hash":"9706863470ce8c9697a7d228eca95b2e","dbhash":"9706863470ce8c9697a7d228eca95b2e","update":false},{"name":"prc.legal_mode_type","module":"LAND-CADASTRE","type":"cls","hash":"a9c4d94188748a06f455158ce9d25de2","dbhash":"a9c4d94188748a06f455158ce9d25de2","update":false},{"name":"prc.legal_mode_type_card","module":"LAND-CADASTRE","type":"cls","hash":"141e7f1de7ba62f7664c581e36027ba8","dbhash":"141e7f1de7ba62f7664c581e36027ba8","update":false},{"name":"prc.parcel_area_unit","module":"LAND-CADASTRE","type":"cls","hash":"1cf59c05fb8b62101493f46e57080066","dbhash":"1cf59c05fb8b62101493f46e57080066","update":false},{"name":"prc.parcel_category","module":"LAND-CADASTRE","type":"cls","hash":"88962a86df4c48b66a0845ec07128e82","dbhash":"88962a86df4c48b66a0845ec07128e82","update":false},{"name":"prc.parcel_location","module":"LAND-CADASTRE","type":"cls","hash":"1b608780bbbec4f0170dd56d42e5e607","dbhash":"1b608780bbbec4f0170dd56d42e5e607","update":false},{"name":"prc.parcel_ownership","module":"LAND-CADASTRE","type":"cls","hash":"19fbc136a3b902f501701c0e568d3a19","dbhash":"19fbc136a3b902f501701c0e568d3a19","update":false},{"name":"prc.parcel_part_unit","module":"LAND-CADASTRE","type":"cls","hash":"b6c6ae04b0d59bdca084c6799cfb4fa2","dbhash":"b6c6ae04b0d59bdca084c6799cfb4fa2","update":false},{"name":"prc.parcel_purpose","module":"LAND-CADASTRE","type":"cls","hash":"63ffa5cf27a069392cde707411aee8db","dbhash":"63ffa5cf27a069392cde707411aee8db","update":false},{"name":"prc.parcel_status","module":"LAND-CADASTRE","type":"cls","hash":"94689671b1e1de2f5bb7c55ba6b40549","dbhash":"94689671b1e1de2f5bb7c55ba6b40549","update":false},{"name":"prc.restriction_code","module":"LAND-CADASTRE","type":"cls","hash":"233ab49757f163bd9ae2ebc81088b0ad","dbhash":"233ab49757f163bd9ae2ebc81088b0ad","update":false},{"name":"prc.serv_period","module":"LAND-CADASTRE","type":"cls","hash":"46fda14a1bc9222e886f27d60643e9e2","dbhash":"46fda14a1bc9222e886f27d60643e9e2","update":false},{"name":"prc.serv_type","module":"LAND-CADASTRE","type":"cls","hash":"15ddb366e1e0adf2672932f2137885da","dbhash":"15ddb366e1e0adf2672932f2137885da","update":false},{"name":"prc.techdoc_path","module":"LAND-CADASTRE","type":"cls","hash":"fb52a616b0ece0ec9ac0ebc8f7e6ee34","dbhash":"fb52a616b0ece0ec9ac0ebc8f7e6ee34","update":false},{"name":"prc.techdoc_type","module":"LAND-CADASTRE","type":"cls","hash":"f607216be06fea28fafdee56b94d204f","dbhash":"f607216be06fea28fafdee56b94d204f","update":false},{"name":"prc.valuation_type","module":"LAND-CADASTRE","type":"cls","hash":"deffc6b334e24d72fc562dd6bca90839","dbhash":"deffc6b334e24d72fc562dd6bca90839","update":false},{"name":"yes_no","module":"LAND-CADASTRE","type":"cls","hash":"50c527053426248c20b0a2f112ff9046","dbhash":"50c527053426248c20b0a2f112ff9046","update":false},{"name":"users.user_type","module":"management","type":"cls","hash":"750ece56e1d55cd7a1e1b002df88ec91","dbhash":"750ece56e1d55cd7a1e1b002df88ec91","update":false},{"name":"dpo.lease_is_main","module":"RENT","type":"cls","hash":"6e5d9cffd9f4dbc31c1329d23143cbd0","dbhash":"6e5d9cffd9f4dbc31c1329d23143cbd0","update":false},{"name":"dpo.lease_status","module":"RENT","type":"cls","hash":"e3fb9ca8d294ceeb4d31b9b221608ace","dbhash":"e3fb9ca8d294ceeb4d31b9b221608ace","update":false},{"name":"dpo.lease_type","module":"RENT","type":"cls","hash":"2d87548b2f6b0b510329a8a8852501c6","dbhash":"2d87548b2f6b0b510329a8a8852501c6","update":false},{"name":"dpo.servitut_type","module":"RENT","type":"cls","hash":"647f2f55c4e9d508c45c8da498a50418","dbhash":"647f2f55c4e9d508c45c8da498a50418","update":false},{"name":"type_report","module":"RENT","type":"cls","hash":"a317e46b876b31598fbd9a39d21277ea","dbhash":"a317e46b876b31598fbd9a39d21277ea","update":false},{"name":"constraint_action","module":"core","type":"cls","hash":"1b7129eae9eb42106ed6e646223c806a","dbhash":"1b7129eae9eb42106ed6e646223c806a","update":false},{"name":"constraint_matchtype","module":"core","type":"cls","hash":"446ad903e69a391748a8a27bae2dc5cd","dbhash":"446ad903e69a391748a8a27bae2dc5cd","update":false},{"name":"constraint_type_full","module":"core","type":"cls","hash":"9e1cc580273f7e73fbc08ee553ad8f64","dbhash":"9e1cc580273f7e73fbc08ee553ad8f64","update":false},{"name":"core.user_type","module":"core","type":"cls","hash":"728bc9e0bcc88de83ec56d8dc7e7efff","dbhash":"728bc9e0bcc88de83ec56d8dc7e7efff","update":false}]
File without changes