odant-work 1.0.12 → 1.0.14
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.
- package/#system/certs/russian_trusted_root_ca.pem +33 -0
- package/#system/mail.json.example +9 -0
- package/#system/package-manifest.json +1026 -0
- package/#system/sandbox.json +19 -0
- package/#system/settings.json.example +3 -0
- package/$server/$folder/handlers/methods/create/$handler/class.js +64 -5
- package/MODULES/Register/CATALOGS//320/224/320/276/320/263/320/276/320/262/320/276/321/200/321/213/$catalog/class.js +1 -1
- package/MODULES/Register/CATALOGS//320/224/320/276/320/273/320/266/320/275/320/276/321/201/321/202/320/270/$catalog/class.js +11 -0
- package/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260/$catalog/class.js +1 -1
- package/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/230/320/237/$catalog/class.js +14 -0
- package/MODULES/Register/OPERATIONS//320/232/320/260/321/201/321/201/320/260/$operation/class.js +10 -0
- package/MODULES/Register/OPERATIONS//320/232/320/260/321/201/321/201/320/260//320/220/320/262/320/260/320/275/321/201/320/276/320/262/321/213/320/271 /320/276/321/202/321/207/321/221/321/202/$operation/class.js" +17 -0
- package/MODULES/Register/OPERATIONS//320/232/320/260/321/201/321/201/320/260//320/237/320/232/320/236/$operation/class.js +18 -0
- package/MODULES/Register/OPERATIONS//320/232/320/260/321/201/321/201/320/260//320/240/320/232/320/236/$operation/class.js +17 -0
- package/MODULES/Register/OPERATIONS//320/236/321/201/320/275/320/276/320/262/320/275/321/213/320/265 /321/201/321/200/320/265/320/264/321/201/321/202/320/262/320/260/$operation/class.js" +4 -0
- package/MODULES/Register/OPERATIONS//320/236/321/201/320/275/320/276/320/262/320/275/321/213/320/265 /321/201/321/200/320/265/320/264/321/201/321/202/320/262/320/260//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/260/320/274/320/276/321/200/321/202/320/270/320/267/320/260/321/206/320/270/320/270/$operation/class.js" +18 -0
- package/MODULES/Register/OPERATIONS//320/236/321/201/320/275/320/276/320/262/320/275/321/213/320/265 /321/201/321/200/320/265/320/264/321/201/321/202/320/262/320/260//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /320/236/320/241/$operation/class.js" +29 -0
- package/MODULES/Register/OPERATIONS//320/236/321/201/320/275/320/276/320/262/320/275/321/213/320/265 /321/201/321/200/320/265/320/264/321/201/321/202/320/262/320/260//320/237/321/200/320/270/320/275/321/217/321/202/320/270/320/265 /320/272 /321/203/321/207/321/221/321/202/321/203 /320/236/320/241/$operation/class.js" +20 -0
- package/MODULES/Register/OPERATIONS//320/237/321/200/320/276/320/270/320/267/320/262/320/276/320/264/321/201/321/202/320/262/320/276/$operation/class.js +4 -0
- package/MODULES/Register/OPERATIONS//320/237/321/200/320/276/320/270/320/267/320/262/320/276/320/264/321/201/321/202/320/262/320/276//320/222/321/213/320/277/321/203/321/201/320/272 /320/263/320/276/321/202/320/276/320/262/320/276/320/271 /320/277/321/200/320/276/320/264/321/203/320/272/321/206/320/270/320/270/$operation/class.js" +22 -0
- package/MODULES/Register/OPERATIONS//320/237/321/200/320/276/320/270/320/267/320/262/320/276/320/264/321/201/321/202/320/262/320/276//320/237/320/265/321/200/320/265/320/264/320/260/321/207/320/260 /320/274/320/260/321/202/320/265/321/200/320/270/320/260/320/273/320/276/320/262 /320/262 /320/277/321/200/320/276/320/270/320/267/320/262/320/276/320/264/321/201/321/202/320/262/320/276/$operation/class.js" +21 -0
- package/MODULES/Register/OPERATIONS//320/237/321/200/320/276/320/270/320/267/320/262/320/276/320/264/321/201/321/202/320/262/320/276//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /320/276/320/261/321/211/320/265/321/205/320/276/320/267/321/217/320/271/321/201/321/202/320/262/320/265/320/275/320/275/321/213/321/205 /320/267/320/260/321/202/321/200/320/260/321/202/$operation/class.js" +28 -0
- package/MODULES/Register/OPERATIONS//320/244/320/270/320/275/320/260/320/275/321/201/320/276/320/262/321/213/320/271 /321/200/320/265/320/267/321/203/320/273/321/214/321/202/320/260/321/202/$operation/class.js" +4 -0
- package/MODULES/Register/OPERATIONS//320/244/320/270/320/275/320/260/320/275/321/201/320/276/320/262/321/213/320/271 /321/200/320/265/320/267/321/203/320/273/321/214/321/202/320/260/321/202//320/227/320/260/320/272/321/200/321/213/321/202/320/270/320/265 /320/274/320/265/321/201/321/217/321/206/320/260/$operation/class.js" +18 -0
- package/MODULES/Register/REGISTER/01/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/02/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/04/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/08/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/10/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/10/01/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/10/05/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/43/$account/class.js +10 -0
- package/MODULES/Register/REGISTER/50/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/55/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/58/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/66/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/68/04/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/71/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/73/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/75/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/76/$account/class.js +9 -0
- package/MODULES/Register/REGISTER/80/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/84/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/90/03/$account/class.js +5 -0
- package/MODULES/Register/REGISTER/90/09/$account/class.js +1 -0
- package/MODULES/Register/REGISTER/99/$account/class.js +1 -0
- package/MODULES/Register/STRUCTS//320/221/320/260/320/275/320/272/320/276/320/262/321/201/320/272/320/270/320/271 /321/201/321/207/321/221/321/202/$struct/class.js" +12 -0
- package/package.json +1 -1
- package/run.mjs +50 -11
- package/scripts/check-ignored-code.mjs +25 -1
- package/sources/data/api.js +1071 -0
- package/sources/data/choices.js +125 -0
- package/sources/data/classes.js +412 -0
- package/sources/data/db.js +383 -0
- package/sources/data/errors.js +15 -0
- package/sources/data/expr.js +456 -0
- package/sources/data/objects.js +950 -0
- package/sources/data/posting.js +657 -0
- package/sources/data/print.js +524 -0
- package/sources/data/progress.md +537 -0
- package/sources/data/readme.md +77 -0
- package/sources/data/reports.js +1033 -0
- package/sources/data/schema.js +586 -0
- package/sources/data/scope.js +281 -0
- package/sources/data/sql-inspector.js +892 -0
- package/sources/data/time.js +67 -0
- package/sources/data/workspace.js +152 -0
- package/sources/host/auto-updater.js +65 -14
- package/sources/server/class/base-template.js +702 -0
- package/sources/server/class.js +48 -13
- package/.vscode/launch.json +0 -32
- package/.vscode/settings.json +0 -2
- package/.vscode/tasks.json +0 -65
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/$base/class.js" +0 -53
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/$domain/$folder/$class/$module/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/$domain/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/$module/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/222/320/270/320/264/321/213 /320/275/320/260/320/273/320/276/320/263/320/276/320/262/$catalog/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/224/320/276/320/273/320/266/320/275/320/276/321/201/321/202/320/270/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/232/320/273/320/270/320/265/320/275/321/202/321/213/$virtual/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260/$catalog/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213/$catalog/class.js" +0 -11
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213//320/234/320/265/320/261/320/265/320/273/321/214/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213//320/236/320/261/320/276/321/200/321/203/320/264/320/276/320/262/320/260/320/275/320/270/320/265/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213//320/240/320/260/320/261/320/276/321/202/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213//320/241/321/202/320/276/321/200/320/276/320/275/320/275/320/265/320/265 /320/237/320/236/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/227/320/260/321/202/321/200/320/260/321/202/321/213//320/241/321/202/320/276/321/200/320/276/320/275/320/275/320/270/320/265 /321/203/321/201/320/273/321/203/320/263/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/236/320/241 /320/270 /320/235/320/234/320/220/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201/$catalog/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/236/320/261/320/276/321/200/321/203/320/264/320/276/320/262/320/260/320/275/320/270/320/265/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/237/321/200/320/276/320/264/321/203/320/272/321/202/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/237/321/200/320/276/320/264/321/203/320/272/321/202/321/213//320/232/320/273/320/260/321/201/321/201/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/237/321/200/320/276/320/264/321/203/320/272/321/202/321/213//320/232/320/273/320/260/321/201/321/201/321/213//320/224/320/276/320/272/321/203/320/274/320/265/320/275/321/202/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/237/321/200/320/276/320/264/321/203/320/272/321/202/321/213//320/232/320/273/320/260/321/201/321/201/321/213//320/241/320/265/321/200/320/262/320/270/321/201/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/237/321/200/320/276/320/264/321/203/320/272/321/202/321/213//320/232/320/273/320/260/321/201/321/201/321/213//320/241/320/277/321/200/320/260/320/262/320/276/321/207/320/275/320/270/320/272/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/1. /320/237/321/200/320/265/320/264/320/277/321/200/320/276/320/265/320/272/321/202/320/275/320/276/320/265 /320/276/320/261/321/201/320/273/320/265/320/264/320/276/320/262/320/260/320/275/320/270/320/265/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/2. /320/241/320/276/320/267/320/264/320/260/320/275/320/270/320/265 /320/270/320/275/321/204/321/200/320/260/321/201/321/202/321/200/321/203/320/272/321/202/321/203/321/200/321/213/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/3. /320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 /320/272/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/4. /320/222/320/275/320/265/320/264/321/200/320/265/320/275/320/270/320/265/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/5. /320/236/320/277/321/213/321/202/320/275/320/260/321/217 /321/215/320/272/321/201/320/277/320/273/321/203/320/260/321/202/320/260/321/206/320/270/321/217/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/6. /320/241/320/276/320/267/320/264/320/260/320/275/320/270/320/265 /321/202/320/265/321/205/320/275/320/270/321/207/320/265/321/201/320/272/320/276/320/271 /320/264/320/276/320/272/321/203/320/274/320/265/320/275/321/202/320/260/321/206/320/270/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270/7. /320/241/320/276/320/277/321/200/320/276/320/262/320/276/320/266/320/264/320/265/320/275/320/270/320/265/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/237/321/200/320/260/320/271/321/201//320/243/321/201/320/273/321/203/320/263/320/270//320/237/321/200/320/276/321/207/320/270/320/265 /321/203/321/201/320/273/321/203/320/263/320/270/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/237/320/276/321/201/320/265/321/202/320/270/321/202/320/265/320/273/320/270 /320/262/321/213/321/201/321/202/320/260/320/262/320/276/320/272/$catalog/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/237/320/276/321/201/321/202/320/260/320/262/321/211/320/270/320/272/320/270/$virtual/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/320/272/320/273/320/260/320/264/321/213/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/320/276/321/202/321/200/321/203/320/264/320/275/320/270/320/272/320/270/$virtual/class.js" +0 -20
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/230/320/237/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/244/320/270/320/267. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -24
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/256/321/200. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -21
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS/$operation/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/220/320/262/320/260/320/275/321/201/320/276/320/262/321/213/320/271 /320/276/321/202/321/207/321/221/321/202/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/220/320/272/321/202/321/213/$operation/class.js" +0 -14
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/221/320/260/320/275/320/272/320/276/320/262/321/201/320/272/320/270/320/271 /320/276/321/200/320/264/320/265/321/200/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/224/320/276/320/262/320/265/321/200/320/265/320/275/320/275/320/276/321/201/321/202/321/214/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/224/320/276/320/263/320/276/320/262/320/276/321/200/321/213/$operation/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/227/320/260/320/264/320/260/320/275/320/270/321/217 /320/275/320/260 /321/200/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/321/203/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/227/320/260/320/272/320/260/320/267/321/213/$operation/class.js" +0 -25
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/227/320/260/320/272/321/200/321/213/321/202/320/270/320/265 /320/277/320/265/321/200/320/270/320/276/320/264/320/260/$operation/class.js" +0 -28
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/230/320/275/320/272/320/260/321/201/321/201/320/276/320/262/321/213/320/265 /320/277/320/276/321/200/321/203/321/207/320/265/320/275/320/270/321/217/$operation/class.js" +0 -14
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/232/320/276/320/274/320/260/320/275/320/264/320/270/321/200/320/276/320/262/320/276/321/207/320/275/321/213/320/265/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/232/320/276/320/274/320/277/320/273/320/265/320/272/321/202/320/260/321/206/320/270/321/217/$operation/class.js" +0 -14
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/260/320/274/320/276/321/200/321/202/320/270/320/267/320/260/321/206/320/270/320/270/$operation/class.js" +0 -11
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/267/320/260/321/200/320/260/320/261/320/276/321/202/320/275/320/276/320/271 /320/277/320/273/320/260/321/202/321/213/$operation/class.js" +0 -32
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/275/320/260/320/273/320/276/320/263/320/276/320/262/$operation/class.js" +0 -20
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/232/320/236/$operation/class.js" +0 -17
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/270/321/201/321/214/320/274/320/260 /320/262/321/205/320/276/320/264/321/217/321/211/320/270/320/265/$operation/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/270/321/201/321/214/320/274/320/260 /320/270/321/201/321/205/320/276/320/264/321/217/321/211/320/270/320/265/$operation/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/321/221/320/266/320/275/320/276/320/265 /320/277/320/276/321/200/321/203/321/207/320/265/320/275/320/270/320/265/$operation/class.js" +0 -27
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /320/236/320/241/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /320/275/320/260 /321/201/321/207/321/221/321/202/$operation/class.js" +0 -24
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/272/320/260/320/267/321/213 /320/277/320/276 /320/272/320/260/320/264/321/200/320/260/320/274/$operation/class.js" +0 -20
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/272/320/260/320/267/321/213 /320/277/320/276 /320/277/321/200/320/265/320/264/320/277/321/200/320/270/321/217/321/202/320/270/321/216/$operation/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/275/321/217/321/202/320/270/320/265 /320/272 /321/203/321/207/321/221/321/202/321/203/$operation/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/240/320/232/320/236/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/240/320/260/321/201/321/205/320/276/320/264/320/275/321/213/320/265 /320/275/320/260/320/272/320/273/320/260/320/264/320/275/321/213/320/265/$operation/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /320/236/320/241/$operation/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /320/267/320/260/321/202/321/200/320/260/321/202/$operation/class.js" +0 -27
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /321/201/320/276 /321/201/321/207/321/221/321/202/320/260/$operation/class.js" +0 -21
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/241/321/207/320/265/321/202/320/260/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/241/321/207/320/265/321/202/320/260-/321/204/320/260/320/272/321/202/321/203/321/200/321/213/$operation/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/OPERATIONS//320/243/320/264/320/265/321/200/320/266/320/260/320/275/320/270/321/217 /320/267/320/260/321/200/320/260/320/261/320/276/321/202/320/275/320/276/320/271 /320/277/320/273/320/260/321/202/321/213/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/$register/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/01/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/02/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/04/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/08/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/10/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/10/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/10/05/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/26/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/50/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/51/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/55/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/55/04/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/58/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/58/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/58/03/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/60/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/62/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/66/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/66/03/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/68/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/68/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/68/07/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/68/09/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/68/10/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/69/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/69/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/69/02/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/69/03/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/69/11/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/70/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/71/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/73/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/75/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/75/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/76/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/80/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/86/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/90/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/90/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/90/02/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/90/07/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/90/09/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/91/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/91/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/91/02/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/99/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/REGISTER/99/01/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS/$struct/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/220/320/264/321/200/320/265/321/201/$struct/class.js" +0 -11
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/221/320/260/320/275/320/272/320/276/320/262/321/201/320/272/320/270/320/271 /321/201/321/207/321/221/321/202/$struct/class.js" +0 -12
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/237/320/260/321/201/320/277/320/276/321/200/321/202/$struct/class.js" +0 -3
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/236/320/241/$struct/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/260/320/262/320/260/320/275/321/201/320/276/320/262/320/276/320/263/320/276 /320/276/321/202/321/207/321/221/321/202/320/260/$struct/class.js" +0 -15
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/267/320/260/320/272/320/260/320/267/320/260/$struct/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/201/320/277/320/270/321/201/320/260/320/275/320/270/321/217 /320/267/320/260/321/202/321/200/320/260/321/202/$struct/class.js" +0 -13
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/201/321/207/321/221/321/202/320/260/$struct/class.js" +0 -14
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/202/320/260/320/261/320/265/320/273/321/217 /320/227/320/237/$struct/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/accounting/$structure/class.js" +0 -103
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/development/$structure/class.js" +0 -16
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/hr/$structure/class.js" +0 -22
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/orders/$structure/class.js" +0 -24
- package/ORGANIZATIONS//320/221/320/270/320/267/320/275/320/265/321/201 /320/230/320/275/321/202/320/265/321/200 /320/241/320/276/321/204/321/202/orders/$structure/video/IMG_8524.MP4 +0 -0
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/$base/class.js" +0 -53
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/$domain/$folder/$class/$module/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/$domain/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/$module/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS/$catalog/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/222/320/270/320/264/321/213 /320/275/320/260/320/273/320/276/320/263/320/276/320/262/$catalog/class.js" +0 -10
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/230/320/275/321/202/320/265/321/200/320/262/321/214/321/216/320/265/321/200/321/213/$catalog/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/230/320/275/321/202/320/265/321/200/320/262/321/214/321/216/320/265/321/200/321/213//320/232/320/276/321/201/321/217/321/207/320/275/321/213/320/265/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/230/320/275/321/202/320/265/321/200/320/262/321/214/321/216/320/265/321/200/321/213//320/234/320/265/320/275/320/265/320/264/320/266/320/265/321/200/321/213/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/230/320/275/321/202/320/265/321/200/320/262/321/214/321/216/320/265/321/200/321/213//320/235/320/265 /321/200/320/260/320/261/320/276/321/202/320/260/321/216/321/202/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/230/320/275/321/202/320/265/321/200/320/262/321/214/321/216/320/265/321/200/321/213//320/240/320/260/320/261/320/276/321/202/320/260/321/216/321/211/320/270/320/265/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/232/320/273/320/270/320/265/320/275/321/202/321/213/$virtual/class.js" +0 -10
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/232/320/276/320/274/320/274/320/265/321/200/321/207/320/265/321/201/320/272/320/260/321/217 /320/275/320/265/320/264/320/262/320/270/320/266/320/270/320/274/320/276/321/201/321/202/321/214/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260/$catalog/class.js" +0 -11
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/236/320/241 /320/270 /320/235/320/234/320/220/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260//320/240/320/260/320/261/320/276/321/202/321/213 /320/270 /321/203/321/201/320/273/321/203/320/263/320/270/$catalog/class.js" +0 -11
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/236/320/277/321/200/320/276/321/201/321/213/$catalog/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/237/320/276/321/201/321/202/320/260/320/262/321/211/320/270/320/272/320/270/$virtual/class.js" +0 -10
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/241/320/276/321/202/321/200/321/203/320/264/320/275/320/270/320/272/320/270/$virtual/class.js" +0 -18
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/241/320/277/320/270/321/201/320/276/320/272 /320/276/321/200/320/263/320/260/320/275/320/270/320/267/320/260/321/206/320/270/320/271/$catalog/class.js" +0 -12
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213/$catalog/class.js" +0 -13
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/244/320/270/320/267. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -22
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/256/321/200. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -21
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS/$operation/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/220/320/262/320/260/320/275/321/201/320/276/320/262/321/213/320/271 /320/276/321/202/321/207/321/221/321/202/$operation/class.js" +0 -24
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/220/320/272/321/202/321/213/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/222/320/262/320/276/320/264 /320/276/321/201/321/202/320/260/321/202/320/272/320/276/320/262/$operation/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/224/320/276/320/262/320/265/321/200/320/265/320/275/320/275/320/276/321/201/321/202/321/214/$operation/class.js" +0 -15
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/227/320/260/320/272/320/260/320/267/321/213/$operation/class.js" +0 -31
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/227/320/260/320/272/321/200/321/213/321/202/320/270/320/265 /320/277/320/265/321/200/320/270/320/276/320/264/320/260/$operation/class.js" +0 -28
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/260/320/274/320/276/321/200/321/202/320/270/320/267/320/260/321/206/320/270/320/270/$operation/class.js" +0 -20
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/267/320/260/321/200/320/260/320/261/320/276/321/202/320/275/320/276/320/271 /320/277/320/273/320/260/321/202/321/213/$operation/class.js" +0 -31
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/235/320/260/321/207/320/270/321/201/320/273/320/265/320/275/320/270/320/265 /320/275/320/260/320/273/320/276/320/263/320/276/320/262/$operation/class.js" +0 -20
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/320/232/320/236/$operation/class.js" +0 -17
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/321/221/320/266/320/275/320/276/320/265 /320/277/320/276/321/200/321/203/321/207/320/265/320/275/320/270/320/265/$operation/class.js" +0 -28
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /320/236/320/241/$operation/class.js" +0 -24
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /320/275/320/260 /321/201/321/207/321/221/321/202/$operation/class.js" +0 -24
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/272/320/260/320/267/321/213 /320/277/320/276 /320/272/320/260/320/264/321/200/320/260/320/274/$operation/class.js" +0 -20
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/272/320/260/320/267/321/213 /320/277/320/276 /320/277/321/200/320/265/320/264/320/277/321/200/320/270/321/217/321/202/320/270/321/216/$operation/class.js" +0 -11
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/237/321/200/320/270/320/275/321/217/321/202/320/270/320/265 /320/272 /321/203/321/207/321/221/321/202/321/203/$operation/class.js" +0 -19
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/240/320/232/320/236/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /320/267/320/260/321/202/321/200/320/260/321/202/$operation/class.js" +0 -27
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/241/320/277/320/270/321/201/320/260/320/275/320/270/320/265 /321/201/320/276 /321/201/321/207/321/221/321/202/320/260/$operation/class.js" +0 -21
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/OPERATIONS//320/241/321/207/320/265/321/202/320/260/$operation/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/$register/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/01/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/02/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/08/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/26/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/50/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/51/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/60/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/62/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/68/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/68/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/68/09/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/68/10/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/69/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/69/01/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/69/02/$account/class.js" +0 -10
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/69/03/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/69/11/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/70/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/71/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/73/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/90/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/90/01/$account/class.js" +0 -9
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/REGISTER/99/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS/$struct/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/220/320/264/321/200/320/265/321/201/$struct/class.js" +0 -11
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/221/320/260/320/275/320/272/320/276/320/262/321/201/320/272/320/270/320/271 /321/201/321/207/321/221/321/202/$struct/class.js" +0 -12
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/237/320/260/321/201/320/277/320/276/321/200/321/202/$struct/class.js" +0 -3
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/236/320/241/$struct/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/260/320/262/320/260/320/275/321/201/320/276/320/262/320/276/320/263/320/276 /320/276/321/202/321/207/321/221/321/202/320/260/$struct/class.js" +0 -14
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /320/267/320/260/320/272/320/260/320/267/320/260/$struct/class.js" +0 -14
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/201/320/277/320/270/321/201/320/260/320/275/320/270/321/217 /320/267/320/260/321/202/321/200/320/260/321/202/$struct/class.js" +0 -13
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/201/321/207/321/221/321/202/320/260/$struct/class.js" +0 -14
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/MODULES/Register/STRUCTS//320/241/321/202/321/200/320/276/320/272/320/260 /321/202/320/260/320/261/320/265/320/273/321/217 /320/227/320/237/$struct/class.js" +0 -16
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/accounting/$structure/class.js" +0 -80
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/hr/$structure/class.js" +0 -18
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/orders/$structure/class.js" +0 -21
- package/ORGANIZATIONS//320/224/320/265/320/273/320/276/320/262/320/260/321/217 /321/201/321/204/320/265/321/200/320/260/research/$structure/class.js" +0 -17
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/$base/class.js +0 -84
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/$domain/$folder/$class/$module/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/$domain/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/$module/class.js +0 -3
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS/$catalog/$folder/$class/$virtual/$folder/$class/$virtual/class.js +0 -7
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS/$catalog/class.js +0 -7
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/222/320/270/320/264/321/213 /320/275/320/276/321/200/320/274/320/260/321/202/320/270/320/262/320/276/320/262/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/224/320/276/320/263/320/276/320/262/320/276/321/200/321/213/$catalog/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/232/320/273/320/270/320/265/320/275/321/202/321/213/$virtual/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/235/320/276/320/274/320/265/320/275/320/272/320/273/320/260/321/202/321/203/321/200/320/260/$catalog/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/237/320/260/321/200/321/202/320/270/320/270/$catalog/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/237/320/276/321/201/321/202/320/260/320/262/321/211/320/270/320/272/320/270/$virtual/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/320/272/320/273/320/260/320/264/321/213 /320/270 /321/200/320/265/320/267/320/265/321/200/320/262/321/203/320/260/321/200/321/213/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/320/276/321/202/321/200/321/203/320/264/320/275/320/270/320/272/320/270/$virtual/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/320/276/321/202/321/200/321/203/320/264/320/275/320/270/320/272/320/270//320/222 /320/276/321/202/320/277/321/203/321/201/320/272/320/265/$virtual/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213/$catalog/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/244/320/270/320/267. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/241/321/203/320/261/321/212/320/265/320/272/321/202/321/213//320/256/321/200. /320/273/320/270/321/206/320/260/$catalog/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/CATALOGS//320/242/321/200/320/260/320/275/321/201/320/277/320/276/321/200/321/202/$catalog/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS/$operation/class.js +0 -7
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/224/320/276/321/201/321/202/320/260/320/262/320/272/320/260/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/225/321/201/321/202/320/265/321/201/321/202/320/262/320/265/320/275/320/275/320/260/321/217 /321/203/320/261/321/213/320/273/321/214/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/227/320/260/321/200/320/277/320/273/320/260/321/202/320/260/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/230/320/275/320/262/320/265/320/275/321/202/320/260/321/200/320/270/320/267/320/260/321/206/320/270/321/217/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/260/320/264/321/200/321/213/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/260/320/264/321/200/321/213//320/222/320/265/321/200/320/275/321/203/321/202/321/214 /320/270/320/267 /320/276/321/202/320/277/321/203/321/201/320/272/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/260/320/264/321/200/321/213//320/236/321/202/320/277/321/200/320/260/320/262/320/270/321/202/321/214 /320/262 /320/276/321/202/320/277/321/203/321/201/320/272/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/260/320/264/321/200/321/213//320/237/321/200/320/270/321/221/320/274 /320/275/320/260 /321/200/320/260/320/261/320/276/321/202/321/203/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/260/320/264/321/200/321/213//320/243/320/262/320/276/320/273/321/214/320/275/320/265/320/275/320/270/320/265/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/276/320/274/320/274/321/203/320/275/320/270/320/272/320/260/321/206/320/270/320/270/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/276/320/274/320/274/321/203/320/275/320/270/320/272/320/260/321/206/320/270/320/270//320/227/320/262/320/276/320/275/320/276/320/272/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/232/320/276/320/274/320/274/321/203/320/275/320/270/320/272/320/260/321/206/320/270/320/270//320/237/320/270/321/201/321/214/320/274/320/276/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/265/321/200/320/265/320/274/320/265/321/211/320/265/320/275/320/270/320/265/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260//320/227/320/260/321/200/320/277/320/273/320/260/321/202/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260//320/235/320/224/320/241/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260//320/235/320/224/320/244/320/233/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260//320/237/320/276/321/201/321/202/320/260/320/262/321/211/320/270/320/272/321/203/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/273/320/260/321/202/320/265/320/266/320/270 /321/201 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/320/276/320/263/320/276 /321/201/321/207/321/221/321/202/320/260//320/241/321/202/321/200/320/260/321/205/320/276/320/262/321/213/320/265 /320/262/320/267/320/275/320/276/321/201/321/213/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/320/265 /321/202/320/276/320/262/320/260/321/200/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/321/217 /320/275/320/260 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/321/213/320/271 /321/201/321/207/321/221/321/202/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/321/217 /320/275/320/260 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/321/213/320/271 /321/201/321/207/321/221/321/202//320/222/320/276/320/267/320/262/321/200/320/260/321/202 /320/276/321/202 /320/277/320/276/321/201/321/202/320/260/320/262/321/211/320/270/320/272/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/237/320/276/321/201/321/202/321/203/320/277/320/273/320/265/320/275/320/270/321/217 /320/275/320/260 /321/200/320/260/321/201/321/207/321/221/321/202/320/275/321/213/320/271 /321/201/321/207/321/221/321/202//320/236/321/202 /320/277/320/276/320/272/321/203/320/277/320/260/321/202/320/265/320/273/321/217/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/240/320/265/320/260/320/273/320/270/320/267/320/260/321/206/320/270/321/217/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/240/320/265/320/260/320/273/320/270/320/267/320/260/321/206/320/270/321/217//320/222/320/276/320/267/320/262/321/200/320/260/321/202 /320/276/321/202 /320/277/320/276/320/272/321/203/320/277/320/260/321/202/320/265/320/273/321/217/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/240/320/265/320/260/320/273/320/270/320/267/320/260/321/206/320/270/321/217//320/237/320/276/320/272/321/203/320/277/320/260/321/202/320/265/320/273/321/216/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/243/321/201/321/202/320/260/320/275/320/276/320/262/320/272/320/260 /320/275/320/276/321/200/320/274/320/260/321/202/320/270/320/262/320/260/$operation/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/OPERATIONS//320/244/320/260/321/201/320/276/320/262/320/272/320/260/$operation/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/$register/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/19/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/20/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/26/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/41/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/44/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/51/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/60/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/62/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/68/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/68/01/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/68/02/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/69/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/70/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/90/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/90/01/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/90/02/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/91/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER/94/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/232/320/260/320/264/321/200/320/276/320/262/321/213/320/271 /321/200/320/265/320/267/320/265/321/200/320/262/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/232/320/260/320/264/321/200/321/213/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/232/320/260/320/264/321/200/321/213//320/222 /320/276/321/202/320/277/321/203/321/201/320/272/320/265/$account/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/232/320/260/320/264/321/200/321/213//320/240/320/260/320/261/320/276/321/202/320/260/321/216/321/202/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/232/320/276/320/274/320/274/321/203/320/275/320/270/320/272/320/260/321/206/320/270/320/270/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/235/320/276/321/200/320/274/320/260/321/202/320/270/320/262/321/213/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/REGISTER//320/242/320/265/321/205/320/275/320/270/321/207/320/265/321/201/320/272/320/270/320/271/$account/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/STRUCTS/$struct/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/STRUCTS//320/220/320/264/321/200/320/265/321/201/$struct/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/STRUCTS//320/225/320/264/320/270/320/275/320/270/321/206/320/260 /320/270/320/267/320/274/320/265/321/200/320/265/320/275/320/270/321/217/$struct/class.js" +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/MODULES/Register/STRUCTS//320/237/320/260/321/201/320/277/320/276/321/200/321/202/$struct/class.js +0 -4
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/ai_research/$structure/class.js +0 -12
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/finances/$structure/ai/task.ai +0 -1
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/finances/$structure/class.js +0 -37
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/logistics/$structure/class.js +0 -38
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/personal/$structure/class.js +0 -30
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/purchasing/$structure/class.js +0 -42
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/sales/$structure/class.js +0 -48
- package/ORGANIZATIONS//320/234/320/260/321/201/320/273/320/276/321/202/320/276/321/200/320/263/warehouse/$structure/class.js +0 -46
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
# Прогресс: sources/data
|
|
2
|
+
|
|
3
|
+
## Последние изменения
|
|
4
|
+
- [19:30, 12.11] Шаблон организации `BASE_TEMPLATE` с 3 уровнями наполнения (`1. Пустая`, `2. С типовой конфигурацией`, `3. С демоданными`), полный типовой план счетов и операций в `/MODULES/Register`, чистое развёртывание `/ORGANIZATIONS` в npm и защита кастомизированных классов при многошаговых обновлениях (`sources/server/class/base-template.js`, `sources/server/class.js`, `$server/$folder/handlers/methods/create/$handler/class.js`, `MODULES/Register/**`, `.npmignore`, `run.mjs`, `sources/host/auto-updater.js`, `tests/license-and-deploy.test.js`, `odant-work@1.0.14`):
|
|
5
|
+
- **1. Чистый `/ORGANIZATIONS` в npm-пакете и шаблон `BASE_TEMPLATE` (`sources/server/class/base-template.js`, `create/$handler/class.js`):**
|
|
6
|
+
- Из npm-поставки исключены все локальные организации (`/ORGANIZATIONS/*/` кроме системной метапапки `/ORGANIZATIONS/$domain/`).
|
|
7
|
+
- При создании организации (`$base`) в `/ORGANIZATIONS` по умолчанию предлагается имя `Моё предприятие` и выбор из 3 уровней наполнения (`preset`):
|
|
8
|
+
1. **`empty` («1. Пустая»)** — только паспорт организации (`$base/class.js`) и пустой домен `MODULES/$domain`;
|
|
9
|
+
2. **`standard` («2. С типовой конфигурацией»)** — паспорт организации + 8 типовых подразделений (`administration`, `accounting`, `sales`, `purchasing`, `warehouse`, `production`, `logistics`, `hr`) с должностями (`ROLES`), группой `USERS: ["USERS"]` и ссылками `LINKS` + развёрнутые модули `Register` и `Geo`;
|
|
10
|
+
3. **`demo` («3. С демоданными»)** — вся типовая конфигурация (`standard`) + автоматический засев демонстрационной БД (`seedBaseTemplateDemoData`: нормативы, номенклатура, склады, контрагенты, сотрудники, должности, договоры, транспорт и проведённые операции по всем отделам).
|
|
11
|
+
- **2. Полный типовой план счетов, справочников и операций в `/MODULES/Register`:**
|
|
12
|
+
- В `/MODULES/Register/REGISTER` добавлены счета `01`, `02`, `04`, `08`, `10` (`10/01`, `10/05`), `43`, `50`, `55`, `58`, `66`, `68/04`, `71`, `73`, `75`, `76`, `80`, `84`, `90/03`, `90/09`, `99`; в `STRUCTS` — `Банковский счёт`; в `CATALOGS` — `Должности` и `Субъекты/ИП`; в `OPERATIONS` — `Касса` (`ПКО`, `РКО`, `Авансовый отчёт`), `Основные средства` (`Поступление ОС`, `Принятие к учёту ОС`, `Начисление амортизации`), `Производство` (`Передача материалов в производство`, `Выпуск готовой продукции`, `Списание общехозяйственных затрат`) и `Финансовый результат/Закрытие месяца`.
|
|
13
|
+
- **3. Защита баз и кастомизированных классов при автообновлении (`sources/host/auto-updater.js`, `run.mjs`):**
|
|
14
|
+
- В `applyUpdateFromDirectory` при сохранении изменённого пользователем класса (`isModifiedByUser`) в манифесте удерживается исходный `baselineHash`, гарантируя защиту доработок в `$server/`, `MODULES/`, `MODELS/`, `SERVICES/` при любом числе последовательных обновлений, а `startAutoUpdateDaemon` дополнительно запускает фоновую проверку новой версии на npm через 5 секунд после старта сервера.
|
|
15
|
+
- [18:05, 12.11] Центр расширений ИИ и быстрый доступ `@` в `work-prompt-bar` (как в OpenCode): поддержка внешних навыков (`<id>/SKILL.md`, `@grill-me`, импорт из OpenCode / Claude / GitHub), автодополнение `@` по навыкам/субагентам/инструментам/сотрудникам и управление MCP-серверами в `/SERVICES` (`$server/$folder/lib/prompt-bar/prompt-bar.js`, `$server/$folder/$class/$structure/handlers/pages/form/chat/$handler/chat.js`, `sources/modules/agent/{extensions,resources,index,session}.js`, `sources/modules/agent/tools/meta.js`, `SERVICES/$service/class.js`, `SERVICES/$service/$folder/$storage/$service/handlers/pages/form/mcp/$handler/{class,mcp}.js`, `$server/$folder/$class/ai/skills/grill-me/SKILL.md`, `$server/$folder/lib/consultant/consultant.js`, `tests/extensions-mcp-skills.test.js`):
|
|
16
|
+
- **0. Всплывающее меню `@` в `work-prompt-bar` (`$server/$folder/lib/prompt-bar/prompt-bar.js`, `chat.js`):**
|
|
17
|
+
- При вводе `@` (или `@<запрос>`) в любом чате подразделения (`form/chat`), задаче (`.task`) или панели «Консультант» над полем ввода всплывает меню `.mention-popup` с 4 категориями: **Навыки (`skill`)**, **Субагенты (`agent`)**, **Инструменты и MCP (`tool` / `mcp`)** и **Сотрудники подразделения (`user`)**.
|
|
18
|
+
- Реализована клавиатурная навигация (`↑` / `↓` для выбора, `Enter` / `Tab` / клик для вставки `@id ` в позицию курсора, `Esc` для закрытия меню без очистки текста) и серверные директивы `<skill_content>`, `<agent_directive>` и `<tool_directive>` при упоминании `@навык`, `@субагент` и `@инструмент`.
|
|
19
|
+
- **1. Внешние навыки (`Skills` · стандарт `SKILL.md` и вызов `@<skill>`):**
|
|
20
|
+
- В `loadDocs` (`sources/modules/agent/resources.js`) добавлено чтение папочного формата внешних навыков `ai/skills/<id>/SKILL.md` наряду с плоскими `ai/skills/<id>.md`.
|
|
21
|
+
- Навык `grill-me` установлен в систему (`/$server/$folder/$class/ai/skills/grill-me/SKILL.md`).
|
|
22
|
+
- При упоминании `@<имя-навыка>` (например `@grill-me`) в сообщении чата, задачи или Консультанта инструкция навыка автоматически подставляется в контекст хода (`<skill_content name="...">`), а если навык установлен на ПК в `~/.config/opencode/skills` или `~/.claude/skills` — подхватывается на лету.
|
|
23
|
+
- Добавлен инструмент агента `install_skill` и автообнаружение локальных навыков OpenCode / Claude (`discoverHostSkills`) для импорта в 1 клик, установки по ссылке GitHub (`blob`/`tree`/`raw`) или из текста `SKILL.md`.
|
|
24
|
+
- **2. Раздел `/SERVICES` и управление MCP-серверами (`form/mcp`):**
|
|
25
|
+
- Для `/SERVICES` и типа `$service` создано штатное представление `form/mcp` (`work-mcp-manager`, `MCP и Навыки ИИ`) и серверные методы `mcp_catalog`, `mcp_install`, `mcp_toggle`, `mcp_remove`, `mcp_inspect`, `skill_install`, `skill_remove`.
|
|
26
|
+
- Поддерживается установка MCP-серверов вставкой стандартного JSON `{ "mcpServers": { ... } }` / `{ "mcp": { ... } }` (форматы Claude Desktop, Cursor, OpenCode), через форму (`stdio` / `Streamable HTTP`) или в 1 клик из 8 готовых шаблонов (`Filesystem`, `Git`, `Fetch`, `Memory`, `Playwright`, `PostgreSQL`, `GitHub`, `Remote HTTP`), с автоматическим сохранением переданных токенов в `#secret/` (`secret:<файл>`) и живой проверкой инструментов `mcp_list_tools` (`tools/list`).
|
|
27
|
+
- В шапку панели «Консультант» добавлена кнопка `🔌` для быстрого открытия Центра расширений ИИ (`/SERVICES`).
|
|
28
|
+
- [17:20, 12.11] Наведение порядка в зависимостях `package.json`, отказ от внешних/нативных пакетов `xlsx`, `@kreuzberg/node`, `xmldom`, `esprima`, `onnxruntime-node` и переход на собственный OOXML/PDF-движок (`package.json`, `.npmignore`, `sources/modules/office/index.js`, `sources/server/file.js`, `sources/modules/agent/tools/{docs.js,work/data.js}`, `sources/modules/trainer/local-engine.js`, `tests/{office-editor,agent-assistants,security-review}.test.js`):
|
|
29
|
+
- **Нативный OOXML-движок таблиц (`.xlsx`/`.csv`/`.tsv`) и PDF-экстрактор в `sources/modules/office/index.js`:** чтение и сборка таблиц (`parseSpreadsheet`, `buildSpreadsheetBuffer`, `spreadsheetToRows`, `rowsToSpreadsheetBuffer`, `spreadsheetToText`) и извлечение текста (`extractOfficeOrPdfText`, `extractPdfText` на `node:zlib` + `adm-zip` + `linkedom`) переведены на собственный чистый JS-движок без пакета `xlsx` (`file:vendor/xlsx-0.20.3.tgz`), без `@kreuzberg/node` (80 МБ) и без устаревшего `xmldom`.
|
|
30
|
+
- **Очистка `package.json` и `node_modules`:** удалены `xlsx`, `@kreuzberg/node`, `xmldom`, `esprima`, `onnxruntime-node`; пакет `@huggingface/transformers` вынесен в `optionalDependencies` с ленивым `await import(...)`; локальный `node_modules` очищен от 31 неиспользуемого пакета (`npm prune`), а размер архива `npm pack` сокращён с 54.7 МБ до 22.1 МБ с проверкой чистой установки `npm install odant-work`.
|
|
31
|
+
- [16:10, 12.11] Переработка Личного кабинета (Реестр серверов + Реестр франшиз) и рабочей Админ-панели (`/admin`) на `work.odant.org` (`license-server/src/{crypto,store,server,landing,admin}.js`, `license-server/assets/{landing,admin}.js`, `sources/modules/license/index.js`, `tests/license-and-deploy.test.js`, `work-license-server@1.0.15`, `odant-work@1.0.11`):
|
|
32
|
+
- **1.1 Реестр серверов (устройств) в Личном кабинете:** пользователь может самостоятельно добавлять любое количество лицензируемых серверов WORK (`POST /api/cabinet/servers/create`, переименование, удаление неактивированных); для каждого сервера выпускается свой собственный токен `owk1...` (с зашитым `licenseId` данного сервера), своя привязка `HWID` и свой набор лицензий (базовая вечная на 10 мест + дополнительные годовые пакеты `.lic.json`) и заказов.
|
|
33
|
+
- **1.2 Реестр региональных франшиз:** пользователь может резервировать несколько франшиз в разных субъектах РФ, но не более 1 франшизы в одном регионе; после резервирования даётся 15 минут (`FRANCHISE_RESERVATION_TTL_MS = 15 * 60_000`) на оплату начального взноса 100 000 ₽ через ЮKassa (с живым обратным таймером и автоматической отменой резерва и освобождением квоты региона при истечении времени); для каждой франшизы формируется годовой график погашения из 12 ежемесячных платежей (`buildFranchisePaymentSchedule`, платёж раз в месяц + возможность досрочного погашения всего остатка через `POST /api/cabinet/franchises/pay-installment`).
|
|
34
|
+
- **Операционная Админ-панель (`/admin`):** убраны чат ИИ-агента и демо-формы; реализованы 5 чистых реестров с живым поиском и фильтрами (`Серверы и лицензии`, `Франшизы и графики погашения`, `Заказы и счета`, `Клиенты и роли BOSS`, `Тикеты SLA`), управление базовой и дополнительными лицензиями серверов, сброс привязки `HWID` и зачёт платежей по 12-месячным графикам франшиз.
|
|
35
|
+
- [14:30, 11.11] Механика автономной установки, автообновления через `npm`, лицензирования в `#system`, токена владельца и защиты от подделки `license-server` (`sources/host/auto-updater.js`, `sources/modules/license/index.js`, `sources/modules/agent/{index,session}.js`, `sources/work.js`, `$server/.../form/license/license.js`, `license-server/src/{catalog,crypto,store,server,landing,index}.js`, `license-server/assets/landing.js`, `docs/autonomous-install-and-licensing.md`, `tests/license-and-deploy.test.js`, `v1.0.4`):
|
|
36
|
+
- **Автоматическое обновление из `npm` с сохранением данных (`sources/host/auto-updater.js`):** манифест контрольных сумм базовой поставки `#system/package-manifest.json`, фоновый демон проверки `startAutoUpdateDaemon`, защита пользовательских баз (`*.db*`, `.data/`), настроек (`#system/**`, `#secret/**`), организаций (`ORGANIZATIONS/<Org>/**`), профилей (`USERS/<uid>/**`), весов ИИ (`#weights/**`) и изменённых пользователем классов (`preservedUserModified`).
|
|
37
|
+
- **Режим после локальной установки до активации базовой лицензии:** доступна только 1 одновременная сессия (`BOSS`) для настройки (`unlicensedBossSeats: 1`), вся учётная и офисная функциональность работает, а агентская ИИ-система отключена (`assertAgentSystemLicensed`, `aiAgentsEnabled: false`).
|
|
38
|
+
- **Отдельные файлы лицензий в `#system` и токен владельца (`owk1...`):** первичная постоянная лицензия (`license-base-*.lic.json`, 10 вечных мест, снятие блокировки ИИ-агентов) и дополнительные временные лицензии кратно годам (`license-addon-*.lic.json`), привязанные к аккаунту владельца (`ownerAccountId`); токен владельца `owk1.<payload>.<signature>` с зашитым `hubUrl` сервера поддержки и хендлер привязки `license_bind_token` (`bindOwnerTokenAndSync`).
|
|
39
|
+
- **Личный кабинет `work.odant.org`, базовая лицензия без железа за 4 млн ₽ и оплата по счёту-договору:** добавлен отдельный продукт `BASE_LICENSE_PRODUCT` (`WORK-LIC-BASE-10` — 4 000 000 ₽ на 10 вечных пользователей без оборудования) наряду с комплектом с машиной (`WORK-PAK-495-192-4T` — 5 000 000 ₽), а также оплата как через ЮKassa, так и по счёту-договору для юрлиц (`paymentMethod: 'invoice'`, печатная форма `/api/orders/:orderId/invoice` и подтверждение `/api/admin/orders/:orderId/confirm-invoice`).
|
|
40
|
+
- **Криптографическая защита от подделки `license-server` (`Ed25519 Public Key Pinning`):** в клиент вшиты только доверенные публичные ключи Правообладателя ODANT (`TRUSTED_AUTHORITY_PUBLIC_KEYS`), убрано доверие к полю `issuerPublicKey` внутри входящих токенов и файлов лицензий, добавлена документация `docs/autonomous-install-and-licensing.md`.
|
|
41
|
+
- [16:50, 09.11] Отображение ячеек и объединённых диапазонов таблиц `.xlsx` в `oda-office-editor` (`$server/$folder/$file/$office/handlers/pages/form/file/$handler/file.js`, `sources/modules/office/index.js`):
|
|
42
|
+
- Исправлен шаблон вложенного цикла `<td ~for="$for.item.cells">` внутри `<tr ~for="gridRows">` в `oda-office-editor`: для обращения к ячейке используется `$for.$for.item` (вместо `$for.item`, который в ODA во вложенном `~for` указывает на строку внешнего цикла, из-за чего `display` был `undefined` и ячейки рисовались пустыми), а для объединения ячеек используются DOM-свойства `:col-span` и `:row-span` (`td.colSpan` / `td.rowSpan`).
|
|
43
|
+
- Исправлена первичная инициализация `<oda-office-editor>` при создании через `<div ~is="fileControl" :$item>`, когда `$item` присваивался до апгрейда customElement и `loadOfficeItem` не запускался на первой открытой вкладке.
|
|
44
|
+
- В `parseSpreadsheet` (`sources/modules/office/index.js`) исключены пустые служебные ячейки `{ t: 'e', v: '' }` выгрузок 1С и добавлена ленивая догрузка строк (`visibleRowLimit` + `onSheetScroll`) для быстрых таблиц большого объёма (`затраты.xlsx`).
|
|
45
|
+
- [16:40, 09.11] Сохранение позиции прокрутки ленты чата (`chat-ribbon`) при переключении вкладок `formTabs` в `work-form` (`$server/$folder/$class/$structure/handlers/pages/form/chat/$handler/chat.js`, `$server/$folder/handlers/pages/form/$handler/form.js`, `$server/$folder/$file/$task/handlers/pages/form/file/$handler/file.js`), а также снятие повторного пуша `waiting` при рестарте сервера и переход к задаче по клику на пуш (`sources/modules/agent/session.js`, `sw.js`, `$server/$folder/lib/explorer/explorer.js`):
|
|
46
|
+
- В `chat-ribbon` (`chat.js`) при скрытии вкладки чата (`display: none`, `clientHeight === 0`) `resize()` больше не сбрасывает `ribbonHeight` в `-8` (из-за чего пересчитывался `<style>` и Blink сбрасывал `scrollTop` контейнера `flex-direction: column-reverse` в самое начало ленты `-(scrollHeight - clientHeight)`), а `scroll()` запоминает `_savedScrollTop` и игнорирует ложные события на скрытом контейнере.
|
|
47
|
+
- В `openInForm`, `activateTab` и `_mountActiveView` (`form.js`) перед открытием/переключением вкладки сохраняется позиция `_savedScrollTop` активной ленты чата, сначала скрываются неактивные `slot="main"` представления, затем показывается активное представление и вызывается `restoreScrollPosition()`, возвращая ленту чата строго на прежнее место без прыжка в начало.
|
|
48
|
+
- В `session.recover()` убран повторный вызов `pushNotify('waiting', ...)` при каждом перезапуске сервера, а в `sw.js` и `explorer.js` добавлен переход к задаче по сообщению `work:open-task` при клике на Web-Push уведомление.
|
|
49
|
+
- [14:40, 09.11] Отображение отправителя-агента и постоянный показ аватарок в ленте чата (`sources/server/class/feed.js`, `sources/modules/agent/tools/work/feed.js`, `$server/$folder/lib/chat-item/chat-item.js`):
|
|
50
|
+
- При отправке сообщения ИИ-агентом через инструмент `send` (`tools/work/feed.js` → `save_message`) в запись лога сохраняется `actor` (путь модели ИИ `ctx.llm?.name || 'AI'`), а в `chat-item.js` (`isAgentSender`, `isSender`, `sender`) такие сообщения отображаются как входящие от ИИ-агента с иконкой робота (`bootstrap:robot`), а не как исходящие от самого пользователя самому себе.
|
|
51
|
+
- Из геттера `hideAvatar` в `chat-item.js` убрано скрытие аватарки по `nextElementSibling`, чтобы иконка отправителя всегда единообразно отображалась у каждого сообщения в ленте.
|
|
52
|
+
- [13:25, 09.11] Компактное отображение длинных промптов пользователя в ленте ИИ-задачи и Консультанта (`$server/$folder/$file/$task/handlers/pages/form/file/$handler/ui/feed.js`):
|
|
53
|
+
- В `microchat-user` реплики длиннее 4 строк или 260 символов по умолчанию сворачиваются до ~4.5 строк (`max-height: calc(1.45em * 4.5)`) с градиентным затуханием к низу (`mask-image: linear-gradient(to bottom, #000 50%, rgba(0, 0, 0, 0.08) 100%)`) и кнопкой **«Показать полностью ▾» / «Свернуть ▴»** (с сохранением выбранного состояния при стриминге).
|
|
54
|
+
- [13:15, 09.11] Список допустимых уровней рассуждений `efforts` в классе модели `$ai` и выбор строго из списка (`MODELS/$ai/class.js`, `MODELS/$ai/$folder/$class/$ai/class.js`, `MODELS/odant/Qwen3.8 27b/$ai/class.js`, `MODELS/Halogen/Qwen3.8-Flash-Next/$ai/class.js`, `MODELS/Local/Qwen3-30B-A3B/$ai/class.js`, `sources/modules/agent/{index,loop,session}.js`, `sources/modules/agent/tools/meta.js`, `tests/agent-prompt.test.js`):
|
|
55
|
+
- В схему и `$public` прототипа `$ai` добавлено поле `efforts` (список поддерживаемых конкретной моделью уровней рассуждений): для `/MODELS/odant/Qwen3.8 27b` задано `efforts: ['low', 'medium', 'xhigh']` (в соответствии с vLLM `Qwen/Qwen3.8-27B-FP8`), для `Qwen3.8-Flash-Next` и `Qwen3-30B-A3B` — `['off', 'low', 'medium', 'high']`.
|
|
56
|
+
- В `resolveTurnEffort` / `pickAllowedEffort` (`loop.js`), `llmFor` (`index.js`) и `applyEffort` (`$ai/class.js`) выбор и передача `effort` (`reasoning_effort` / `think`) производятся строго из списка `efforts` данной модели, а из `resolveTurnEffort` убран автоматический перевод в `high` при длине промпта `> 900` символов.
|
|
57
|
+
- [12:55, 09.11] Передача выбранных аналитик, фильтров и экранных данных в вопрос Консультанту по кнопке `?` (`$server/$folder/handlers/pages/form/$handler/form.js`, `$server/$folder/lib/consultant/consultant.js`, `MODULES/Register/REGISTER/$register/$folder/$class/$account/handlers/pages/form/postings/$handler/postings.js`, `sources/modules/agent/{index,session}.js`, `sources/modules/agent/tools/{meta.js,work/common.js}`):
|
|
58
|
+
- В `buildConsultantContext()` (`form.js`) добавлен сбор выбранных аналитик (`vc.filters` с названием объекта из `vc.names.objects` и его `id`, а также готового JSON-фильтра `analytics`), поколоночных/строковых фильтров (`slotQueries`, `analysisQuery`, `search`), выделенного периода (`selectedGroupKey`), выбранной строки в Анализе/ОСВ (`selectedAnalysisRow`, `selectedRow`), открытой карточки проводки (`entryCard`), а также сводки начального/конечного сальдо, оборотов и отображаемых на экране документов (`turnoverDocs` / `displayRows` с `op_id`, `op_cid`, `entry`).
|
|
59
|
+
- При установленном отборе по аналитике (например, `НИКС Рязань, ООО`) заголовок консультации и плашка `.ctx-bar` в Консультанте включают имя выбранного контрагента/субконто, а промпт явно инструктирует агента разбирать строго расчёты и операции по выбранной аналитике, не распыляясь на весь счёт целиком.
|
|
60
|
+
- В `session.js`, `index.js`, `meta.js` и `common.js` добавлен учёт `body.contextPath` при построении конуса контекста задачи Консультанта (`contextConeOf`), чтобы задачи в `/USERS/<uid>`, созданные по кнопке `?` из формы организации, также соблюдали границы этой организации.
|
|
61
|
+
- [12:35, 09.11] Исправление Web-Push уведомлений задач (`sw.js`), ответа на смешанную форму `ask_user` (`ui/feed.js`, `tools/meta.js`) и интервальных расписаний со временем старта/окончания (`scheduler.js`, `tools/schedule.js`, `tests/task-push.test.js`, `tests/agent-assistants.test.js`):
|
|
62
|
+
- **Уведомления Web-Push и кнопки «Разрешить / Отклонить» (`sw.js`):**
|
|
63
|
+
1. Подавление пушей задач (`waiting`, `review`, `done`), когда пользователь уже находится в видимой и сфокусированной вкладке задачи или главного проводника WORK (`/`).
|
|
64
|
+
2. Обработка кнопок `task-approve` и `task-reject` в `notificationclick` напрямую из `event.notification.data` (`POST <task>?approve` внутри `event.waitUntil`) без зависимости от in-memory `pushHandlers` и без открытия новой вкладки браузера; при клике по самому уведомлению фокусируется уже открытая вкладка проводника WORK.
|
|
65
|
+
- **Карточка вопроса `ask_user` с одновременными `options` и `fields` (`ui/feed.js`, `tools/meta.js`):**
|
|
66
|
+
1. В `answer()` (`ui/feed.js`) и `ask_user.run` (`tools/meta.js`) сохранена передача выбранных кнопок (`this.picked` в `content`) при наличии необязательных полей `fields`, чтобы выбор кнопки варианта не терялся при пустых полях.
|
|
67
|
+
- **Интервальные расписания и ожидание ответа при запуске по таймеру (`scheduler.js`, `tools/schedule.js`):**
|
|
68
|
+
1. В `normalizeRule`, `nextRun` и `describeRule` (`scheduler.js`) для интервального правила `every` добавлена поддержка времени старта `at: "ЧЧ:ММ"`, даты `date: "YYYY-MM-DD"` и границы окончания `until: "ЧЧ:ММ" | ISO` (при указании `date` автоматически ограничивается концом этого дня `23:59` без второго «стоп-расписания»).
|
|
69
|
+
2. В `defaultRunner` (`scheduler.js`) добавлены проброс живых WS-событий владельцу (`sendToUser`), ожидание завершения фонового хода (`await idle(file)`) перед отправкой `notifyScheduledRun` и разрешение `schedule(action: "send", scope: "personal")` без повторного `ask` при запуске по расписанию (`scheduled: true`).
|
|
70
|
+
- [12:00, 09.11] Исправление ложного раскрытия старой задачи на заднем плане при создании нового `.task` из чата (`$server/$folder/$class/$structure/handlers/pages/form/chat/$handler/chat.js`, `$server/$folder/lib/chat-item/chat-item.js`, `tests/ui/chat-create.html`):
|
|
71
|
+
- В `_createTask` / `_awaitNewTask` / `_expandCreatedTask` (`chat.js`) разделены флаг индикатора отправки `awaitTask` и флаг запасного ожидания по ленте `_awaitingLogExpand`, а также добавлен сбор `_awaitKnown` (`_collectKnownLogKeys`) до вызова `save_file`, чтобы приход событий `changed` во время полёта `save_file` не вызывал `_expandCreatedTask` с пустым ключом и не раскрывал первую попавшуюся старую задачу в ленте (например, «Гранит»).
|
|
72
|
+
- В `chat-day` (`chat.js`) добавлены числовая сортировка по времени `_logItemTime`, ожидание `_logsInitPromise` перед `adoptTask` и синхронизация `_syncExpandedTaskCard` по `_expandedTaskKey`, а в `chat-item.js` (`$item.set`, `expanded.set`) — сброс `expanded = false` при перепривязке DOM-элемента `~for` к другой задаче (`_identityOfItem`) и автоматическое сворачивание других раскрытых карточек в ленте.
|
|
73
|
+
- [11:30, 09.11] Доработка сайта `work.odant.org`, обязательного подписания публичной оферты (ПЭП) и выделение защищённой админ-панели в отдельную страницу `/admin` (`license-server/src/{admin,landing,server,store,yookassa,agent,catalog,index}.js`, `license-server/assets/{admin,landing}.js`, `license-server/assets/landing.css`, `sources/modules/license/index.js`, `form/license/license.js`, `pages/site`, `tests/license-and-deploy.test.js`):
|
|
74
|
+
- **Обязательная регистрация и акцепт публичной оферты ПЭП (`PUBLIC_OFERTA` в `catalog.js`, `store.js`, `server.js`, `landing.js`):**
|
|
75
|
+
1. В `catalog.js` и `GET /api/oferta` добавлен полный текст Публичного договора-оферты ODANT-WORK (`ODANT-WORK-OFERTA-2026.1`) и модальное окно ознакомления `#ofertaModal`.
|
|
76
|
+
2. Любые действия пользователя по оформлению заказа комплекса (`#stage-order`), докупке годовых мест (`#stage-addons`), оплате через ЮKassa (`POST /api/orders/checkout`) и резервированию региональной франшизы (`POST /api/partners/reserve`) разрешены строго после регистрации в личном кабинете и подписания оферты простой электронной подписью (`ofertaAccepted: true`, штамп `PEP-...`, иначе возвращается `403 OFERTA_REQUIRED`, а на сайте автоматически открывается окно регистрации и подписания оферты с продолжением начатого действия).
|
|
77
|
+
- **Выделение админки в отдельную защищённую страницу `/admin` без переходов с публичного сайта (`src/admin.js`, `assets/admin.js`, `src/landing.js`, `src/server.js`, `src/store.js`):**
|
|
78
|
+
1. С публичной витрины `/` полностью убраны кнопка «Админка», внутренний реестр лицензий и верстка `#stage-admin`.
|
|
79
|
+
2. Админ-панель вынесена в отдельную страницу `GET /admin` (`renderAdminPage` + `/assets/admin.js`) с экраном авторизации администратора (`POST /api/admin/login`, `GET /api/admin/me`, `POST /api/admin/logout`, проверка Bearer-токена `adm_...` на `/api/admin/*` и в админских командах ИИ-агента).
|
|
80
|
+
3. Исправлены привязки полей в таблицах админки (`support.bindCode`, `hardware.hwid`, `hardware.nodeFingerprint`, `baseSupportUntil`, сообщения инженера `from === 'support'`, `reactionLabel`), обработка webhook оплаты залога резерва франшизы ЮKassa (`kind === 'franchise_reservation'`), конвертация резерва франшизы в действующего партнёра (`reservationId` без самоблокировки квоты), последовательная аттестация инженеров партнёра по трекам `WORK-CERT-*` и добавлен раздел реестра клиентов и подписанных оферт ПЭП.
|
|
81
|
+
- [10:15, 09.11] Правило вертикального конуса контекста для ИИ-агента и субагентов (`sources/modules/agent/tools/work/{common,fs,data}.js`, `sources/modules/agent/tools/work.js`, `sources/modules/agent/tools/dev/search.js`, `sources/modules/agent/index.js`, `sources/modules/rag/{scope,search}.js`, `sources/server/folder.js`, `$server/$folder/$class/ai/{system.md,agents/explore.md,agents/analyst.md}`, `tests/agent-context.test.js`):
|
|
82
|
+
- **Жёсткое ограничение границ контекста в инструментах дерева и БД (`contextConeOf`, `checkContextCone`, `assertContextCone`):**
|
|
83
|
+
1. При запуске задачи в контексте конкретной организации (`/ORGANIZATIONS/<Орг>`) или её подразделения (`/ORGANIZATIONS/<Орг>/<Подразделение>`) движение разрешено только **«вниз»** (к дочерним элементам точки) или **«вверх»** (к предкам, учётным модулям своей организации `/ORGANIZATIONS/<Орг>/MODULES/**` и общим данным уровня `WORK`), а переходы **«влево-вправо»** в соседние организации (`/ORGANIZATIONS/<ДругаяОрг>`) и соседние подразделения блокируются в `getItem`, `mustItem`, `resolveParent`, `listTree` (`ls`), `find` (`find_text`) и `walkItems` (`grep`, `glob`, `lsp`).
|
|
84
|
+
2. При запуске задачи из контекста корневого `WORK` (`/`) или `/ORGANIZATIONS` все организации находятся «внизу» и доступны целиком.
|
|
85
|
+
- **Вертикальная фильтрация в RAG (`inVerticalCone` в `scope.js` и `search.js`):**
|
|
86
|
+
1. В `buildContexts` (`rings`) и `collectCandidates` (`semantic_search` и `query_objects`) исключено горизонтальное расхождение в соседние организации и соседние подразделения, а также отфильтрованы снимки чужих организаций из личной ленты (`feedDocs`).
|
|
87
|
+
- **Системный промпт и инструкции субагентов (`index.js`, `system.md`, `explore.md`, `analyst.md`):**
|
|
88
|
+
1. В `placeBlock()` (`# Контекст`), `ENV_GUIDE` и инструкции субагентов добавлено правило работы строго в границах контекста задачи без подстановки данных других организаций.
|
|
89
|
+
- [14:00, 08.11] Типовые сценарии использования платформы WORK, документация `docs/use-cases.md`, навык ИИ `work-scenarios` и рубрикатор типовых промптов «Консультанта» (`docs/use-cases.md`, `$server/$folder/$class/ai/skills/{work-scenarios,readme}.md`, `$server/$folder/lib/consultant/consultant.js`, `$server/$folder/handlers/pages/form/$handler/form.js`):
|
|
90
|
+
- **Документация и база знаний ИИ:**
|
|
91
|
+
1. Разработано руководство **`docs/use-cases.md`** с 7 сквозными сценариями использования платформы WORK (развёртывание организации и рабочих мест `BOSS`/`USER`/`USERS`/`GUESTS`, ведение и импорт справочников, хозяйственные операции и сторно, 4-шаговый анализ по счетам `sheet` → `turnovers` → `analysis` → `postings`/`journal`, коллаборация и локальный офисный пакет `oda-office-editor`, конструирование классов и форм, локальный ИИ `/MODELS/Local` и `/MODELS/Halogen` + федерация `/NODES`).
|
|
92
|
+
2. Добавлен глобальный навык **`$server/$folder/$class/ai/skills/work-scenarios.md`**, ориентирующий агента и Консультанта по формам, ролям и инструментам всех 7 сценариев.
|
|
93
|
+
- **Типовые промпты в ИИ-чате «Консультант» (`consultant.js`, `form.js`):**
|
|
94
|
+
1. В `item-consultant` добавлены рубрикатор категорий (`CONSULTANT_PROMPT_CATEGORIES`: *«Все»*, *«Учёт и отчёты»*, *«Оргструктура и права»*, *«Документы и задачи»*, *«Конструктор и ИИ»*) и каталог из 12 готовых типовых промптов (`CONSULTANT_PROMPTS`) по всем сценариям, кнопка вызова панели промптов (`icons:lightbulb`) в шапке Консультанта и динамический контекстный промпт (`contextSecondaryPrompt`) под тип открытой формы.
|
|
95
|
+
2. В `buildConsultantContext()` (`form.js`) добавлены предметные подсказки для авто-вопроса по кнопке `?` в зависимости от активного представления (`sheet`, `turnovers`, `analysis`, `postings`, `journal`, `objects`, `object`, `virtual`, `staff`, `builder`, `database`, `trainer`).
|
|
96
|
+
- [12:00, 08.11] Единая модель ролей `BOSS` и `USER`, псевдо-субъекты `USERS` и `GUESTS` на рабочих местах, отказ от кнопки переключения ролей и автостарт веб-приложения (`sources/server/access/{policy,workplaces,links}.js`, `sources/server/class/security.js`, `sources/server/{class,folder,handler,server,node}.js`, `sources/host/{auth-methods,http-server}.js`, `sources/client/{folder,class}.js`, `staff.js`, `users.js`, `form.js`, `role.js`):
|
|
97
|
+
- **Схлопывание `ADMIN` + `BOSS` → `BOSS` и упразднение роли `GUEST`:**
|
|
98
|
+
1. В `BASE_ROLES` и `$class.ROLES` оставлены две базовые роли: **`BOSS`** (руководитель/владелец точки и её поддерева) и **`USER`** (исполнитель).
|
|
99
|
+
2. `BOSS` точки обладает полными правами чтения и записи внутри своей точки и ниже по дереву (включая системные метаданные `class.js`, `#secret`, конструктор `builder`, свойства `editor`, управление штатом `staff` и БД организации `database`), а операции уровня хоста (`npm`, `/MODULES`, `/NODES`, перезапуск сервера, ОС/сеть агента) проверяют `BOSS` корневого `WORK` (`_isWorkBoss`).
|
|
100
|
+
3. Первый зарегистрированный пользователь автоматически назначается `BOSS` всего `WORK` (`ensureBootstrapBoss` в `sources/host/auth-methods.js`).
|
|
101
|
+
- **Групповые псевдо-субъекты `USERS` и `GUESTS` на рабочих местах (`ROLES`):**
|
|
102
|
+
1. В `workplaces.js` (`matchesUserList`, `memberTrailKeys`, `isOpenToGuests`) и `security.js` (`roles`, `canSee`, `canWrite`) добавлена поддержка назначения на рабочие места (`ROLES[i].USERS`) псевдо-пользователей **`USERS`** (все вошедшие пользователи) и **`GUESTS`** (все внешние посетители, включая анонимных).
|
|
103
|
+
2. В `form/staff` (`staff.js`) и `item-users` (`users.js`) убрана секция `ADMIN` и добавлен выбор `👥 Все пользователи (USERS)` и `🌐 Все гости (GUESTS)` при назначении на рабочее место.
|
|
104
|
+
- **Отказ от кнопки переключения ролей и автостарт браузера:**
|
|
105
|
+
1. Из шапки `work-form` (`form.js`), контекстного меню (`popover.js`) и `item-role` (`role.js`) убран переключатель ролей; представления (`VIEW`) и методы определяются автоматически по ролям пользователя в открытой точке, а `BOSS` всегда видит логи той точки, в которую он смотрит (`chatSource`).
|
|
106
|
+
2. В `startServers` (`sources/host/http-server.js`) добавлено автоматическое открытие `${LOCAL_ORIGIN}/` в системном браузере при интерактивном старте сервера (`shouldAutoOpenBrowser`, пропускается в тестах и при `WORK_NO_BROWSER=1`).
|
|
107
|
+
- [10:30, 07.11] Универсальный гибридный провайдер `/MODELS/Halogen` для ПАК WORK на базе AMD Ryzen™ AI Max+ PRO 495 · 192 ГБ Unified Memory (`sources/modules/trainer/halogen.js`, `MODELS/Halogen/**`, `MODELS/$ai/$folder/$class/$ai/class.js`, `loop.js`, `trainer.js`, `tests/halogen-provider.test.js`):
|
|
108
|
+
- **Дерево провайдера `/MODELS/Halogen` и матрица моделей (iGPU Radeon 8065S `gfx1151` + Ryzen AI NPU `55 TOPS` на порту `8731`):**
|
|
109
|
+
1. Создан провайдер `/MODELS/Halogen` (`$provider`, `protocol: 'halogen'`, `baseUrl: 'http://127.0.0.1:8731/v1/chat/completions'`) и 8 преднастроенных узлов `$ai`: основная модель `Qwen3.8-Flash-Next` (`halogen-qwen3.8-flash-next`, 262k контекст, `chat`, `stream`, `tools`, `vision`, `effort`, `fork`) и 7 сопроцессорных NPU-моделей (`Qwen3.5-2B-NPU` для `compactModel`, `Qwen3-ASR-NPU` для `sttModel`, `Qwen3-TTS-NPU` для `ttsModel`, `Flux2-Klein-NPU` для `imageModel`, `Qwen3-Embedding-NPU`, `Qwen3-Reranker-NPU`, `Decider-NPU`).
|
|
110
|
+
2. Реализован планировщик памяти `computeHalogenMemoryPlan` под 192 ГБ Unified Memory (веса Flash `62.1 ГБ` + KV-пул `524 288` токенов на 4 слота `27.0 ГБ` + `47.7 ГБ` FP8 n-gram lookup-таблица целиком в ОЗУ + `21.2 ГБ` под NPU-модели + `~34 ГБ` свободно под ОС и сервер WORK) с генерацией команд запуска как для Linux (`podman run ghcr.io/peonist-ai/halogen-flash-server:0.19.1`), так и для Windows 11 (`llama-server.exe` с `--cache-reuse 256`, `--lookup-cache-dynamic`, `--slot-save-path`).
|
|
111
|
+
- **Расширение протокола `$ai`, агентского цикла `loop.js` и встроенного фоллбэка на Windows:**
|
|
112
|
+
1. В `MODELS/$ai/$folder/$class/$ai/class.js` и `sources/modules/agent/{index,loop}.js` добавлены передача заголовков форкинга KV-сессий (`X-Halogen-Keep` на основном агенте и `X-Halogen-From` на субагентах), потоковой защиты `X-Halogen-Guard`, догенерации с места обрыва (`continue_final_message: true` + `add_generation_prompt: false`), управление бюджетом рассуждений (`reasoning_effort` + `enable_thinking`) и разбор `timings.cache_n` в `cached_tokens`.
|
|
113
|
+
2. Адаптирован вызов `speak()` под NPU-контракт `qwen3-tts-1.7b-customvoice` (нормализация голоса в пресет `serena` и языка в `russian`), `transcribe()` под `qwen3-asr-1.7b` и добавлены методы NPU-сопроцессора `$ai.embed()` (`/v1/embeddings`), `$ai.rerank()` (`/v1/rerank`) и `$ai.decide()` (`/v1/systemone`).
|
|
114
|
+
3. При отсутствии внешнего контейнера/сервера на `:8731` (например, на Windows) все вызовы `/MODELS/Halogen/*` бесшовно переключаются на встроенный гибридный движок WORK (`localStreamChat` + `halogenFallback`), а в представление `form/trainer` добавлена вкладка «4. Контур Halogen (Ryzen AI 192 ГБ: GPU + NPU)».
|
|
115
|
+
- [14:30, 06.11] Доставка напоминаний расписаний и уведомлений задач в мессенджеры Telegram и MAX с привязкой ботов к `$structure` и наследованием по иерархии (`sources/modules/notify/*`, `scheduler.js`, `schedule.js`, `session.js`, `messenger-settings.js`, `staff.js`, `chat/class.js`, `tests/notify-channels.test.js`):
|
|
116
|
+
- **Модуль каналов мессенджеров (`sources/modules/notify/{index,telegram,max}.js`):**
|
|
117
|
+
1. Реализованы адаптеры протоколов **Telegram Bot API** (`getMe`, `sendMessage`, `getUpdates`, разбор `/start <CODE>`) и **MAX Bot API** (`https://botapi.max.ru`: `me`, `messages`, `updates` с поддержкой `bot_started`, `message_created`, `bot_added`).
|
|
118
|
+
2. Привязка ботов к точкам оргмодели (`$structure`, `$base`, `$server`, `$user`) хранится в `<meta_folder>/#secret/messengers.json` с шифрованием AES-256-GCM (`secret-box.js`) и маскированием токенов при отдаче в UI.
|
|
119
|
+
3. Реализовано иерархическое наследование ботов (`resolveBotForPoint`, геттер `messengerBot` на `$class`): если у подразделения `$structure` нет собственного бота, автоматически используется бот вышестоящего подразделения, организации (`$base`) или сервера (`$server`).
|
|
120
|
+
4. Состав получателей подразделения (`getPointMemberUids`, `findUserPoints`) берётся напрямую из настроек безопасности `#security` точки (`BOSS`, `ADMIN`, `USER` и рабочие места `ROLES`); личные чаты пользователей (`USERS/<uid>/$user/#secret/messengers.json`) и групповые чаты подразделений привязываются по одноразовым кодам `/start <CODE>` (TTL 15 мин, фоновый опрос `startNotifier`).
|
|
121
|
+
5. Поддержаны два режима доставки: **персональная** (`notifyPersonal`) и **общая по подразделению** (`notifyDepartment` — в групповой чат `groupChatId` и/или веером всем привязанным участникам `#security` с автоматическим fallback на браузерный Web-Push).
|
|
122
|
+
- **Интеграция с расписаниями (`scheduler.js`, `tools/schedule.js`), задачами (`session.js`) и UI (`oda-messenger-settings`):**
|
|
123
|
+
1. В `scheduler.js` (`defaultRunner`) и `session.js` (`pushNotify`) подключена доставка напоминаний и событий задач (`waiting`, `error`, `review`, `done`) через мессенджер точки; в инструмент `schedule` добавлены параметр `scope: 'personal' | 'department'` и действия `link`, `unlink`, `status`, `send`.
|
|
124
|
+
2. Создан единый системный компонент `oda-messenger-settings` (`$server/$folder/lib/messenger-settings/messenger-settings.js`), встроенный в представление «Роли и места» (`form/staff`) и вызываемый по кнопке настроек `⚙` в чате (`form/chat` → `showSettings`).
|
|
125
|
+
- [12:00, 06.11] Корректировка разговорного режима ИИ, исправление отображения офисных документов (`oda-office-editor`), компактных ссылок на файлы в Markdown и вкладок «Файлы» / «Результаты» в доке задачи:
|
|
126
|
+
- **Разговорный режим без ложных срабатываний во время ожидания ответа (`$server/$folder/$file/$task/handlers/pages/form/file/$handler/ui/voice.js`, `consultant.js`, `tests/voice-speaker.test.js`):**
|
|
127
|
+
1. В `VoiceController` добавлены флаг `_awaitingReply`, блокировка `isMicListening()`, учёт защитного интервала `_echoUntil` в `MicCapture`/`LevelMeter` и физическая приостановка аудио-трека микрофона (`setSuspended(true)`) на всё время распознавания (`recognizing`), создания/запуска задачи на сервере и обдумывания ответа (`thinking`).
|
|
128
|
+
2. Повышены пороги `Vad` (`minSpeechMs: 320`, `startMs: 120`, `absMin: 0.022`, `bargeFactor: 2.8`, `bargeMs: 350`) и добавлен фильтр односложных шумовых галлюцинаций ASR (`«Нет.»`, `«Ну.»`, `«Приложение.»`) на коротких/тихих фрагментах.
|
|
129
|
+
3. Как только модель реально начинает отвечать голосом (`speaker.playing === true`, событие `playing` → `state = 'speaking'`), микрофон снова включается на запись нового промпта в режиме «перебивания» (`barge-in`).
|
|
130
|
+
- **Восстановление передачи геолокации и часового пояса в задачи ИИ (`ui/util.js`, `ui/panel.js`, `consultant.js`, `chat.js`, `$task/triggers/on_save/$trigger/class.js`, `sources/modules/agent/session.js`):**
|
|
131
|
+
1. В `ui/util.js` добавлен кэширующий помощник `resolveClientLocation()` (с хранением в `localStorage['WORK.geo-fix']` на 30 минут), подключённый в `chat.js` (`_createTask`, `sendVoiceText`), `consultant.js` (`_submitQuestion`) и `panel.js` (`dispatch`).
|
|
132
|
+
2. В `on_save` и в начало `session.prompt` добавлено чтение и сохранение `location` и `tz` из `params` и `body`.
|
|
133
|
+
- **Исправление отображения офисных файлов (`.docx`, `.xlsx`, `.pptx`) и кнопки `save` в шапке `work-form` (`$server/$folder/$file/$office/handlers/pages/form/file/$handler/file.js`, `form.js`, `sources/server/folder.js`, `tests/office-editor.test.js`):**
|
|
134
|
+
1. В шаблоне `oda-office-editor` убрана точка с запятой из обработчика `@change="onDocFormatBlockChange($event)"`, вызывавшая `SyntaxError: Unexpected token ';'` в `compileEvent (compiler.js:27)` и блокировавшая рендер компонента.
|
|
135
|
+
2. Из `.office-toolbar` убраны плашка `ДОКУМЕНТ WORD / ТАБЛИЦА EXCEL / ПРЕЗЕНТАЦИЯ` и дублирующие кнопки `Сохранить`, `В системном Office`, `Печать`, `Скачать`; в `work-form` (`form.js`) `get allowSave()` приведён к проверке `this.view_control?.allowSave` и `v.DATA?.allowSave` (раньше `v.allowSave` всегда возвращал `false` при `DATA.allowSave === undefined` и перекрывал `view_control.allowSave`), а в `deepCollapseTree` (`sources/server/folder.js`) сохраняются переопределённые свойства дочернего слоя `$handler`.
|
|
136
|
+
3. В `parsePresentation` (`sources/modules/office/index.js`) исправлено чтение `.pptx`: масштабирование координат по реальному размеру слайда `<p:sldSz cx="..." cy="..."/>` (Widescreen `12192000×6858000 EMU` → `960×540 px`), порядок слайдов по `<p:sldIdLst>` и `presentation.xml.rels`, чтение палитры активной темы `<a:clrScheme>` и наследование координат, фоновых плашек, размеров шрифтов и выравнивания из `slideLayout`.
|
|
137
|
+
- **Ссылки на документы и файлы в Markdown и шапки вкладок «Файлы» / «Результаты» (`ui/util.js`, `ui/segments.js`, `ui/dock.js`, `$task/.../file.js`, `consultant.js`):**
|
|
138
|
+
1. Ссылки на файлы и документы в Markdown (`linkifyWork` / `workPathLabel`) отображаются в формате `«<Точка хранения>/<Имя файла>»` (например, `Перепелкин Роман/Отчёт по локальной сети 192.168.14.0-24.docx`) без вывода служебного пути с цифрами.
|
|
139
|
+
2. Клик по ссылке на документ/файл в Markdown (`onMdLink` / `openWorkPath`) всегда открывает его через стандартное представление в форме (`execute` / `work-form`), а не в правой панели доков задачи.
|
|
140
|
+
3. Во вкладках «Файлы» (`microchat-files`) и «Результаты» (`microchat-results`) убрана дублирующая нижняя плашка `.bar` в `microchat-doc`; во вкладке «Файлы» название файла выводится сразу справа от кнопки `← Файлы`, а во вкладке «Результаты» кнопки `‹` / `›` разнесены по краям панели с названием результата по центру.
|
|
141
|
+
4. В `chat-item` (`$server/$folder/lib/chat-item/chat-item.js`) развёрнутое превью (`.preview`) в чате оставлено только для задач (`task`), звонков (`call`), картинок, видео и аудио (`CHAT_PREVIEW_EXTS`), а все остальные файлы (`.docx`, `.xlsx`, `.pptx`, `.pdf`, `.html`, `.md`, `.txt` и др.) отображаются аккуратными плашками заголовков без монтирования редакторов/iframe; карточки `.task` на главном чате центрируются с `width: 100%; max-width: min(820px, 100%)`, а высота ответа в карточке увеличена до 90% высоты поля ленты (`--chat-card-max: ribbonHeight * 0.9`) без обрезания градиентом на 240px.
|
|
142
|
+
5. В `collectDocs` (`ui/docs.js`) и `_noticeDocs` (`$task/.../file.js`) добавлено включение содержательных промежуточных и конечных ответов агента (`key: 'answer:' + it.id`, развёрнутые ответы с таблицами, заголовками, списками и сводками) во вкладку «Результаты» правой панели задачи.
|
|
143
|
+
- [21:15, 04.11] Ревизия и упорядочивание агентской системы (`sources/modules/agent/*`, `MODELS/$ai/*`, `prompt-bar.js`, `chat.js`, `chat-item.js`, `ai/agents/*.md`):
|
|
144
|
+
- **Управление уровнем рассуждений (`effort`) самой моделью и субагентами:**
|
|
145
|
+
1. Из `work-prompt-bar` (`prompt-bar.js`, `panel.js`, `consultant.js`, `chat.js`, `chat-task.js`) убран ручной переключатель `effort` — выбор уровня рассуждений передан модели по сложности задачи.
|
|
146
|
+
2. В инструменты `todo_write`, `task` и `agent_start` (`sources/modules/agent/tools/meta.js`) добавлен параметр `effort` (`'off' | 'low' | 'medium' | 'high'`), позволяющий модели управлять как собственным уровнем рассуждений на следующих ходах (`host.setEffort`), так и уровнем рассуждений вызываемых субагентов; во фронтматтере субагентов (`$server/$folder/$class/ai/agents/*.md`) заданы дефолтные профильные уровни (`low` / `medium`).
|
|
147
|
+
3. В `resolveTurnEffort` (`sources/modules/agent/loop.js`) и `MODELS/$ai/$folder/$class/$ai/class.js` сведена единая логика автоматического определения стартового уровня (`low` — обычные запросы, `medium` — анализ/код/отчёты/вложения, `high` — сложная архитектура и отладка).
|
|
148
|
+
- **Исправление алгоритмов цикла, сессии `.task` и раскрытия карточки задачи в чате:**
|
|
149
|
+
1. В `sources/modules/agent/session.js` устранена гонка `getBody` / `prompt` / `save` при старте новой задачи (немедленное сохранение вопроса до запуска `start()`, защита живого `s.body` от перезаписи старым чтением с диска и отказ от `unlink` при перезаписи на Windows).
|
|
150
|
+
2. В `chat.js` (`adoptTask`, `_openCreated`) и `chat-item.js` (`$file`) исправлено раскрытие только что созданной задачи в ленте чата: прямое использование `.task` без ожидания `itemBody` и замена одноимённой `.logs`-обёртки на месте без пересоздания карточки.
|
|
151
|
+
3. В `sources/modules/agent/loop.js` реализованы: потоковый разделитель `<think>…</think>` (`createThinkSplitter`), изоляция субагентов (`opts.depth > 0`) от родительских `SELF_CHECK_NUDGE` и `host.noteContext`, ступенчатая граница микросжатия `KEEP_FULL_TURNS` для сохранения Prompt Cache и безопасный `maybeCompact` с поддержкой `compactModel`.
|
|
152
|
+
- [14:30, 04.11] Представление инспектора и редактора SQL-баз (`form/database`) и пилюля переключения роли (`role.js`):
|
|
153
|
+
- **Инспектор и редактор SQLite-баз (`sources/data/sql-inspector.js`, `sources/data/api.js`, `$server/$folder/$class/$structure/handlers/pages/form/database/$handler/{class.js, database.js}`, `tests/sql-inspector.test.js`):**
|
|
154
|
+
1. Реализованы серверные методы `sql_databases`, `sql_schema`, `sql_rows`, `sql_insert_row`, `sql_update_row`, `sql_delete_row` с уровнем доступа `ADMIN`: на уровне организации (`$base`) открывается строго её изолированная БД `<Организация>/$base/#system/work.db`, а на уровне корневого сервера `WORK` (`$server`) доступен переключатель между прикладной БД `./.data/work.db`, индексной БД `./.index/work.db` и базами всех организаций `/ORGANIZATIONS/*`.
|
|
155
|
+
2. Реализовано представление `form/database` (`roles: ['ADMIN']`, `allowUse` для `$server` и `$base`) с тремя режимами: **«Таблицы и записи»** (просмотр строк с сортировкой, глобальным поиском, поколоночными фильтрами, кликабельными переходами по связям FK `↗`, инспектором/редактором записи с валидацией и форматированием JSON, добавлением и удалением записей), **«Схема и связи (ER)»** (карта всех таблиц, колонок PK/FK и реестр физических и логических связей WORK) и **«Структура и DDL»** (паспорт колонок, индексов и SQL `CREATE TABLE`).
|
|
156
|
+
- **Кнопка роли в шапке (`$server/$folder/lib/role/role.js`):** оформлена пилюлей (`accent`, `border-radius: 16px; padding: 2px 8px;`, `icon-pos="left"`, видимая подпись текущей роли).
|
|
157
|
+
- **Живое превью `.task`, карточки удалённых файлов и устранение моргания чата (`sources/client/file.js`, `$task/handlers/preview/$handler/preview.js`, `chat-item.js`, `chat.js`, `sources/server/logs.js`, `sources/modules/agent/session.js`):**
|
|
158
|
+
1. В `sources/client/file.js` (`loadPreview`) убран spread `{ ...def, is }`, который убивал реактивные геттеры `task-preview` (`status`, `meta`, `what`, `answer`, `hint`) и замораживал карточку на `'Пустая задача'`; возвращено клонирование через `Object.getOwnPropertyDescriptors(def)` и добавлена подписка `task-preview` на `task.delta`.
|
|
159
|
+
2. В `chat-item.js` и `sources/server/logs.js` (`deleteLogEntry` / `delete_log_entry`) при отсутствии целевого файла/таска (`body.path`) вместо вывода сырого JSON `logContent` отображается плашка `Такого файла нет: <имя>` и кнопка `Удалить лог` (для роли `ADMIN`).
|
|
160
|
+
3. Устранено моргание ленты чата во время работы ИИ-задачи: промежуточные сохранения `.task` в `session.js` вызывают `s.file.reset(undefined, { selfOnly: true })` без каскадного `parent.reset()` на организацию, а `chat-day` кэширует обёртки записей лога по `id` (`_wrappedById`) и не перерисовывает ленту при неизменном списке записей.
|
|
161
|
+
- [12:00, 02.11] Доработка интерфейса формы (`work-form`, `oda-app-layout`) и сквозная синхронизация периода в `oda-packets`:
|
|
162
|
+
- **Тулбар представления (`#formToolbar`) и тогл-кнопка дерева классов (`app-layout.js`, `form.js`):**
|
|
163
|
+
1. В `oda-app-layout` внутри колонки представления (`div.main`) добавлен слот `main-top`, куда перенесён `#formToolbar` — панель `tools` теперь располагается строго над активным представлением по его ширине, а не над левым деревом классов.
|
|
164
|
+
2. В `oda-app-layout` / `app-layout-drawer` добавлен режим `hideTabs` (`hideLeftTabs` на `work-form`), скрывающий левую вертикальную полосу `app-tabs` с одной вкладкой, а перед верхней полосой вкладок `#formTabsBar` добавлена тогл-кнопка с иконкой дерева (`#classTreeToggleBtn`, `icons:tree-structure`) для показа/скрытия дерева классов с сохранением состояния (`work.form.classTree:<rootPath>`) отдельно для каждого корневого класса данных.
|
|
165
|
+
- **Сквозная синхронизация выбранного периода между представлениями формы (`packets.js`, `form.js`, `sheet.js`, `postings.js`, `journal.js`, `objects.js`):**
|
|
166
|
+
1. В `work-form` добавлено состояние периода формы (`formPeriod`), автоматически передаваемое во все открываемые или активируемые представления внутри этой формы (например, при переходе из «Оборотки» в «Анализ счёта», «Обороты счёта», «Проводки», «Журнал» или при выборе счёта/подкласса в дереве).
|
|
167
|
+
2. В `oda-packets` добавлен наблюдатель `_onValueChanged(value)` и сохранение выбранного периода при построении по `days`, а в `sheet.js`, `postings.js`, `journal.js` исключён преждевременный рендер пакетировщика до получения `res.range` с сервера.
|
|
168
|
+
- **Инлайн-отображение и редактирование офисных файлов (`$office/handlers/pages/form/file/$handler/file.js`, `$office/handlers/preview/$handler/preview.js`, `sources/client/file.js`):**
|
|
169
|
+
1. В `oda-office-editor` все `<template ~if=...>` заменены на штатные контейнеры `.office-view-wrap` / `.tb-group` (исправлено отображение сетки `.xlsx`, листа `.docx`, слайдов `.pptx` и кнопок форматирования), а в `.office-toolbar` добавлена кнопка `💾 Сохранить`.
|
|
170
|
+
2. Добавлен инлайн-хендлер `$office/handlers/preview/$handler/{class.js, preview.js}` с поддержкой редактирования и сохранения офисных файлов прямо в карточках ленты чата (`chat-item`).
|
|
171
|
+
- **Приведение файлового хранилища (`USERS/*`, `ORGANIZATIONS/*`) и папок задач `.task` к единой архитектуре (`common.js`, `panel.js`, `consultant.js`, `folder.js`, `tree.js`, `scripts/cleanup-storage.mjs`):**
|
|
172
|
+
1. В `writeFile` (`sources/modules/agent/tools/work/common.js`) добавлена функция `isTaskArtifactTarget`: все рабочие файлы, создаваемые ИИ внутри задачи `.task` (`write`, `write_table`, `export_pdf`, `export_presentation`, `create_office_file`, `render_doc`), а также вложения из `panel.js` и `consultant.js` сохраняются в собственную папку задачи `.<id>.task/<тип>/`.
|
|
173
|
+
2. Очищены системные промпты и `/rules/{admin,boss,user}.md` от устаревших упоминаний `$work` и ролевых подпапок `USER/ADMIN/BOSS`; в `USERS/*` и `ORGANIZATIONS/*` импортированы в SQLite и удалены старые папки `logs/`, объединены задачи в `<meta>/task/YYYY-MM-DD/`, а созданные задачами артефакты разложены по их папкам `.<id>.task/`.
|
|
174
|
+
- **Строчное оформление полей «Заголовок: Значение», автоподстройка при сжатии (`horizontal` + `flex-wrap`, `fieldSizingStyle`, `layer`-группы), настраиваемый авто-нумератор (`NUMERATOR`) и модальный подбор объектов в табличные части (`editor-form.js`, `schema.js`, `objects.js`, `api.js`, `object.js`, `link.js`, `table-input.js`):**
|
|
175
|
+
1. В `oda-editor-form` / `oda-editor-form-field` (`oda/components/layouts/editor-form/editor-form.js`) убрана обёртка `<fieldset><legend>` и 12-колоночный Grid: контейнеры корневого уровня (`ROOT`) и каждого структурного поля (`Struct` → `ROOT/<путь>`) переведены на `horizontal` с автопереносом (`flex-wrap: wrap`), каждому типу поля заданы минимальные ограничения `min-width` (`fieldSizingStyle`), все поля у левого края строки выровнены по единому отступу (`--form-label-width` / `_syncRowStarts` без «лесенки»), вне режима дизайна отключён `draggable` (`:draggable="Boolean(designMode)"`), а перемещение полей в конструкторе (`designMode`) ограничено пределами своей структурной группы (`layer`, с индикацией `allow` / `denied` / `drop-to` по образцу `oda-layout-designer`).
|
|
176
|
+
2. Проведённые операции (`status === 'registered'`) на форме `form/object` (`object.js`) открываются строго в режиме `readonly` (`isReadonly: true`, `canSave: false`), а отмена проводки (`cancelOperation` / `db_cancel`) возвращает операцию в редактируемое состояние с возможностью повторного проведения.
|
|
177
|
+
3. В учётном ядре (`sources/data/schema.js`, `sources/data/objects.js`, `sources/data/api.js`, `/MODULES/Register/OPERATIONS/$operation/class.js`) реализован настраиваемый авто-нумератор операций `NUMERATOR` (`nextOperationNumber`, метод `db_next_number`, параметры `reset: 'year'|'quarter'|'month'|'day'|'never'`, `pad`, `prefix`) с автоматическим обнулением с начала года, подстановкой номера при создании операции и пересчётом при смене года даты, а поля `Дата` и `Номер` выведены рядом на первой строке формы документа.
|
|
178
|
+
4. В `oda-table-input` (`oda/components/inputs/table-input/table-input.js`) и `oda-link-input` (`oda/components/inputs/link/link.js`) добавлен модальный диалог выбора/множественного подбора объектов из справочника (`oda-table-link-picker` / `openCatalogPickerDialog`): при нажатии `+ Новый` в табличной части со ссылкой на класс можно выбрать один или сразу несколько объектов (с автоподстановкой единицы измерения/цены), создавая в таблице соответствующее количество строк.
|
|
179
|
+
5. Ссылки (`oda-link-input` и ссылочные колонки `oda-table-cell`) оформлены как синие подчёркнутые гиперссылки (`input.resolved-link`) и остаются кликабельными в режиме `readonly` (открывают карточку связанного объекта во вкладке `work-form`), а поля в `readonly` используют аккуратную тему `locked` (`--subtle-background`) вместо `disabled`.
|
|
180
|
+
6. Реализован сервис **«Подшивка»** (`sources/data/db.js` миграция №5 `doc_links`, `sources/data/objects.js`, `sources/data/api.js`, `object.js`, `oda-doc-binder`): связывание операций по схеме «Основание → Следствие» (например, «Входящий счёт» → «Платёжное поручение»), подбор связанных документов по контрагенту (`db_binder_candidates`), создание новой операции «На основании» с автозаполнением реквизитов (`createBasedOnOperation`) и отображение цепочки подшитых документов прямо на карточке операции.
|
|
181
|
+
7. Реализован сервис **«Печать»** (`sources/data/print.js`, `MODULES/Register/OPERATIONS/Платежи с расчётного счёта/$operation/print/Платёжное поручение.html`, `object.js`, `oda-print-dialog`): унифицированный HTML-бланк платёжного поручения по форме ОКУД 0401060 со всеми графами и реквизитами плательщика/получателя (`org.*`, `party.*`), модальное окно предпросмотра и печати на принтере (`oda-print-dialog`), автогенерация стартового HTML-шаблона (`fallback: true`) и встроенный редактор настройки/сохранения HTML-шаблонов (`db_print_save`).
|
|
182
|
+
- [01:30, 01.11] Единый контрол дерева выбора класса (`class-picker.js`), иерархические формы корневых классов данных (`explorer.js`, `form.js`), авто-обновление заголовка вкладки объекта и оформление вкладок лепестками:
|
|
183
|
+
- **Единый системный контрол выбора класса (`$server/$folder/lib/class-picker/class-picker.js`, `objects.js`, `prompt-bar.js`, `chat.js`):**
|
|
184
|
+
1. Контрол дерева классов `item-class-picker` и функции `buildClassTree`, `pickClassFromTree`, `resolveDataRootPath`, `formatNewObjectLabel` вынесены в общий модуль `~/lib//class-picker`.
|
|
185
|
+
2. При нажатии «Создать операцию…» в чате открывается тот же контрол дерева `item-class-picker` с заголовком `Создать операцию`, сохраняющий всю иерархию веток операций, иконки и счётчики объектов с разделителями тысяч.
|
|
186
|
+
- **Формы корневых классов данных, дерево подклассов и вкладки объектов (`explorer.js`, `form.js`, `object.js`, `editor-form.js`, `link.js`):**
|
|
187
|
+
1. При вызове любого подкласса данных (`OPERATIONS`, `CATALOGS`, `REGISTER`, `STRUCTS`) в проводнике всегда открывается/активируется форма корневого класса (`resolveDataRootPath`), внутри которой в `slot="left-panel"` работает выдвижное дерево `#formClassTree` с фокусом на вызванном классе.
|
|
188
|
+
2. При смене фокуса в дереве классов сверху в `#formTabsBar` открывается вкладка с представлением фокусного класса (или активируется уже открытая вкладка без создания дубликатов).
|
|
189
|
+
3. При создании нового объекта (из чата или кнопкой `+ Новый`) в форме корневого класса открывается вкладка класса, следом активируется вкладка нового объекта (`Новое платёжное поручение` и т.д.) со сразу активной кнопкой `Save`, а по мере редактирования реквизитов (номер, дата, контрагент/получатель) имя объекта автоматически обновляется на заголовке его вкладки.
|
|
190
|
+
4. Верхние вкладки на форме (`#formTabsBar`, `microchat-dock .tabs`) оформлены лепестками вверх (`border-radius: 8px 8px 0 0`), а нижние вкладки навигатора (`#bookmarksBar`) — лепестками вниз (`border-radius: 0 0 8px 8px`) стандартными атрибутами `oda//styles.js`.
|
|
191
|
+
- [18:00, 31.10] Унификация интерфейса проводника, форм, пакетировщика `oda-packets`, чатов подразделений, единого хранилища файлов и правой панели задач (`.task`):
|
|
192
|
+
- **Проводник, дерево и закладки (`explorer.js`, `app-layout.js`, `tree.js`, `node.js`):**
|
|
193
|
+
1. Зафиксирован порядок вкладок левой панели (`1. Контекст входа`, `2. USERS`, `3. Сеть`, `4. ИИ`); кнопка звонка внизу панели скрыта вне активного звонка (`top.RTCCaller.current_call`).
|
|
194
|
+
2. Установлены размеры иконок в дереве (`48px` для `$user`, `$base`, `$server`, узлов `/NODES`; `32px` для `$structure`), добавлены разделители тысяч в счётчиках объектов классов и убраны 1px зазоры между строками дерева.
|
|
195
|
+
3. Панель закладок (`#bookmarksBar`), верхняя полоса вкладок формы (`#formTabsBar`), тулбар (`#formToolbar`), подвал (`#formFooter`, `item-tools`) и вкладки правой панели задачи (`microchat-dock`) приведены к единому плоскому стандарту `oda//styles.js` (`footer`, `border hoverable content/light`, кнопки закрытия `icons:close`).
|
|
196
|
+
- **Пакетировщик `oda-packets` и переключение вкладок `work-form` (`packets.js`, `form.js`, `sheet.js`, `journal.js`, `postings.js`, `objects.js`, `object.js`, `virtual.js`):**
|
|
197
|
+
1. В `oda-packets` первая панель всегда показывает режим (`День`/`Неделя`/`Месяц`/`Квартал`/`Год`), выбор пункта в меню или `DblClick` устанавливает текущий период на кнопках годов, кнопки шага заменены на `+` (слева, вперёд) и `-` (справа, назад).
|
|
198
|
+
2. Убрана пустая полоса перед появлением `oda-packets`, а переключение вкладок `formTabs` в `work-form` переведено на `hidden` без удаления из DOM и повторной перезагрузки представлений.
|
|
199
|
+
- **Чаты, модели ИИ, документооборот подразделений и единое хранилище (`prompt-bar.js`, `chat.js`, `chat-item.js`, `feed.js`, `logs.js`, `api.js`, `policy.js`, `security.js`):**
|
|
200
|
+
1. В выборе модели чата оставлены только языковые модели (`isChatModel`), а выбранная модель сохраняется за пользователем (`work.user.ai:<uid>:model`).
|
|
201
|
+
2. Реализованы двойное логирование действий подразделения (в лог подразделения + в личный кабинет `/USERS/<uid>` + получателям `receivers`), размещение файлов задачи ИИ в папке самого `.task`, переключение ленты `USER` (свои логи) ↔ `BOSS` (логи подразделения), меню `+` (вложения, получатели, создание операций `$operation`) и раскладка ленты (слева — свои сообщения, справа — входящие, по центру — `.task`).
|
|
202
|
+
3. Убраны ролевые подпапки в `work_zone`: файлы точки хранятся в едином `storage_folder`, а системные метаданные защищены от записи не-админами через `POLICY.isSystemMetaPath`.
|
|
203
|
+
- **Карточка `.task` и правая панель задачи (`chat-item.js`, `task/preview.js`, `html/preview.js`, `task/file.js`, `ui/dock.js`, `ui/docs.js`, `splitter.js`, `oda.js`, `vnode.js`):**
|
|
204
|
+
1. Исправлено сжатие карточек файлов на карточке задачи (`flex-shrink: 0` на `chat-item` и `.title`), а во вкладке «Файлы» правой панели 2-колоночная сетка с пустыми дырами заменена на единый вертикальный список таких же карточек во всю ширину.
|
|
205
|
+
2. В `microchat-doc` подключён локальный офисный редактор `oda-office-editor` для просмотра `.xlsx/.xls/.csv`, `.docx/.rtf`, `.pptx` прямо в правой панели задачи.
|
|
206
|
+
3. Вкладка «Результаты» перенесена в конец списка вкладок (`Контекст` → `Монитор` → `Файлы` → `Результаты`) и автоматически открывается сразу при публикации результата (`publish` / `data.results` или отчёта субагента).
|
|
207
|
+
4. Полностью устранено моргание и перезагрузка `iframe` (PDF/HTML) при работе агента и при перетаскивании сплиттера (`oda-splitter`).
|
|
208
|
+
- [16:50, 29.10] Перенос логов (`.logs`) из файлов в SQLite и локальный офисный пакет (`oda-office-editor` для `.xlsx`, `.docx`, `.pptx` + WebDAV):
|
|
209
|
+
- **Перенос `.logs` в SQLite (`sources/data/db.js`, `sources/server/logs.js`, `sources/server/class.js`, `chat.js`, `chat-item.js`):**
|
|
210
|
+
1. В `sources/data/db.js` добавлена миграция №3 с таблицей `logs(id, feed_path, day, time, sender, ext, path, stub_path, body)` и индексами по `(feed_path, day, time DESC)`, `(feed_path, path)` и `stub_path`.
|
|
211
|
+
2. Логи подразделений и классов внутри организации (`$base`) пишутся в изолированную БД этой организации `<Организация>/$base/#system/work.db` (и автоматически входят в архив организации при `db_backup`), а логи личных кабинетов (`/USERS/<uid>`) и сервера — в корневую `./.data/work.db`.
|
|
212
|
+
3. Полностью сохранён серверный контракт `$class`: `logs({ mode: 'dates' | 'bodies' | 'index' | 'files' | 'folder' })`, `save_message()`, `read_log_bodies()`, `read_log_entry()`, `append_log_includes()`, `appendRow()`, при этом на диске больше не создаются тысячи мелких файлов `<meta>/logs/YYYY-MM-DD/*.logs` (сами рабочие файлы и точки `.task`, `.ics`, `.eml` остаются файлами).
|
|
213
|
+
4. В `chat-day` (`chat.js`), `chat-item.js`, `calendar.js`, `email.js`, `sources/client.js`, `sources/client/folder.js`, `sources/server/file.js` и `sources/server/folder.js` загрузка ленты дня переведена на одиночный запрос `logs({ mode: 'bodies', day })` без создания папок `/~/logs/YYYY-MM-DD`, а строки журнала и ответы `save_file` защищены от привязки `WORK.__bind` к `CORE.$file` (с гарантированной отдачей `log.logFullPath` и сбросом кэша `meta_folder` при создании ролевой зоны подразделения).
|
|
214
|
+
- **Локальные редакторы офисных файлов `.xlsx`, `.docx`, `.pptx` без Docker и внешних серверов (`sources/modules/office/index.js`, `$server/$folder/$file/$office/handlers/pages/form/file/$handler/file.js`, `sources/server/file.js`, `sources/host/http-server.js`):**
|
|
215
|
+
1. Реализован серверный OOXML-движок `sources/modules/office/index.js` и методы `$file.office_load` / `$file.office_save`, читающие и собирающие валидные `.xlsx/.xls/.csv` (SheetJS `xlsx`), `.docx/.rtf` (`word/document.xml` + `adm-zip` + `xmldom`) и `.pptx` (`ppt/presentation.xml` + `ppt/slides/slideN.xml`).
|
|
216
|
+
2. В `$server/$folder/$file/$office` неработающий внешний `oda-only-office` заменён на встроенный локальный пакет `oda-office-editor` (`allowSave: true`, интеграция с верхней кнопкой `💾` в шапке `work-form` и `Ctrl+S`):
|
|
217
|
+
- **Таблицы (`.xlsx`, `.xls`, `.csv`):** вкладки листов, строка формул с живым вычислителем (`=SUM`, `=AVERAGE`, `=MIN`, `=MAX`, `=COUNT`, `=ROUND` и арифметики), форматирование ячеек, объединение ячеек (`merges`), добавление/удаление строк и колонок и строка статуса (`Сумма / Среднее / Кол-во`).
|
|
218
|
+
- **Документы Word (`.docx`, `.rtf`):** страничный редактор формата А4 с тулбаром стилей (`H1–H3`, шрифты, `Ж/К/Ч/S`, цвет, выравнивание, списки, вставка таблиц и разрывов страниц).
|
|
219
|
+
- **Презентации PowerPoint (`.pptx`):** боковая лента слайдов (добавление/дублирование/удаление), холст 16:9 с перетаскиваемыми текстовыми блоками, настройкой шрифтов/цветов и полноэкранным режимом показа слайдов (`▶ Показ слайдов`).
|
|
220
|
+
3. Добавлена поддержка протоколов `ms-word:ofe|u|...`, `ms-excel:ofe|u|...`, `ms-powerpoint:ofe|u|...` и WebDAV-методов (`OPTIONS`, `LOCK`, `UNLOCK`, `PROPFIND`, `PUT`) в `sources/host/http-server.js` для прямого открытия и сохранения файлов в установленном на ПК MS Office / LibreOffice / Р7 / МойОфис.
|
|
221
|
+
- [16:10, 29.10] Системная доработка `work-form`, `form/object`, `form/objects`, фильтров/группировок/ссылок `oda-table`, контекстного меню объекта, единой стилевой модели ODA и дерева проводника:
|
|
222
|
+
- **Кнопка `save` в шапке `work-form`, контроль `allowSave` активного представления и незастревающие кнопки в подвале (`form.js`, `object.js`, `objects.js`, `sources/server/handler.js`, `sources/client/handler.js`):**
|
|
223
|
+
1. В `sources/server/handler.js` (`info`) и `sources/client/handler.js` добавлены синхронные свойства `allowSave`, `allowTools`, `hiddenInViewList`, `hasSettings`, чтобы чтение `view.allowSave` не уходило в `_onEmpty('/@allowSave')`.
|
|
224
|
+
2. У табличного списка `form/objects` установлено `allowSave: false` и `getFocusedServices() -> []`, а у редактора объекта `form/object` — `allowSave: true`.
|
|
225
|
+
3. Из подвала `form/object` убрана дублирующая кнопка `💾` (оставлены `OK` и `Закрыть`); сохранение с оставлением вкладки открытой работает через штатную кнопку `💾` в синей шапке `work-form` (`slot="header"`), реактивно отслеживающую `allowSave` и `isViewChanged` (`vc.isChanged`) активного представления.
|
|
226
|
+
4. В `work-form.syncFromView(vc)` добавлена проверка `vc === this.view_control`, исключающая перезапись кнопок подвала фоновыми промисами неактивных вкладок.
|
|
227
|
+
- **Фильтры колонок, группировка, синие кликабельные ссылки и контекстное меню строки объекта в `oda-table` и `form/objects` (`column-header.js`, `row.js`, `cell.js`, `table.js`, `lib/model.js`, `objects.js`, `menu.js`, `sources/client.js`):**
|
|
228
|
+
1. Для колонок дат (`isDateCol` / `Date` / `time`) в `oda-table-header` реализован попап `oda-table-date-filter` с календарём месяца и быстрыми чекбоксами (`Показать все`, `Фильтровать по дате`, `Сегодня`, `Вчера`, `Завтра`, `@date:YYYY-MM-DD`).
|
|
229
|
+
2. Для остальных колонок реализован попап `oda-table-value-filter` со списком всех уникальных значений колонки с чекбоксами, пунктами `(Показать все)` и `(Пустые)`, поиском и кнопками `OK / Отмена` (`@in:[...]`).
|
|
230
|
+
3. Реализованы область группировки над таблицей (`showGroupPanel`, перетаскивание колонок `Drag & Drop`, лесенка чипов группировки, раскрытие/сворачивание групп) и контекстное меню заголовка колонки по правому клику.
|
|
231
|
+
4. Поля типа `Link` в таблице `form/objects` (`isLinkCol`) отображаются синими кликабельными гиперссылками и при клике открывают связанный объект справочника во вкладке текущей `work-form`.
|
|
232
|
+
5. Правый клик по строке объекта (`row-contextmenu` -> `onRowContextMenu`) фокусирует строку и открывает штатное контекстное меню объекта (`WORK.showMenu` с заголовком `объект: <название>` и хендлерами `Создать объект`, `Создать объект (копия)`, `Открыть объект`, `Удалить объект`), а в `sources/client.js` глобально подавлено нативное контекстное меню браузера везде, кроме полей ввода и выделенного текста.
|
|
233
|
+
- **Единая стилевая модель ODA и проводник (`styles.js`, `packets.js`, `form.js`, `postings.js`, `sheet.js`, `explorer.js`, `app-layout.js`, `tree.js`):**
|
|
234
|
+
1. Убраны кастомные бежевые/серые литералы («полосатый матрас»): все панели (`#formTabsBar`, `#formToolbar`, `oda-packets`, `oda-table`, `.filter-strip`, `#formFooter`, `editor-form`) переведены на семантические токены стилевой модели ODA (`--header`, `--light`, `--content`, `--subtle-background`, `--border-color`, `--accent-color`, `--accent-soft`, `--selected-background`).
|
|
235
|
+
2. В `explorer.js` возвращён показ корневого элемента сервера `WORK` вверху дерева для администратора (`hideTops: 0`), из левой панели переключателей убраны дублирующие вкладки `/ORGANIZATIONS` и `/MODULES` (`list: ['/USERS', '/NODES']`), а в `app-layout-drawer` и `item-tree` реализовано сохранение и автоматическое восстановление выбранной вкладки, раскрытых веток дерева и сфокусированного узла.
|
|
236
|
+
- [14:30, 29.10] Обновление комплектации и лицензионного центра **ODANT-WORK** (`odant-work@1.0.2`, `work-license-server@1.0.3`):
|
|
237
|
+
- **10 вечных лицензий + 1 год поддержки Enterprise в комплекте (`license-server/src/catalog.js`, `sources/modules/license/index.js`, `store.js`, `form/license`):**
|
|
238
|
+
1. В базовую поставку комплекса (`5 000 000 ₽`) включены **10 вечных одновременных лицензий** (`baseSeats: 10`) и **1-й год поддержки максимального уровня Enterprise** (`includedSupportTier: 'enterprise'`, 24/7, реакция до 15 минут, безлимитные обращения).
|
|
239
|
+
2. Дальнейшее продление технической поддержки и докупка дополнительных годовых мест — **по желанию клиента** (10 вечных лицензий работают бессрочно).
|
|
240
|
+
- **Гибридная политика моделей ИИ (`catalog.js`, `landing.js`, `agent.js`, `form/license`):**
|
|
241
|
+
1. Явно зафиксировано, что 4 интегрированные локальные модели предназначены для **базовых ежедневных операций** внутри контура предприятия.
|
|
242
|
+
2. Если требуются более мощные модели ИИ, их можно свободно подключать **через стандартный API из любого источника** (внешние облачные провайдеры, корпоративный GPU-кластер или коммерческий API регионального партнёра).
|
|
243
|
+
- **Интеграция ИИ-агента на левую вкладку админ-панели (`/admin`, `license-server/src/landing.js`, `assets/landing.css`, `assets/landing.js`, `src/agent.js`):**
|
|
244
|
+
1. В `/admin` создана двухколоночная рабочая область `.admin-workspace` с левой панелью навигации по вкладкам (`ИИ-агент + Все разделы`, `Только ИИ-агент`, `Лицензии`, `Заказы ЮKassa`, `Франшизы и партнёры`, `Тикеты SLA`) и встроенным на левую вкладку **ИИ-агентом администратора** (`#admAgentCard`).
|
|
245
|
+
2. ИИ-агент наделён административными инструментами: формирование живой сводки по реестру сервера, выпуск и подпись сертификатов `Ed25519`, проведение оплаты ожидающих заказов ЮKassa и проверка квот франшиз с автоматическим обновлением таблиц админки.
|
|
246
|
+
- [14:15, 29.10] Доработка пакетировщика `oda-packets`, навигации по вкладкам в подвале `work-form`, представлений «Обороты» (`form/turnovers`), «Анализ» (`form/analysis`) и стандартной вьюхи редактора объекта (`form/object` с `allowTools: false`):
|
|
247
|
+
- **Расчёт сальдо «На начало» при выборе текущего периода в `oda-packets` (`sheet.js`, `postings.js`, `journal.js`, `oda/components/packets/packets.js`):**
|
|
248
|
+
1. В `_syncPacketRange(res)` убран принудительный сброс `from`/`to` на «Весь период», когда начало выбранного периода лежит позже последней проводки в базе (`this.from > r.end`, например при выборе `4 кв. 2026 г.`, `Сегодня`, `Текущая неделя`, `Текущий месяц`, `Текущий квартал`): отчёт теперь сохраняет границы периода и выводит реальное входящее сальдо «На начало» и исходящее «На конец».
|
|
249
|
+
2. В `_restorePeriodState` добавлено вычисление границ `_boundsFromPacketsKey` для ключей `now` / `now:*` / масок периодов, а в `oda-packets` добавлен наблюдатель `_onValueChanged` для внешней синхронизации `value`.
|
|
250
|
+
- **Навигация внутри `work-form` на вкладках на верхнем тулбаре без создания новых `iframe` (`$server/$folder/handlers/pages/form/$handler/form.js`, `$server/$folder/lib/tools/tools.js`):**
|
|
251
|
+
1. В `work-form` добавлен стек вкладок `formTabs`, свойство `activeItem` (`currentItem`, чтобы родительский биндинг `:$item` не перезатирал элемент дочерней вкладки) и метод `openInForm(targetItem, nav)`.
|
|
252
|
+
2. Полоса вкладок `#formTabsBar` (`.form-tabs-bar`) в верхней зоне `slot="top"` скрыта при открытии только начального контекста (`:hidden="!(formTabs?.length > 1)"`) и появляется только при открытии дополнительных вкладок (`formTabs.length > 1`), снабжена иконками представлений (`_viewIconOf`), кнопками закрытия каждой дочерней вкладки `✕` и кнопкой **«Закрыть все»** (`closeAllTabs`) в правом конце полосы.
|
|
253
|
+
3. Из `#formFooter` убраны сервисные кнопки от `$item` самой формы (`#mainTools`) — сервисные кнопки отображаются строго от `$focusedItem` (`#focusedTools`).
|
|
254
|
+
- **Представление «Обороты» (`form/turnovers` в `postings.js`):**
|
|
255
|
+
1. Выбор группировки (`Нет / Дни / Недели / Месяцы / Кварталы / Годы / Операции / Счета / Все`) перенесён компактным дропдауном (`<select title="Группировать">`) в верхнюю полосу `.filter-strip`, боковая панель `.group-panel` убрана.
|
|
256
|
+
2. В правой таблице документов (`.docs-panel`) последним полем добавлена узкая колонка с кнопкой-иконкой проводки (`icons:list` без текста) для открытия карточки проводки.
|
|
257
|
+
- **Представление «Анализ» (`form/analysis` в `postings.js`):**
|
|
258
|
+
1. Убрана левая боковая панель `.analysis-side`; таблица Анализа развёрнута на всю ширину формы, а в начале таблицы выводится столько колонок, сколько к счёту привязано аналитических справочников (`analysisSlots`) со строкой быстрого фильтра `a%c` под каждой колонкой и переключателем `Сумма / Кол-во` в шапке.
|
|
259
|
+
2. При наличии детальных строк по объектам аналитик (`r.key`) дублирующая корневая строка самого счёта скрывается (общий итог выводится в прижатом футере `Итого`).
|
|
260
|
+
- **Стандартная вьюха редактора объекта (`$server/$folder/$class/handlers/pages/form/object/$handler/{class.js,object.js}`) и дизайнер расположения полей (`oda/components/layouts/editor-form/editor-form.js`):**
|
|
261
|
+
1. Создан штатный хендлер представления объекта `form/object` с атрибутом `allowTools: false`, отключающим верхний тулбар хендлеров в `work-form`, и заголовком документа `documentTitle` (с номером и датой операции).
|
|
262
|
+
2. В `oda-editor-form` реализована 12-колоночная адаптивная раскладка полей (`defaultFieldSpan`: компактные поля даты/номера/суммы/НДС/ИНН по 4 колонки в ряд, ссылки и строки — по 6, тексты и таблицы — по 12) и интерактивный **режим дизайна и кастомизации полей (`designMode`)**: перетаскивание полей (`Drag & Drop`), изменение ширины поля (`2..12` колонок), переименование подписи `✎`, скрытие и возврат необязательных полей («Скрытые элементы»), добавление `"Пустого" элемента`, `Метки` и `Разделителя` с сохранением раскладки по классу.
|
|
263
|
+
- [12:00, 29.10] Обновление лицензионного сервера `work.odant.org` (`work-license-server@1.0.1`), витрины ПАК **ODANT-WORK** (`odant-work@1.0.1`), интерактивной карты регионов РФ и панели администратора (`/admin`):
|
|
264
|
+
- **Брендинг и паспорт комплекса ODANT-WORK (`license-server/src/catalog.js`, `sources/modules/license/index.js`, `form/license`):**
|
|
265
|
+
1. Фирменный логотип ODANT (`favicon.ico` → `/assets/odant-logo.png`), полное исключение упоминаний «1С» и брендов моделей на витрине (указаны типы и назначение 4 предустановленных локальных моделей: языковая LLM, голосовая ASR/TTS, генерация изображений, векторный поиск / RAG).
|
|
266
|
+
2. Точная спецификация платформы **AMD Ryzen™ AI Max+ PRO 495** (Zen 5, 16 ядер / 32 потока, до 5,2 ГГц, 80 МБ кэша), **AMD Radeon™ 8065S Graphics** (40 ядер, 3000 МГц, до 61 TFLOPS FP16), **до 132 TOPS** (NPU 55 TOPS), **192 ГБ LPDDR5x-8533 Unified RAM**, **4 ТБ NVMe PCIe 4.0 SSD**, **AMD PRO / AMD Memory Guard**.
|
|
267
|
+
3. Стоимость базового комплекса — `5 000 000 ₽` (включая вечную лицензию на `5` одновременных сессий и 1-й год поддержки), тарифы дополнительных годовых мест по SLA: **Start** — `10 000 ₽/год`, **Business** — `15 000 ₽/год`, **Enterprise** — `20 000 ₽/год` со скидкой от объёма до `−25%`; раздел «Докупка лицензий» доступен только авторизованным пользователям.
|
|
268
|
+
- **Вкладка «ИИ-агенты», интерактивная карта субъектов РФ и админ-панель `/admin` (`license-server/src/landing.js`, `assets/landing.css`, `assets/landing.js`, `assets/russia-regions.json`, `src/agent.js`):**
|
|
269
|
+
1. Раздел **«ИИ-агенты»**: демонстрация встроенного ИИ-консультанта (кнопка `?` в каждой форме, полнодуплексный голосовой диалог, ролевые инструменты) и интерактивная орбитальная схема мультиагентной системы из `13` ролевых субагентов и `26+` навыков.
|
|
270
|
+
2. **Интерактивная карта субъектов РФ (`assets/russia-regions.json`, `scripts/build-russia-map.mjs`):** 85 векторных контуров из OpenStreetMap в проекции Альберса с топологическим упрощением, фильтр по федеральным округам, масштабирование/перетаскивание, расчёт квот франшиз по населению, базового паушального взноса `500 000 ₽ × индекс региона`, резервирования со счётом ЮKassa на невозвратный залог `100 000 ₽` и полной оплаты паушального взноса в течение 1 года (`POST /api/partners/reserve`).
|
|
271
|
+
3. **Админ-панель сервера лицензий (`/admin`, `#admin`):** сводные KPI, форма выпуска и подписи сертификатов `Ed25519` (`WORK-LIC-v1`), таблицы выпущенных лицензий с просмотром JSON-сертификата, заказов ЮKassa с проведением оплаты в один клик, резервов региональных франшиз / партнёров и тикетов техподдержки (`MAX`, `Telegram`, `VK`) с ответом инженера.
|
|
272
|
+
4. Реквизиты разработчика **«Бизнес Интер Софт»** (`390000, г. Рязань, ул. Ленина, 47`, `+7 (4912) 77-70-21`, `+7 (4912) 77-70-22`, `odant.ru`), мягкий деловой анимированный фон, тёмная/светлая темы и публикация пакетов `odant-work@1.0.1` и `work-license-server@1.0.1` в npm.
|
|
273
|
+
- [16:40, 28.10] Полнодуплексный диалоговый механизм с взаимным перебиванием (User Barge-In & AI Barge-In, как в ChatGPT Voice) в `.task`, `item-consultant` и `form/chat`:
|
|
274
|
+
- **Мгновенное перебивание ИИ человеком (`sources/modules/agent/session.js`, `loop.js`, `index.js`, `ui/voice.js`, `ui/panel.js`, `ui/feed.js`):**
|
|
275
|
+
1. В `session.prompt` добавлена поддержка `interrupt: true` и `spokenText`, а также отдельный метод `interrupt`: при перебивании (голосом в момент начала фразы или текстом в режиме диалога) активный стрим модели немедленно обрывается (`s.controller.abort('barge_in')`), ответ ассистента обрезается до реально прозвучавшей части (`spokenText`) с пометкой `interrupted: true` (`· прервано собеседником` в ленте и `[прервано собеседником]` в контексте `toMessages`), и цикл без паузы переключается на новую реплику человека.
|
|
276
|
+
2. В `LevelMeter` (`ui/voice.js`) встроен детектор `Vad` (`onBarge`), благодаря чему перебивание голосом поверх речи ИИ работает и при браузерном распознавании (`SpeechRecognition`), а в `MicCapture` буфер преролла увеличен до 10 блоков (~640 мс), чтобы не терялось первое слово перебивающей фразы.
|
|
277
|
+
- **Проактивное перебивание человека со стороны ИИ (`sources/modules/agent/voice.js` → `checkInterim`, `ui/voice-policy.js` → `analyzeInterimSpeech`, `ui/voice.js` → `aiBargeIn`):**
|
|
278
|
+
1. Во время речи человека промежуточный поток проверяется на лету: если человек назвал несуществующий счёт или склад в текущей организации (`$base`), ИИ мгновенно вступает голосом (`aiBargeIn`), сбрасывая незавершённый буфер микрофона и уточняя доступные счета/склады.
|
|
279
|
+
2. При заминке человека (`пауза >= 360 мс` на «эээ…», «как его…», «какой там…») срабатывает ранний подхват реплики (`early-submit`), а при возникновении вопроса `ask_user` в фоне ИИ сразу озвучивает вопрос.
|
|
280
|
+
- **Попредложенческий стрим речи (`streamSentences` в `ui/voice-policy.js`, `Speaker.spokenText` в `ui/voice.js`) и подключение во все чаты (`consultant.js`, `chat.js`, `$task/triggers/on_save`):**
|
|
281
|
+
1. Озвучка (`onDelta`) переведена с ожидания целого 3-предложенческого абзаца на попредложенческий стрим (`streamSentences`) — синтез начинается сразу после закрытия первого предложения.
|
|
282
|
+
2. Живой диалог (`VoiceController`, кнопка со спектром `work-voice-bars` и персонаж `microchat-voice`) подключён в левую панель **«ИИ Консультант»** (`item-consultant`) и в основной **Чат** (`form/chat`), а методы `voice_config`, `voice_speak`, `voice_transcribe`, `voice_interim` вынесены также на уровень `$class` (`sources/server/class.js`, `gateway.js`).
|
|
283
|
+
- [14:30, 28.10] Миграция предприятия ООО «Бизнес Интер Софт» (`D:\business\d.WORK\d.ООО__Бизнес_Инт`) и архивация/перенос баз организаций (`$base` / `/ORGANIZATIONS`):
|
|
284
|
+
- **Миграция ООО «Бизнес Интер Софт» в `/ORGANIZATIONS/Бизнес Интер Софт` (`scripts/import-bis.mjs`, `scripts/demo-seed.mjs`, `tests/delovaya-import.test.js`):**
|
|
285
|
+
1. Развёрнут паспорт организации (`$base`, ИНН `6234049193`, КПП `623401001`, ген. директор Перепелкин Р.А., гл. бухгалтер Перепелкина О.В.), подразделения `accounting` («Бухгалтерия»), `orders` («Заказы и договоры»), `hr` («Кадры и делопроизводство»), `development` («Разработка и выставки») и локальные классы в `/ORGANIZATIONS/Бизнес Интер Софт/MODULES/Register`.
|
|
286
|
+
2. Импортированы **720 объектов справочников**, **18 665 первичных документов** (2006–2026 гг.) и **19 432 записи бухгалтерского журнала** (**45 526 двойных проводок** = **91 052 записи счетов** в `account_entries`) со 100%-ной сходимостью ОСВ (оборот Дт = Кт = `1 282 321 088,85 руб.`, сальдо на конец Дт = Кт = `115 903 865,71 руб.`).
|
|
287
|
+
- **Архивация организаций (`$base`) и развёртывание из архива в `/ORGANIZATIONS` (`sources/server/class/archive.js`, `$server/$folder/$class/$structure/$base/handlers/methods/archive/$handler/class.js`, `ORGANIZATIONS/$domain/handlers/methods/restore/$handler/class.js`):**
|
|
288
|
+
1. Реализованы серверные методы `export_archive` (для `$base`, с предварительным сбросом WAL-журнала `checkpointBaseDb` и упаковкой дерева файлов и `work.db` в `.zip`) и `import_archive` (для `/ORGANIZATIONS`, с проверкой безопасности архива `assertZipSafe`, закрытием открытой БД `closeBaseDb`, распаковкой и переиндексацией классов).
|
|
289
|
+
2. Добавлены клиентские хендлеры **«Архивация»** (`archive`) для `$base` и **«Загрузить из архива»** (`restore`) для `/ORGANIZATIONS`, доступные как в контекстном меню дерева проводника (`methods`), так и на панели инструментов/сервисов `work-form`.
|
|
290
|
+
- [01:30, 28.10] Полная миграция предприятия ООО МА «Деловая сфера» из ранней версии ODANT (`D:\business\d.WORK\d.ООО_МА__Деловая`) в `/ORGANIZATIONS/Деловая сфера` (`scripts/import-delovaya.mjs`, `tests/delovaya-import.test.js`):
|
|
291
|
+
- **Декодер бинарного формата `OBX\x01` (`decodeOmlBuffer`):** реализовано прямое чтение бинарных пакетов `.oml` (`OBX\x01`: таблицы имён и значений + 6 опкодов дерева) и текстовых `.ocl`/`.oml` (прочитаны все 2 518 бинарных пакетов и 306 XML-файлов без ошибок).
|
|
292
|
+
- **Структура организации `/ORGANIZATIONS/Деловая сфера` (`$base`):**
|
|
293
|
+
1. Перенесены подлинные реквизиты из `DOMAIN/CLASS/class.oml` (ИНН `6227007668`, КПП `623401001`, ОГРН `1026200871927`, ОКПО `44917389`, АБ «Россия», директор Перепелкина О.В.).
|
|
294
|
+
2. Развёрнуты подразделения (`$structure`) и рабочие места (`ROLES` с `LINKS`): `accounting` («Бухгалтерия»: Главный бухгалтер, Расчётный счёт, Касса, Начисление ЗП, Списание затрат и ОС), `orders` («Отдел заказов»), `hr` («Отдел кадров»), `research` («Маркетинговые исследования»).
|
|
295
|
+
3. Локально внутри `/ORGANIZATIONS/Деловая сфера/MODULES/Register` созданы структуры (`STRUCTS`), справочники (`CATALOGS`: `Субъекты`, `Сотрудники` `$virtual`, `Клиенты` `$virtual`, `Поставщики` `$virtual`, `Номенклатура`, `Виды налогов`, `Интервьюеры`, `Список организаций`, `Коммерческая недвижимость`, `Опросы`), 20 классов операций (`OPERATIONS`) и 20 рабочих счетов/субсчетов (`REGISTER`: `01`, `02`, `08`, `26`, `50`, `51`, `60`, `62`, `68/01`, `68/09`, `68/10`, `69/01`, `69/02`, `69/03`, `69/11`, `70`, `71`, `73`, `90/01`, `99`).
|
|
296
|
+
- **Импорт данных и сверка ОСВ (`ORGANIZATIONS/Деловая сфера/$base/#system/work.db`):**
|
|
297
|
+
- Импортировано **3 827 объектов справочников**, **11 896 первичных документов** (2001–2026 гг.) и **6 319 записей журнала** (**7 201 двойная проводка** = **14 402 записи счетов** в `account_entries`).
|
|
298
|
+
- Выполнена сверка ОСВ (`trialBalance`): оборот Дт = оборот Кт = `152 764 401,39 руб.`, сальдо на конец Дт = Кт = `3 345 272,04 руб.` (`0.00` расхождений со старым журналом ODANT).
|
|
299
|
+
- В `sources/data/print.js` (`orgOf`) добавлено определение реквизитов организации `$base` по `classBasePath` самой операции для корректной печати при нескольких организациях в `/ORGANIZATIONS`.
|
|
300
|
+
- [12:10, 28.10] Переработка панели пакетирования `oda-packets` (`oda/components/packets/packets.js`, `oda/components/packets/readme.md`, `oda/components/packets/progress.md`, `tests/packets.test.js`):
|
|
301
|
+
- Стрелочки `<` (вперёд к более свежим датам) и `>` (назад к более старым датам) перенесены в начало панели; убрана правая группа `< 2026 > Все`.
|
|
302
|
+
- Кнопка `now` снабжена шевроном `▾` и выпадающим списком (`Сегодня`, `Этот месяц`, `Этот квартал`, `Этот год`); в невыбранном виде выводит `День / Месяц / Квартал / Год` по `mode` панели, в выбранном — текст периода.
|
|
303
|
+
- После `now` добавлена кнопка `yesterday` (`Вчера / Пр.мес. / Пр.кв. / Пр.год` по `mode` панели). При шаге `>` с активной кнопки `now` выделение переходит на `yesterday`, а следующим шагом `>` — на кнопку года.
|
|
304
|
+
- Все активные кнопки (кроме стрелочек, `Период` и `Весь период`) выводят выбранный период текстом (`«15 октября 2026 г.»`, `«Октябрь 2026 г.»`, `«4 кв. 2026 г.»`, `«2026 г.»`, `«Август 2026 г. по Октябрь 2026 г.»`) через `toLocaleDateString` с локалью из браузера; подсвечивается только сама активная кнопка с сохранением её типа в `value` (`$save`).
|
|
305
|
+
- Кнопка `Период` (с иконкой календаря слева) вызывает диалог «Выберите период» с полями ввода под `mode` панели; внутригодовой период отображается на кнопке соответствующего года, а межгодовой создаёт временную кнопку перед `Период`.
|
|
306
|
+
- [00:25, 28.10] Полировка учётных представлений счетов/журнала по эталону ODANT и локальный мультимодальный ИИ-контур (`/MODELS/Local`, `form/trainer`, `sources/modules/trainer/`):
|
|
307
|
+
- **Учётные формы (`postings.js`, `journal.js`, `virtual.js`, `sheet.js`), пакетировщик `oda-packets` и подвал `work-form`:**
|
|
308
|
+
1. Подвал `work-form` (`#formFooter`) снабжён условием `~show="hasFooter"`, а `#focusedTools` — флагом `focused-only`: подвал показывается только тогда, когда есть сервисные кнопки выбранного дочернего элемента (и не дублирует `VIEW` шапки при открытии самого счёта).
|
|
309
|
+
2. Методы отчётов (`db_sheet`, `db_journal`, `db_card`, `db_turnovers` в `sources/data/reports.js`) возвращают `range: { start, end, days }`, а `oda-packets` поддерживает `:days="packetDays"`, отображая только реально существующие годы, кварталы, месяцы и дни.
|
|
310
|
+
3. В `oda/tools/icons/lib/svg/odant.svg` добавлена иконка `odant:calendar` для представления `Обороты`.
|
|
311
|
+
4. Представления `Анализ`, `Обороты`, `Проводки` (`postings.js`), `Журнал проводок` (`journal.js`) и `Виртуальный справочник` (`virtual.js`) переведены на ровный CSS Grid с двухслойными шапками, прижатыми к низу футерами `Итого / На конец` и компактной полосой фильтров (`oda-link-input[dense]`), без лишних инпутов дат и дублирующих вкладок `.mode-tabs`.
|
|
312
|
+
- **Локальный мультимодальный контур ИИ, Hugging Face Hub, дообучение LoRA / SFT / GRPO и PyTorch-инференс (`sources/modules/trainer/`, `MODELS/Local`, `form/trainer`):**
|
|
313
|
+
1. Реализован адаптивный профилировщик железа хоста (`detectHardware`, `computeAdaptiveDefaults`, `evaluateModelFit`), определяющий реальные ресурсы CPU/RAM/GPU и подбирающий оптимальные модели и параметры обучения под текущую машину.
|
|
314
|
+
2. В `sources/modules/trainer/huggingface.js` и `form/trainer` развёрнут мультимодальный каталог и поиск моделей на Hugging Face Hub по 7 категориям (`llm`, `vlm`, `image`, `audio`, `video`, `embed`) и 13 умениям (`capabilities`), с потоковой загрузкой (`Range`), фирменными иконками (`ai:qwen`, `ai:llama3`, `ai:stablediffusion`, `carbon:microphone`, `carbon:volume-up`, `av:videocam`) и мгновенной регистрацией `$ai` в `/MODELS/Local`.
|
|
315
|
+
3. В `sources/modules/trainer/dataset.js` и `runner.js` реализованы сборщик обучающих датасетов WORK (`buildWorkDataset` в формате ChatML `.jsonl` из задач `.task`, базы `work.db` и классов `/MODULES`), детерминированный верификатор учётного ядра (`verifyCompletion` для GRPO) и контур дообучения `LoRA / SFT / GRPO`.
|
|
316
|
+
4. Добавлен постоянный локальный движок нейросетевого инференса `sources/modules/trainer/worker/local_infer_worker.py` + `local-engine.js` (PyTorch zero-copy `mmap` по `.safetensors` с `KV-Cache` и токенизатором `@huggingface/transformers`), позволяющий сразу вести диалог со скачанными моделями (`/MODELS/Local/Qwen3-0.6B`) без внешних серверов.
|
|
317
|
+
- [05:15, 27.10] Доработка формы (`work-form`) по ролям и представления «Ведомость» (`form/sheet`) по эталону ODANT:
|
|
318
|
+
- **Список VIEW на форме по активной роли и компактная кнопка «Консультант» (`$server/$folder/handlers/pages/form/$handler/form.js`, `sources/server/access/gateway.js`, `sources/server/folder.js`, `class.js` представлений `form/*`):**
|
|
319
|
+
1. В `visibleOnly` (`gateway.js`) и `info` (`folder.js`) включена обязательная проверка `_roleAllowed` и `_usable` для всех `$handler` (в т.ч. в режиме `DEV_MODE`).
|
|
320
|
+
2. Представления распределены строго по активной роли: `ADMIN` — конфигурирование и безопасность (`builder`, `editor`, `staff`, `settings`), `BOSS` — просмотр файлов, отчётов и поиск (`folder`, `sheet`, `journal`, `search`, `chat`, а также `turnovers`, `analysis`, `postings` на счетах), `USER` — рабочие инструменты (`objects`, `virtual`, `turnovers`, `analysis`, `postings`, `journal`, `sheet`, `chat`, `calendar`, `email` без `folder` и `builder`).
|
|
321
|
+
3. Кнопка «Консультант» (`#consultantBtn`) в шапке `work-form` сделана компактной круглой кнопкой с иконкой `?` (`icons:help`).
|
|
322
|
+
- **Представление «Ведомость» (`MODULES/Register/REGISTER/$register/$folder/$class/$register/handlers/pages/form/sheet/$handler/sheet.js`), пакетировщик (`oda/components/packets/packets.js`) и `$handler` Счетов на сервисной панели (`$server/$folder/lib/tools/tools.js`):**
|
|
323
|
+
1. Из `label` родительских счетов (`MODULES/Register/REGISTER/*` и `ORGANIZATIONS/Маслоторг/MODULES/Register/REGISTER/*`) убраны `.00`, а в `rowLabel` / `accountText` устранено дублирование кода счёта (`19 НДС по приобретённым ценностям`, `68.01 НДФЛ`, `Технический (корреспондент)`).
|
|
324
|
+
2. В `form/sheet` оформлены двухслойный заголовок (`Счёт / Субсчёт | На начало: Дебет/Кредит | За период: Дебет/Кредит | На конец: Дебет/Кредит`), чёткие вертикальные разделители, тонировка колонок Дебета/Кредита и всегда прижатый к низу футер `Итого` со счётчиком строк; убрана лишняя панель инпутов `.bar` между пакетировщиком и таблицей.
|
|
325
|
+
3. Оформлена опрятная полоса периодов `oda-packets` (5-летний диапазон лет, аккуратная синяя рамка выбранного периода вместо красного `--error`) с запоминанием выбранного периода в `sessionStorage` (`work.accounting.period`) и передачей его при дрилдаунах между `sheet`, `turnovers`, `analysis`, `postings` и `journal`.
|
|
326
|
+
4. Нижние кнопки в `form/sheet` переведены на архитектуру `$handler` Счетов (`MODULES/Register/REGISTER/$register/$folder/$class/$account/handlers/pages/form/{turnovers,analysis,postings}/$handler/` с `service: true`, `order: 1..3`), которые автоматически выводятся на сервисной панели подвала формы (`<item-tools id="focusedTools" :target-item="focusedItem" filter="service" show-labels>`) при выборе счёта в Ведомости.
|
|
327
|
+
- [04:45, 27.10] Ускорение отдачи данных сервером и контекстного меню (`?handlers` с 5–10 с до ~40–80 мс), декомпозиция `sources/server/class.js` (P2.2) и монтирование удалённых узлов федерации в `/NODES/<Узел>` (P2.3):
|
|
328
|
+
- **Ускорение сервера и открытия контекстного меню (`sources/server/folder.js`, `sources/data/api.js`, `sources/data/classes.js`, `sources/host/prewarm.js`, `sources/modules/rag/indexer.js`, `$server/$folder/lib/menu/menu.js`, `tree.js`, `sources/client/folder.js`, `sources/server/user.js`):**
|
|
329
|
+
1. Добавлена серверная заглушка `globalThis.ODA` и кэширование скомпилированных модулей в `$folder.importScript` (`__script_cache__`): устранён `ReferenceError: ODA is not defined` при серверном импорте `create/$handler/class.js` и сотни повторных компиляций `data:text/javascript` на каждый запрос.
|
|
330
|
+
2. В `get inherit_ancestor()` (`sources/server/folder.js`) убран обход `parent.children` родительских бизнес-классов для `$handler` и обычных классов без `$owner` (раньше открытие меню счёта `62` или операции `Покупателю` принудительно инициализировало все соседние счета, операции и подразделения), а для `inherit`-прокси (`this.inherit_source`) возврат сделан мгновенным.
|
|
331
|
+
3. В `get init()` добавлен быстрый путь для унаследованных `$handler` (копирование дескрипторов `this.real_source.DATA` без пересборки `tilde`), сбор `class.js` и `_methods` переведён напрямую на `_tilde_layers()` с кэшированием, а `_liftMethods()` отключён для экземпляров `$handler`.
|
|
332
|
+
4. В `handlers()` добавлена дедупликация слоёв `~/handlers` по `real_dir` и цепочке `inherit_ancestor`; в `form/objects/class.js` (`allowUse`) добавлена быстрая отсечка не-учётных типов без вызова `db_schema`; в `_hasItems()` для обычных папок (`node_modules`, `tests`) проверка сведена к лёгкому `fs.readdirSync`.
|
|
333
|
+
5. На клиенте: ленивая загрузка неактивных вкладок `item-tree` в `explorer.js` (при `onShow()`), передача `declaredRoles` и `online` сразу в `info` (0 лишних запросов `?declared_roles`, `/@online`, `/@children` и 0 дублей `?handlers` при открытии меню).
|
|
334
|
+
- **Декомпозиция `sources/server/class.js` (P2.2):**
|
|
335
|
+
- Монолит `sources/server/class.js` (2 438 строк) разделён на чистый фасад `class.js` (~490 строк) и тематические модули в `sources/server/class/`: `scaffold.js`, `script.js`, `feed.js`, `security.js`, `search.js`.
|
|
336
|
+
- **Монтирование удалённых узлов федерации в `/NODES/<Узел>` (P2.3, `sources/modules/nodes/mount.js`, `sources/server/node.js`, `sources/server/server.js`, `tests/nodes-mount.test.js`):**
|
|
337
|
+
- Выданные нашему серверу точки партнёра (`remote.grants`) монтируются внутри `/NODES/<Узел>/...`, раскрываются в дереве проводника и открываются в наших штатных вкладках `work-form` с прозрачным проксированием `info`, `load`, `readme_merged`, `logs`, `search_tree` и всех методов `db_*` по подписанному протоколу `work-node/1`.
|
|
338
|
+
- [04:10, 27.10] Актуализация контрактов `readme.md` и пакета ИИ-навыков/субагентов под архитектуру ODANT → WORK:
|
|
339
|
+
- Обновлены `sources/data/readme.md` и контракты `MODULES/Register/CATALOGS/$catalog/readme.md`, `MODULES/Register/OPERATIONS/$operation/readme.md`, `MODULES/Register/REGISTER/$register/readme.md`, `MODULES/Register/REGISTER/$register/$folder/$class/$account/readme.md`, навык места `MODULES/Register/REGISTER/$register/ai/skills/register-accounts.md`, а также добавлены контракты доменов и модулей (`ORGANIZATIONS/$domain/readme.md`, `MODULES/$domain/readme.md`, `MODULES/Register/$module/readme.md`, `MODULES/Geo/$module/readme.md`).
|
|
340
|
+
- В субагенты (`analyst.md`, `builder.md`, `auditor.md`, `explore.md`, `integrator-1c.md`), навыки (`import-table.md`, `data-quality.md`), `ENV_GUIDE` (`sources/modules/agent/index.js`) и `tests/ai-package.test.js` подключены учётные инструменты (`describe_class`, `find_objects`, `register_operation`, `report`) и убраны старые пути `/DATA` и `/BASE`.
|
|
341
|
+
- [03:50, 27.10] ИИ-чат «Консультант» в панели переключателей проводника и кнопка «Консультант» на форме:
|
|
342
|
+
- **Кнопка «ИИ» в панели переключателей и панель `item-consultant` (`$server/$folder/lib/consultant/consultant.js`, `$server/$folder/lib/explorer/explorer.js`, `oda/components/layouts/app-layout/app-layout.js`):**
|
|
343
|
+
1. В левую панель переключателей проводника (`slot="left-panel"` в `item-explorer`) добавлена вкладка `ИИ` (`icon="bootstrap:robot"`), открывающая вместо дерева упрощённый ИИ-чат «Консультант» (`item-consultant`).
|
|
344
|
+
2. В «Консультанте» можно задавать произвольные вопросы, продолжать диалог в текущей задаче `.task`, начинать новый вопрос, просматривать список прошлых консультаций из личных логов и в один клик переходить к полной форме задачи или к ленте пользователя.
|
|
345
|
+
- **Кнопка «Консультант» на форме (`$server/$folder/handlers/pages/form/$handler/form.js`):**
|
|
346
|
+
1. В шапку `work-form` добавлена кнопка `Консультант` (`#consultantBtn`, `icon="bootstrap:robot"`).
|
|
347
|
+
2. При нажатии на неё в проводнике вместо дерева открывается панель ИИ «Консультант» (`explorer.openConsultant(ctx)`), собирается контекст открытой формы (`buildConsultantContext`: элемент, путь, тип, активное представление, период, фильтр, выбранная строка и число записей) и Консультанту автоматически задаётся вопрос по открытой форме.
|
|
348
|
+
- **Сохранение в личные логи и отображение в ленте пользователя (`sources/client/file.js`, `$server/$folder/lib/consultant/consultant.js`):**
|
|
349
|
+
- Каждая консультация создаётся как штатный файл `.task` в личном кабинете пользователя (`/USERS/<uid>`), попадает в личные логи (`USERS/<uid>/$user/logs/YYYY-MM-DD/*.logs`) и автоматически отображается в ленте пользователя (`form/chat`).
|
|
350
|
+
- [03:20, 27.10] Структура и визуализация справочников, модули как домены с чек-боксами блокировки, тема дерева и `form/search` для `$structure`:
|
|
351
|
+
- **Структура и визуальное различие справочников (`$catalog` vs `$virtual`):**
|
|
352
|
+
1. Виртуальный справочник `В отпуске` перенесён внутрь `Сотрудники` (`/MODULES/Register/CATALOGS/Сотрудники/В отпуске` и в `ORGANIZATIONS/Маслоторг/...`) и наследует от `Сотрудники` `SOURCE.registry`, `SOURCE.slot` и поля `OVERLAY` (`position`, `salary`, `personnel_number` + собственное поле `until`).
|
|
353
|
+
2. В `ALLOWED_CHILD_TYPES` разрешён `$virtual` внутри `$virtual`; в `sources/data/classes.js` (`isLeaf`), `sources/data/schema.js` и `sources/data/reports.js` (`virtualMembers`) поддержано иерархическое наследование виртуальных справочников и слияние `ext_of` по цепочке `$virtual`-предков.
|
|
354
|
+
3. Виртуальные справочники (`$virtual`) в дереве визуально выделены относительно реальных (`$catalog`): фиолетовая заливка иконки, суб-иконка воронки `carbon:filter`, курсивная подпись и бейдж `вирт.`.
|
|
355
|
+
- **Домен `MODULES`, фиксированная иконка `$module` и чек-боксы блокировки модулей:**
|
|
356
|
+
1. Домен `MODULES` (и в корне WORK, и внутри `$base`) выделен пурпурной иконкой папки `odant:folder` (`fill="#e600ff"`), как в эталонном ODANT.
|
|
357
|
+
2. Модули (`$module`) имеют фиксированную иконку `odant:module` (пурпурная 3D-пирамида кубов из ODANT), а прикладные классы модуля находятся внутри него (в `/MODULES/Geo` вынесены внутренние классы `Координаты` `$struct` и `Геоточки` `$catalog`).
|
|
358
|
+
3. У каждого узла `$module` в дереве отображается чек-бокс быстрой блокировки/включения (`set_enabled`): внутри базы (`/ORGANIZATIONS/<Орг>/MODULES/<Модуль>`) он блокирует модуль в рамках этой базы, а на уровне корня WORK (`/MODULES/<Модуль>`) — полностью блокирует модуль во всей системе (включая все базы, ссылки рабочих мест и вызовы `db_*`).
|
|
359
|
+
- **Представление `form/search` для `$structure` и поддержка тёмной темы дерева:**
|
|
360
|
+
1. Представление `form/search` перенесено в `$server/$folder/$class/$structure/handlers/pages/form/search/$handler/` и выполняет поиск файлов (по имени и текстовому содержимому), объектов данных/документов и вложенных разделов/рабочих мест внутри любого `$structure` (`$structure`, `$base`, `$server`).
|
|
361
|
+
2. Цвета дерева (`oda/components/tree/tree.js`, `$server/$folder/lib/tree/tree.js`, `node.js`), а также форм `form/staff` и `form/search` переведены на адаптивные переменные темы (`var(--content-background)`, `var(--content-color)`, `light-dark(...)`), а фон `:hover` и `.is-stuck:hover` сделан полностью непрозрачным (исправлено просвечивание нижних строк сквозь прилипший родительский узел при наведении мыши).
|
|
362
|
+
- [02:45, 27.10] Доработка дерева проводника под эталон ODANT, глобальный поиск (`form/search`) и управление ролями/рабочими местами (`form/staff`):
|
|
363
|
+
- **Внешний вид дерева (`oda/components/tree/tree.js`, `$server/$folder/lib/tree/tree.js`, `$server/$folder/lib/node/node.js`, `oda/tools/icons/lib/svg/odant.svg`):**
|
|
364
|
+
1. Белый фон дерева (`#ffffff`), светлая плашка прилипания `.node.is-stuck` и мягкий ховер `rgba(0,0,0,0.045)`.
|
|
365
|
+
2. У домена `/ORGANIZATIONS` установлена иконка `odant:structure` (в `odant.svg` проставлен `size="512"` для `structure` и `workplace`, `size="24"` для `work`).
|
|
366
|
+
3. Фокус элемента в дереве как в ODANT: серая плашка (`#e0e0e0`) и нижняя фиолетовая линия (`box-shadow: inset 0 -2px 0 #3b1d5e`) во всю ширину панели дерева.
|
|
367
|
+
4. Увеличен размер иконок у `$base`, `$structure` и контейнера `ORGANIZATIONS` (`iconSize = 28`, `scale: 1`).
|
|
368
|
+
5. У `$base` и `$structure` убран показ числа объектов; справа отображается аватар назначенного руководителя (`BOSS`), а если он не назначен — кнопка назначения руководителя (`fontawesome:s-user-plus`).
|
|
369
|
+
6. Ссылки на классы (`LINKS`) перенесены с уровня подразделений (`$base` / `$structure`) исключительно внутрь рабочих мест (`ROLES`).
|
|
370
|
+
- **Двухрежимный поиск в дереве (`oda/components/tree/tree.js`, `sources/server/class.js` → `search_tree`, `$server/$folder/handlers/pages/form/search/$handler/`):**
|
|
371
|
+
- По мере ввода фильтрует узлы дерева (включая рабочие места и прилинкованные классы).
|
|
372
|
+
- По `Enter` (или клику на иконку поиска) открывает форму глобального поиска `form/search` относительно корня дерева с выдачей только доступных пользователю разделов, рабочих мест, классов и объектов БД.
|
|
373
|
+
- **Управление ролями и рабочими местами (`$server/$folder/$class/$structure/handlers/pages/form/staff/$handler/`):**
|
|
374
|
+
- Назначение и снятие `BOSS` и `ADMIN` организации/подразделения, создание/удаление рабочих мест (`ROLES`), назначение сотрудников (`USERS`) и привязка учётных классов (`LINKS: read / write`, `scope`) + быстрый переход из кнопки в дереве.
|
|
375
|
+
- [02:10, 27.10] Полировка учётного контура и UX в проводнике ODA (Направление 1):
|
|
376
|
+
- **Жизненный цикл `$base` и подключение модулей `$module` (`sources/server/class.js`, `$server/$folder/handlers/methods/create/$handler/class.js`):**
|
|
377
|
+
- При создании организации (`$base`) в `/ORGANIZATIONS` автоматически создаётся домен `MODULES/$domain`, а переданные в `modules` модули из `/MODULES/<id>` сразу разворачиваются в `<base>/MODULES/<id>` с полным каркасом классов (`scaffoldModuleTreeSync`, тонкие `class.js`, наследующие схему, правила проводок, экранные формы и печатные шаблоны по оси `Ancestor`).
|
|
378
|
+
- В диалоге создания `input-name-type` автоматически выбирается основной дочерний тип контейнера (`$base` в `/ORGANIZATIONS`, `$module` в `MODULES`, `$account` в `$register` и т.д.), при создании `$base` показываются чекбоксы подключения модулей из `/MODULES`, а при создании `$module` — быстрый выбор модуля из `/MODULES`.
|
|
379
|
+
- **Работа под реальными сотрудниками без `WORK_DEV` (`sources/server/access/links.js`, `sources/server/class.js`, `ORGANIZATIONS/Маслоторг/*`):**
|
|
380
|
+
- Добавлена `isStructureAncestor`: сотрудник вложенного подразделения видит каркас дерева вверх (`/ORGANIZATIONS` → `/ORGANIZATIONS/<Орг>` → своё подразделение), но чужие подразделения и служебный контейнер `MODULES` скрыты от не-администраторов.
|
|
381
|
+
- В подразделениях `/ORGANIZATIONS/Маслоторг` (`sales`, `warehouse`, `finances`, `purchasing`, `personal`, `logistics`) назначены реальные сотрудники из `/users` на рабочие места (`ROLES`).
|
|
382
|
+
- **Структурированные ошибки полей (`DataError.errors`) и поля типа `File` (`sources/host/http-server.js`, `sources/client.js`, `oda-editor-form`, `oda-file-input`, `form/objects`):**
|
|
383
|
+
- Сервер передаёт `DataError.errors` в заголовке `X-Work-Errors`, клиентский `WORK.fetch` прикрепляет `err.errors` к `WORK_ServerError`, `form/objects` раскладывает их в `fieldErrors`, а `oda-editor-form` подсвечивает невалидные поля (включая вложенные структуры и табличные части) и выводит сообщение под полем.
|
|
384
|
+
- В `oda-editor-form`, `oda-file-input` и `form/objects` подключён тип поля `File` с поддержкой строковых путей и загрузки `File` через `save_file`.
|
|
385
|
+
- **Каскадный пересчёт зависимых списаний (`unit_cost`) и тест производительности (`sources/data/posting.js`, `sources/data/objects.js`):**
|
|
386
|
+
- Добавлена `repostDependentOperations`: при проведении, исправлении или отмене операции задним числом все последующие зарегистрированные операции, зависящие от `unit_cost(...)` по затронутым номенклатурам, автоматически пересчитываются через честное сторно и запись новых проводок.
|
|
387
|
+
- Добавлен тест производительности отчётов (`trialBalance` + `accountTurnovers` с двухэтапными аналитиками на 4 000 записях счетов ~115 мс).
|
|
388
|
+
- Все тесты зелёные (`197/197` в `data-*.test.js`, `accounting-forms.test.js`, `workplaces.test.js`, `link-tree.test.js` + `23/23` Browser UI).
|
|
389
|
+
- [00:45, 27.10] Чистка дерева проводника, счётчики объектов, прилипание слоёв и слияние в `main` (Git + SVN):
|
|
390
|
+
- Удалены старые корневые `/BASE`, `/DATA` и дублирующее представление `$server/$folder/$class/handlers/pages/form/table/`.
|
|
391
|
+
- В `sources/server/folder.js` (`inherit_ancestor`, `_tilde_layers`), `sources/data/print.js`, `sources/data/schema.js` (`norms`) и `sources/data/posting.js` (`unit_cost` с `resolveInBase`) обеспечено полное наследование форм (`sheet`, `journal`, `postings`, `virtual`, `objects`), печатных шаблонов и правил проводок для модулей внутри организаций (`/ORGANIZATIONS/Маслоторг/MODULES/Register`).
|
|
392
|
+
- В `scripts/demo-seed.mjs` добавлена `seedDemoOperations` — заполняет `ORGANIZATIONS/Маслоторг/$base/#system/work.db` справочниками (20), нормативами (8) и проведёнными операциями (12 документов, 68 записей счетов).
|
|
393
|
+
- В `sources/data/api.js` добавлена `classObjectCount()`, подключённая в `sources/server/class.js` (`init`, `info`, `_linkTrie`), `link-nodes.js` и `node.js`: у всех классов и ссылок справа отображается количество объектов/записей, а у рабочих мест — значок сотрудников `👥` (`users.js`).
|
|
394
|
+
- В `sources/server/class.js` (`_linkTrie`) срезан избыточный префикс `/ORGANIZATIONS/<Орг>/MODULES/<Модуль>` у ссылок рабочих мест (ссылки начинаются сразу со `Справочники`, `Операции`, `Журнал проводок`).
|
|
395
|
+
- В `$server/$folder/lib/tree/tree.js` исправлено многоуровневое прилипание (`position: sticky !important`), плашка `.is-stuck` включается только у реально прилипших к верху узлов, а класс фокуса переименован в `.node-focused` (чтобы глобальный `.focused { position: relative !important }` из `oda/tools/styles/styles.js` не сдвигал выбранный узел вниз).
|
|
396
|
+
- Изменения влиты в `main` (`origin/main` и `origin/work-v2`) и закоммичены в SVN; выровнен регистр `NODES` и `readme.md`, дополнен `svn:global-ignores`.
|
|
397
|
+
- [14:55] Развёртывание `/MODULES/Register`, `/ORGANIZATIONS/Маслоторг` и обновление конструктора классов `form/builder`:
|
|
398
|
+
- В `/MODULES/Register` развёрнута полная типовая учётная конфигурация (`CATALOGS`, `STRUCTS`, `OPERATIONS`, `REGISTER`).
|
|
399
|
+
- В `/ORGANIZATIONS/Маслоторг` (`$base`) развёрнута полноценная организация со своими подразделениями (`sales`, `purchasing`, `warehouse`, `finances`, `personal`, `logistics`), рабочими местами и подключённым модулем `MODULES/Register`, наследующим метаданные от `/MODULES/Register` по оси `Ancestor`.
|
|
400
|
+
- В `sources/client/field.js` и `$server/$folder/$class/handlers/pages/form/builder/$handler/builder.js` добавлена поддержка `table: true`, `target` (`Link` / `Struct`), `analytic: true`, миксинов `types`, настройки `SOURCE` (`mode: 'turnover' | 'balance'`) и `OVERLAY` у `$virtual`, а также редактора правил проводок `POSTINGS` у `$operation`.
|
|
401
|
+
- Все тесты зелёные (`165/165`).
|
|
402
|
+
- [14:35] Архитектурное уточнение иерархии типов и ограничений вложенности (`$domain`, абстрактный `$class`, `allowed_child_types`):
|
|
403
|
+
- Создан типизатор домена `$server/$folder/$class/$domain/class.js`; контейнеры верхнего уровня переведены с `$class` на `$domain` (`ORGANIZATIONS/$domain`, `MODULES/$domain`, `DATA/$domain`) с объявлением их допустимых дочерних типов в `$domain/$folder/$class/*`.
|
|
404
|
+
- В `sources/server/class.js` добавлена матрица вложенности `ALLOWED_CHILD_TYPES` и геттер `allowed_child_types` (в шлюзе `gateway.js` и диалоге создания `create/$handler/class.js`):
|
|
405
|
+
- `$class` закреплён как абстрактная развилка и запрещён для создания в дереве;
|
|
406
|
+
- внутри `$server` допустимы только `$domain`;
|
|
407
|
+
- внутри каждого домена, организации (`$base`), подразделения (`$structure`), модуля (`$module`) и прикладного класса (`$catalog`, `$virtual`, `$struct`, `$operation`, `$register`, `$account`) жёстко проверяются допустимые дочерние типы.
|
|
408
|
+
- Все тесты зелёные (`data-*.test.js`, `accounting-forms.test.js`, `agent-assistants.test.js`, `forms-gateway.test.js`, `smoke-core.test.js`).
|
|
409
|
+
- [14:10] Этапы 4 и 5 плана (`docs/work-v2-plan.md`, `docs/architecture-v2.md`):
|
|
410
|
+
- **Четырёхшаговый интерфейс Журнала и Счетов в проводнике ODA (`form/sheet`, `form/postings`, `form/journal`):**
|
|
411
|
+
1. Везде сверху добавлена единая полоса периодов `oda-packets`.
|
|
412
|
+
2. **Экран 1 (`form/sheet`):** Общая ОСВ по дереву счетов с нижней панелью переходов **Обороты | Анализ | Проводки** от выбранного счёта.
|
|
413
|
+
3. **Экран 2 (`form/postings`, `mode: 'analysis'`):** Анализ счёта в разрезе аналитик (слева управление порядком слотов `↑↓`, фильтр по объекту и субаналитикам, переключатель `ЗНАЧЕНИЯ: Сумма / Количество`; справа таблица с быстрым фильтром и переходом в Обороты по выбранной аналитике).
|
|
414
|
+
4. **Экран 3 (`form/postings`, `mode: 'turnovers'`):** двухпанельные Обороты счёта (крайняя левая панель `ГРУППИРОВАТЬ`: *Нет / Дни / Недели / Месяцы / Кварталы / Годы / Операции / Счета / Все*; средняя сводная таблица периодов с сальдо и оборотом; правая таблица документов выбранного периода с корр. счётом `со сч. ...` / `на сч. ...` и кнопками **Проводка** и **Документ**).
|
|
415
|
+
5. **Экран 4 (`entryCard` / `openEntry`):** сборная карточка проводки из записей счёта Дебета и счёта Кредита (`db_entry`).
|
|
416
|
+
- **Инструменты ИИ-агента (`sources/modules/agent/tools/work/data.js`):** добавлены `describe_class`, `find_objects`, `register_operation` (с подтверждением человека на запись и свободным `preview`) и `report` (`sheet | turnovers | card | journal | entry` с поддержкой двухэтапных аналитик).
|
|
417
|
+
- Все тесты зелёные: Node `159/159` (`tests/data-*.test.js`, `tests/accounting-forms.test.js`), Browser UI `23/23` (`tests/ui/accounting-forms.html`).
|
|
418
|
+
- [13:40] Этап 3 плана (`docs/work-v2-plan.md`, `docs/architecture-v2.md`):
|
|
419
|
+
- **Явная двойная запись по счетам (`account_entries`):** при проведении операции в БД создаются две раздельные записи — одна в классе счёта Дебета (с его аналитиками) и одна в классе счёта Кредита (с его аналитиками), связанные общим ключом `entry_id` и `op_id`.
|
|
420
|
+
- **Двухэтапные аналитики (`resolveAnalyticsFilter`):** фильтрация и разворот ОСВ (`by`), карточки счёта и оборотов по любым полям справочника-аналитики (включая вложенные структуры `$struct` и поля расширения `OVERLAY` виртуального справочника).
|
|
421
|
+
- **Режимы виртуального справочника (`$virtual`):** поддержка `mode: 'turnover'` (все объекты с оборотами по счёту — клиенты не пропадают после оплаты долга в ноль) и `mode: 'balance'` (по ненулевому остатку на дату).
|
|
422
|
+
- **Методы для 4-шагового интерфейса ODANT:** `accountTurnovers` / `db_turnovers` (двухпанельные обороты с группировкой по *Нет / Дни / Недели / Месяцы / Кварталы / Годы / Операции / Счета / Все*, Экран 3) и `readEntry` / `db_entry` (сборная карточка проводки из записей счетов Дт и Кт, Экран 4).
|
|
423
|
+
- **Связь с `data.logs`:** регистрация, исправление и отмена операции автоматически записывают факт в ленту событий подразделения и автора (`logOperationFact`).
|
|
424
|
+
- Все тесты зелёные (156/156).
|
|
425
|
+
- [13:25] Этап 2 плана (`docs/work-v2-plan.md`, `docs/architecture-v2.md`):
|
|
426
|
+
- Введены домены `/MODULES` (`$module`: `/MODULES/Register`, `/MODULES/Geo`, `$server/$folder/$class/$module/class.js`) и `/ORGANIZATIONS` (контейнер независимых `$base`).
|
|
427
|
+
- Реализована изоляция БД каждой организации (`$base`) внутри её папки (`<Организация>/$base/#system/work.db`, `baseDbFile`/`dataDb(basePath)` в `db.js`, `resolveBasePath`/`dataStore(basePath)` в `api.js`).
|
|
428
|
+
- В `schema.js` реализовано трёхосевое наследование метаданных с приоритетом `Types (миксины)` → `Ancestor (одноимённый класс в /MODULES или /DATA)` → `Parent (родитель в текущем дереве)` → `Сам класс`, а также автоматическое разрешение ссылок (`resolveInBase`) на локальные классы внутри `$base`.
|
|
429
|
+
- В `sources/server/class.js` прямой просмотр `$module` в дереве ограничен администраторами (остальные пользователи видят прилинкованные классы через `LINKS` своих рабочих мест).
|
|
430
|
+
- Все тесты зелёные (153/153).
|
|
431
|
+
- [13:10] Этапы 0 и 1 плана (`docs/work-v2-plan.md`, `docs/architecture-v2.md`):
|
|
432
|
+
- **Этап 0 (расчистка):** удалены сторонний интерфейс `Lit + Web Awesome` (`vendor/lit`, `vendor/webawesome`, `$structure/handlers/pages/app/`, `tests/app-*`) и старые дубли папок в `DATA/`.
|
|
433
|
+
- **Этап 1 (отказ от `CID`, единый `$catalog`, структуры `$struct` и `table: true`):** из `sources/data/classes.js` и всех 77 классов `DATA/` и `BASE/` удалены искусственные `CID` (`cid` всегда равен пути класса `path`); дублирующий тип `$registry` заменён на единый `$catalog`; введён тип структур `$struct` (`/DATA/STRUCTS/Адрес`, `/DATA/STRUCTS/Паспорт` с рекурсивным вложенным `Адрес`, `/DATA/STRUCTS/Единица измерения`) и признак поля `table: true` (при `table: false` — вложенная структура `type: 'struct'`, при `table: true` — табличная часть `type: 'table'`); в `objects.js` добавлены валидация, сбор ссылок, полнотекстовый индекс и фильтрация `where` по точечным путям вложенных структур (`passport.series`, `passport.address.city`); в `oda-editor-form` и `form/objects` добавлена поддержка полей `Struct`. Все тесты зелёные (151/151).
|
|
434
|
+
- [10:42] Перестройка интерфейса во вкладках проводника ODA и день 8 плана (отчёты с переходами и траектория объекта): по решению пользователя основной интерфейс работает во вкладках проводника ODA (`work-form`), а отдельная страница `app/$handler/` (дни 6–7) оставлена как есть без развития. У классов `DATA/` заданы виды `form` по умолчанию (`$catalog`, `$registry`, `$operation` → `objects`; `$virtual` → `virtual`; `$register` → `sheet`; `$account` → `postings`, плюс хендлер `sheet` у `$account`), в `objects/class.js` `allowUse` сначала проверяет `db_schema` (исключая счета и виртуальные справочники). На сервере `db_schema` дополнен `classes`, `leaves` и `slots` (аналитики поддерева счетов), `objectTrajectory` включает счета начального и конечного сальдо в `names`. В `form.js` (`work-form`) `window.execute($item, nav)` делегирует в `window.parent.execute` внутри проводника и передаёт параметры перехода (`sessionStorage` + `BroadcastChannel('work-form-nav')` → `view_control.applyNav`). В `form/objects`: поиск, фильтр статуса (включая удалённые справочники и `db_restore`), фильтры по полям `Select`/`Boolean`, страницы, колонка вида и выбор листа (`leaves`) при создании/правке в группе классов, отбрасывание пустых строк табличной части, живой предпросмотр проводок черновика с названиями счетов и аналитик, передача даты операции `:at` из `oda-editor-form` в `oda-link-input`, блок «Остатки по счетам / Движения» (`db_trajectory`) в окне объекта справочника с переходом в карточку счёта и операцию, открытие объекта по `applyNav({ id })`. В `form/sheet`: выпадающий список разворота по слотам аналитик из `db_schema.slots`, переход в `form/postings` с периодом, подразделением и ключом аналитики. В `form/postings`, `form/journal` и `form/virtual`: переход к конкретной операции (`{ view: 'objects', id }`), корр. счёту и карточке участника; коды счетов `acc.*` показываются без префикса `acc.`. Тесты: `accounting-forms.test.js` (35/35), `tests/ui/accounting-forms.html` (22/22), `data-*`/`app-*` (151/151). Причина: решение пользователя по концепции UI (вариант «а» — вкладки в проводнике ODA) и день 8 плана.
|
|
435
|
+
- [01:20] День 7 плана — универсальный список и форма объектов (Lit + Web Awesome) в `app/$handler/`: `view-class.js` теперь выбирает вид по схеме (`db_schema`): справочники и операции — `obj-list.js` (поиск, статус, период, отбор по полям списка/да-нет/ссылки, сортировка по колонкам, страницы по 25 — всё параметрами `db_query`, состояние в адресе: `q`, `status`, `from`, `to`, `order`, `page`, `f.<поле>`), при `id` в адресе — `obj-form.js`; виртуальный справочник — `view-members.js` (состав на сегодня, только чтение); счета, журналы, подразделения — `view-passport.js` (прежний паспорт; отчёты — день 8). Форма: поля по типам (`field-input.js`), ссылка с поиском, составом виртуального справочника на дату операции, «показать всех» и «создать» в окне (`link-input.js`, `db_choices`), табличная часть (`table-input.js`: добавить, дублировать, удалить, итоги), ошибки по полям и строкам (`lines[2].qty`), место записи (`db_scope.contexts`, выбор при нескольких), действия по статусу (`lifecycle.js`): «Зарегистрировать / Сохранить черновик / Удалить», «Исправить / Отменить операцию», «Печать» (кнопка на каждый шаблон), проводки — предпросмотр черновика (`db_preview`, по несохранённому телу с задержкой) или действующие (`db_journal` по операции). Выбор листа при создании — дерево класса (`class-tree.js`). Чистая логика без DOM: `fields.js`, `list-model.js`, `lifecycle.js`, `class-tree.js`, `entries.js`; клиент `api.js` дополнен записью (`create`, `update`, `register`, `correct`, `cancel`, `preview`, `journal`, `print`…) и разбором нарушений по полям из текста ошибки (`parseFieldErrors`); схема кэшируется в `store.schema()`. На сервере: `db_read` отдаёт `names` (названия объектов по ссылкам), `db_preview` — `names` (счета и аналитики). Тесты: `tests/app-objects.test.js` (20, Node), `tests/ui/app-objects.html` (7 в браузере), `tests/ui/app-shell.html` обновлён под список; `tests/data-api.test.js` проверяет `names`. Проверено руками в headless Edge на живом DEV-сервере: Реализация → Создать → выбор листа → клиент и склад из списка → строка → предпросмотр проводок → Зарегистрировать → Исправить → Отменить; «Создать» контрагента из ссылки. Причина: план WORK v2, день 7.
|
|
436
|
+
- [00:27] День 6 плана — оболочка рабочего места на Lit + Web Awesome: `vendor/lit/lit.js` (бандл Lit 3.3.3 с директивами), `vendor/webawesome` (3.14.0, `dist-cdn` без типов, 618 файлов), `vendor/README.md`; страница `app` у `$structure` (`$server/$folder/$class/$structure/handlers/pages/app`, адрес `{подразделение}/~/handlers//app/index.html`): `app.js` (элемент ODA — только вход страницы), `shell.js` (`wa-page`: шапка, крошки, меню, экран), `org-nav.js` (навигатор: кнопка контекста и дерево подразделений и мест), `menu-view.js`, `view-home.js` (слои меню, права места), `view-class.js` (паспорт класса: `db_schema`, `db_query`), `icon.js` (`<work-icon>` из спрайтов проекта), `theme.css`/`vendor.js`/`components.js` (токены, светлая/тёмная тема, явный список компонентов), `router.js`/`menu.js`/`api.js`/`store.js` — чистые модули без DOM. На сервере — метод `db_workspace` (`sources/data/workspace.js`): подразделения и места пользователя, меню мест из ссылок, контексты, описание классов меню. Тесты: `data-workspace` (9), `app-shell` (15), `tests/ui/app-shell.html` (7 в браузере) + smoke в `tests/ui/run.mjs`; проверено в headless Edge на живом сервере (DEV): навигатор, смена места, класс, тёмная тема, 480 px с выезжающим меню. Причина: план WORK v2, день 6.
|
|
437
|
+
- [23:38] Табличная часть в форме объектов: `oda-block-input` с `noHeader` больше не прячет строку заголовка целиком — убираются подпись и стрелка, кнопки (`visibleTools`) и выжимка остаются, если видимые кнопки есть; свернуть тело без заголовка нельзя. Раньше `oda-editor-form` рисовал поля с `no-header`, и у `oda-table-input` пропадали «Добавить/Дублировать/Удалить строку» (у списков, файлов, медиа — их кнопки). `tableColumns` в `table-input.js` передаёт колонкам `catalog` (и путь из `type`, без перевода в нижний регистр), `readonly`, `placeholder` — ссылка «Номенклатура» в ячейке получила справочник. `oda-link-input`: `mousedown.prevent` на списке вариантов — ячейка таблицы принимает ввод только при фокусе внутри, и выбор варианта терялся. `oda-numeric-input`: уход из пустого поля падал на `toFixed`. Проверено headless Edge на живом сервере: «Покупателю» → «Создать» → покупатель, склад, номер, строка (Масло моторное, 10 л × 200) → «Сохранить» (черновик) → «Провести» (Дт 62 Кт 90.01 2 000, Дт 62 Кт 68.02 400, Дт 90.02 Кт 41 1 550 по средней) → «Товарная накладная» (реквизиты, НДС, сумма прописью). Причина: в форме продажи нельзя было добавить товары.
|
|
438
|
+
- [23:15] Поля-ссылки в формах после появления `CID`: `db_schema` добавляет к `target` (cid) `targetPath` — путь класса (у полей, строк табличных частей и расширений), формы объектов, состава и карточки счёта передают `oda-link-input` его (`catalog: f.targetPath || f.target`). Раньше `WORK.get_item('cat.clients')` возвращал `null` и поле «Покупатель» падало «Cannot read properties of null (reading 'fetch')». Проверено на живом сервере: пути полей реализации верные, `db_choices` «Клиентов» возвращает участника. Причина: отчёт о сбое формы продажи.
|
|
439
|
+
- [23:08] Форма объектов у листа с унаследованными полями: `allowUse` хендлера `form/objects` смотрел только собственные `METADATA.FIELDS` класса, поэтому лист операции с одними `POSTINGS` (Покупателю, Увольнение, НДС) отвечал 400 «Доступ запрещён» на `info` хендлера и показывал вид класса; теперь, если своих полей нет, берётся схема ядра (`db_schema`: операции и справочники, не виртуальные). Реквизиты организации в печати: `org` — метка корня `$base` и значения `inn`, `kpp`, `ogrn`, `address`, `phone`, `email`, `bank`, `bik`, `account`, `corr` из его `class.js` (у демо-корня — вымышленные «ООО «Маслоторг»»); шаблоны накладной, счёта и платёжного поручения выводят их. Тест `allowUse` в `accounting-forms`, кнопка печатной формы — в `tests/ui/accounting-forms.html` (реальный браузер). Причина: блокер проверки демо.
|
|
440
|
+
- [22:57] Проверка демо на живом сервере (`scripts/dev-server.ps1`, порт 8011, `WORK_DEV`): `.data/work.db` засеяна `scripts/demo-seed.mjs`; через клиентский API (`WORK.get_item(...).fetch`) проведены поступление, фасовка и реализация со скользящей средней, `db_scope`, `db_print_list` и `db_print` отвечают, накладная печатается с названиями, НДС по нормативу и суммой прописью; форма объектов открывается у справочников, счетов и операций с собственными полями (Номенклатура, Фасовка, группа «Реализация»). Причина: проверка демо в браузере.
|
|
441
|
+
- [22:45] Печатные формы HTML (Р11): `print.js` — поиск шаблонов `<класс>/$operation/print/*.html` по цепочке классов (ближайший одноимённый заменяет родительский), безопасный язык (`{{выражение}}`, `{{#таблица}}`, `{{#if}}`, `{{+итог = …}}`, `money`/`date`/`words`/`n`/`norm`), ссылки названиями на дату операции; методы `db_print_list`/`db_print` у классов; в форме объектов — кнопки печати сохранённой операции (окно открывается по клику, ошибка закрывает его); демо-шаблоны «Платёжное поручение» (группа платежей), «Товарная накладная», «Счёт на оплату». Тесты в `data-demo` и `accounting-forms`. Причина: план WORK v2, Р11.
|
|
442
|
+
- [22:40] Себестоимость по скользящей средней: `unit_cost(счёт, номенклатура, склад?, партия?, поУмолчанию?)` в правилах проводок (`posting.js`, `unitCost`), функция известна `checkSchema`. Демо: реализация, возврат, перемещение, фасовка, убыль, инвентаризация и доставка считают цену по остатку счёта 41, ручное поле (`cost`, `price`, `container_cost`) переопределяет; счёт 10 убран — тара и топливо учитываются на 41. Тест `data-demo` считает себестоимость без ручных цен. Причина: шаг после демо-конфигурации, ручной ввод себестоимости.
|
|
443
|
+
- [22:19] Демо-конфигурация дистрибьютора масел и топлива (`DATA`, `BASE`): справочники (субъекты → юр./физ. лица, номенклатура с единицами, склады и резервуары, партии, договоры, транспорт, виды нормативов; виртуальные «Клиенты», «Поставщики», «Сотрудники», «В отпуске»), счета (10, 19, 20, 26, 41, 44, 51, 60, 62, 68.01/02, 69, 70, 90.01/02, 91, 94, нормативы, технический, кадры, коммуникации), дерево операций (платежи и поступления по р/с, поступление товара, перемещение, фасовка, реализация/возврат, доставка, убыль, инвентаризация, зарплата, кадры, письмо/звонок, установка норматива), места подразделений (продажи, закупки, склад, логистика, бухгалтерия, кадры, руководство) со ссылками и `scope`; `CID` всем классам, поле `time` из операций убрано; прежняя заготовка (ПРОДАЖА, ОПЛАТА, ПИСЬМО, Реализация, Бухгалтерские, Управленческие, контрагенты) удалена. `scripts/demo-seed.mjs` — нормативы, номенклатура, склады, контрагенты, сотрудники, транспорт; тест `data-demo` на настоящем дереве (схемы, ссылки мест, сквозной сценарий с ОСВ). Причина: план WORK v2, раздел 4.
|
|
444
|
+
- [21:20] Контекст рабочего места в формах: окно нового объекта — выбор места записи из `db_scope.contexts`, если их несколько (последний выбор сохраняется), и `unit`/`place` в `db_create`; фильтр подразделения в списке объектов, журнале, ОСВ и карточке счёта (виден при нескольких подразделениях); `db_query` принимает `unit` с вложенными. Тесты форм в `data-scope`, `tests/ui/journal.html`. Причина: пользователь с несколькими местами не мог создать объект из формы.
|
|
445
|
+
- [20:48] Видимость по `scope` рабочих мест (`scope.js`): `scope` в ссылке места (`own`/`place`/`unit`/`all`, умолчание: справочники — `all`, операции и счета — `unit`), `scopeLinks`/`directAccess` в `access/links.js`; права применяются к выборкам, объектам по `id`, журналу, ОСВ, карточке, состоянию и траектории, составу и выбору ссылки; BOSS и вышестоящее место — на чтение; сводные отчёты предка по видимым веткам вместо запрета; подразделение и место при создании — из мест записи пользователя с проверкой; метод `db_scope`; тест `data-scope`, `link-tree` переписан под ветки. Причина: Р8, следующий шаг после перевода форм на ядро.
|
|
446
|
+
- [13:12] Файловое хранение объектов удалено: из `sources/server/class.js` — объекты `DATA/`, индексы `INDEX/`, `overlay.json`, `read_link`, `split` (~1370 строк) и их записи в шлюзе; `post`/`unpost` у `$operation`, `journal`/`sheet` у `$register`, `browse`/`overlay_save` у `$virtual`, поля записей проводок у `$account`, `INDEXES` счетов, `overlay.json` «В отпуске» (ссылался на удалённые объекты), `scripts/migrate-accounting.mjs`, 8 тестов старого хранения. `import_objects` агента — на `db_schema`/`db_create`; `oda-link-input` — только ядро. Чтение `db_*` — по `data_access`; инвариант листа в `create` — по объектам ядра (`classHasObjects`). Форма состава: правка записи-расширения (`db_create` с `ext_of` / `db_update` с версией), версия расширения в `db_members`. Причина: перевод на ядро завершён, шаг 3.
|
|
447
|
+
- [12:16] Формы журнала, ОСВ, карточки счёта и состава виртуального справочника на `db_journal`/`db_sheet`/`db_card`/`db_members`: журнал — новые сверху, фильтры периода, счёта, класса операций и «только действующие», аналитики сторон, сторно выделено; ОСВ — разворот по слотам аналитик; карточка — слоты аналитик из `db_schema`, фильтр через `oda-link-input`, сальдо после каждой проводки со стороной; состав — сальдо и поля расширений из `db_schema`. В `names` отчётов — `paths` классов, в `db_members` — реестр-источник. Операция без названия показывается классом. Тест форм на ответах ядра в `data-api`. Причина: перевод форм на ядро, шаг 2 — отчёты.
|
|
448
|
+
- [11:38] Форма объектов класса на `db_*`: схема с наследованием, список с названиями ссылок, у операций — полоса периодов по дате операции, колонки «Дата»/«Статус», в окне — дата, проводки (действующие или предпросмотр) и действия по статусу (провести, исправить, отменить); поле-ссылка на `db_choices`/`db_read` (состав на дату, поиск с реестром, «показать все», «создать»), прежний путь — для классов вне ядра. `db_schema` → `{ schema, errors }`, `names` в `db_query`, чтение через виртуальный справочник. Причина: перевод форм на ядро, шаг 1 — объекты и ссылки.
|
|
449
|
+
- [11:03] Подключение к серверу (`api.js`): методы `db_*` у `$class` (объекты, проведение, отчёты, выбор ссылки, закрытие периода), уровни в шлюзе, права класса вызова, автор из сессии, объект только в поддереве класса; кэш классов обновляется лениво после `save_file` class.js и правок на диске; тест `data-api`. Причина: следующий шаг после отчётов — параллельный API, старые файловые методы не тронуты.
|
|
450
|
+
- [10:30] Выбор значения ссылки (`choices.js`, `linkChoices`): без поиска — состав виртуального справочника на дату, при поиске — участники и подходящие объекты реестра, расширение на весь реестр, классы для создания нового объекта; Р7 в `docs/architecture-v2.md` уточнён. Причина: решение по ссылкам на виртуальный справочник.
|
|
451
|
+
- [10:09] Отчёты (`reports.js`): журнал проводок (со сторно или только действующие), ОСВ по дереву счетов с разворотом по аналитикам, карточка счёта с сальдо после каждой проводки, состояние объекта на момент и траектория, состав виртуального справочника на дату (`virtualMembers`, `isVirtualMember`); `presentEntry` из `posting.js`; тест `data-reports`. Причина: план WORK v2, день 4.
|
|
452
|
+
- [09:45] Проведение операций (`posting.js`): правила с `each`/`when`, `amount` в копейках, количество в базовой единице с `doc_qty`/`doc_unit` и `qty2`, `norm()` по счёту нормативов (`NORMS`), `coef()`, автоаналитики, регистрация / исправление со сторно / отмена, `AUTO_REGISTER` в `createObject`, закрытый период (`closed_until`), предпросмотр проводок; настройки в `db.js`; тест `data-posting`. Причина: план WORK v2, день 3.
|
|
453
|
+
- [09:02] Сборка схемы класса по наследованию (`schema.js`: слияние `FIELDS`/`POSTINGS`/`OVERLAY` по id, нормализация типов, проверка полноты правил листа) и объекты (`objects.js`: проверка тела по схеме, версии с `valid_from`, чтение на дату, обратные ссылки, защита используемых от удаления, записи-расширения виртуальных справочников, выборки с полнотекстовым поиском); `time.js` (местные дни), `errors.js` (`DataError` со списком нарушений). Причина: план WORK v2, день 2.
|
|
454
|
+
- [09:02] Полнотекстовый индекс привязан к `rowid` объекта вместо неиндексируемой колонки `id`. Причина: замена строки поиска при каждой записи не должна проходить всю таблицу.
|
|
455
|
+
|
|
456
|
+
## В работе
|
|
457
|
+
- **Все этапы плана `docs/work-v2-plan.md` (Этапы 0–6) и блок полировки учётного контура выполнены полностью.** Учётная система WORK приведена к объектно-иерархической архитектуре ODANT поверх `node:sqlite`.
|
|
458
|
+
- Следующие возможные задачи (из дорожной карты):
|
|
459
|
+
- Декомпозиция монолита `sources/server/class.js` на модули (`P2.2`).
|
|
460
|
+
- Федерация узлов (`sources/modules/nodes`, `P2.3`).
|
|
461
|
+
- Коммерческий контур, PaaS и витрина модулей (`/MODULES`, `P2.4`).
|
|
462
|
+
|
|
463
|
+
## Ключевые решения
|
|
464
|
+
- Первая версия справочника действует всегда (`valid_from = 0`). Причина: операция задним числом должна видеть объект, заведённый позже.
|
|
465
|
+
- Лишнее поле в теле объекта — ошибка, а не молчаливый пропуск. Причина: форма и ИИ получают явное указание, что исправить; в данных нет мусора.
|
|
466
|
+
- Ссылка на виртуальный справочник хранит id реального объекта реестра-источника. Причина: виртуальный справочник — представление, а не копия объектов.
|
|
467
|
+
- Норматив — остаток количества (`qty`), а не суммы. Причина: ставки вроде 0,302 не помещаются в копейки.
|
|
468
|
+
- `norm()` без значения по умолчанию при отсутствии норматива — ошибка, а не 0. Причина: незаданная ставка взносов не должна молча обнулять налог.
|
|
469
|
+
- В закрытый период нельзя регистрировать и переносить операции; исправление операции из закрытого периода датирует сторно и новые проводки текущим моментом. Причина: закрытые итоги не меняются, исправление всё равно возможно (Р1).
|
|
470
|
+
- Автор проводки — тот, кто выполнил действие (регистрацию, исправление, отмену), иначе автор операции. Причина: журнал отвечает, кто создал факт.
|
|
471
|
+
- Сторно в отчётах — отрицательные обороты своей стороны (красное сторно), а не оборот противоположной. Причина: отменённая операция не раздувает обороты ОСВ.
|
|
472
|
+
- Сальдо счёта с разворотом по аналитике — развёрнутое (сумма дебетовых и кредитовых сальдо строк), без разворота — свёрнутое. Причина: переплата одного покупателя не должна прятать долг другого.
|
|
473
|
+
- «На дату» в отчётах — включительно, день — на конец дня. Причина: «остаток на 31.08» — после всех операций 31.08.
|
|
474
|
+
- Состав виртуального справочника — ненулевое сальдо (сумма или количество) по слоту аналитики счёта-источника. Причина: решение Р7; клиент, погасивший долг, выпадает — если это нежелательно, источником делают отдельный счёт «принадлежности».
|
|
475
|
+
|
|
476
|
+
- Ссылка на виртуальный справочник при проведении не проверяется на состав; состав ограничивает только выбор: без поиска — участники на дату, при поиске к ним примешивается реальный справочник, не нашлось — создание. Причина: первая продажа сама делает покупателя клиентом, строгая проверка её запретила бы; полный список без поиска шумит.
|
|
477
|
+
|
|
478
|
+
- Ядро подключалось параллельным API `db_*`, файловые методы работали до перевода форм (удалены 25.10 после перевода). Причина: на файловое хранение были завязаны формы и около 15 тестов; замена одним шагом рискованна.
|
|
479
|
+
- Метод вызывается на классе запроса, объект по `id` вне его поддерева — «не найден». Причина: права проверяются по классу вызова, и право на один класс не должно открывать объекты другого по id.
|
|
480
|
+
- `cid` реальных классов — путь (CID в class.js пока нет). Причина: CID добавляется при подготовке демо-конфигурации; до переноса папок путь достаточен.
|
|
481
|
+
|
|
482
|
+
- Сохранение проведённой операции в форме — исправление (`db_correct`), правка черновика и справочника — замена тела целиком (`replace`) с версией. Причина: очищенное в форме поле должно исчезнуть из тела, а чужая параллельная правка — дать ошибку, а не затереться.
|
|
483
|
+
- «Провести» в форме сначала сохраняет новое или изменённое. Причина: проводится то, что видно в окне, без лишнего шага.
|
|
484
|
+
- Формы открывают класс по `names.paths` и `targetPath`, а не по `cid`. Причина: после появления `CID` в class.js `cid` перестанет быть путём, а `WORK.get_item` ищет по пути.
|
|
485
|
+
- Чтение `db_*` на предке ссылок рабочего места — только по веткам ссылок (сводный отчёт), а не запрет и не всё поддерево. Причина: предок виден как каркас цепочки, его поддерево включает чужие ветки, а руководителю нужен итог по своим.
|
|
486
|
+
- Место хранится путём в дереве `ROLES` подразделения и сравнивается только в паре с подразделением. Причина: места разных подразделений называются одинаково («Продажи»), а подразделение уже есть в отдельной колонке.
|
|
487
|
+
- Подразделение и место создаваемого объекта не указаны — берутся единственные доступные, иначе ошибка со списком; назначение в самом классе (без ссылок) пишет без подразделения. Причина: формы пока не передают контекст, а объект без подразделения не увидит никто со `scope: unit`, включая автора.
|
|
488
|
+
- В ОСВ, карточке и отчётах объекта ветка-счёт проверяется по счёту своей стороны, в журнале — по любой. Причина: иначе корр. счёт вне ссылок (90 у продавца со ссылкой на 62) появился бы в ведомости с частичными оборотами.
|
|
489
|
+
- `own` у проводок — автор операции или автор действия; у вышестоящего места и BOSS `own`/`place` расширяются до места/подразделения. Причина: проводку регистрирует не всегда автор документа, а руководителю «свои» подчинённого бесполезны.
|
|
490
|
+
- Выбор места записи — в окне нового объекта, а не в шапке списка; фильтр подразделения — отдельно, в шапке. Причина: «от кого пишу» и «что смотрю» — разные вопросы; продавец двух отделов смотрит оба, а документ создаёт от одного.
|
|
491
|
+
- Поиск по реестру виртуального справочника и чтение его объектов — по видимости реестра, а не состава. Причина: Р7 — новый покупатель должен находиться, даже если он клиент другого подразделения, иначе появятся дубли.
|
|
492
|
+
- Тип `$data` (файл данных с формой-редактором) остаётся; `save_file('x.data')` теперь — точка дня в зоне роли, как у точечных типов. Причина: тип общий, не учётный; его судьба — отдельное решение.
|
|
493
|
+
- `import_objects` пишет только в листья справочников и операций ядра; неизвестные колонки не пишутся (список в ответе), колонка `time` — дата операции; таблица помечается чужим текстом до проверки класса. Причина: ядро отвергает лишние поля, а пометка R15 не должна зависеть от места отказа.
|
|
494
|
+
- Правка расширения в форме состава — только для текущего состава (без даты), новая версия действует с момента сохранения. Причина: правка «в прошлом» меняла бы текущее значение незаметно для того, кто смотрит прошлую дату.
|
|
495
|
+
- Клик по операции в журнале открывает класс операций, а не саму операцию. Причина: операция — запись SQLite без пути в дереве; её окно — в форме объектов класса.
|
|
496
|
+
|
|
497
|
+
- `CID` демо-классов — короткие имена (`cat.items`, `acc.41`, `op.sales.sale`, `unit.sales`), в `target` и `account` — они, в `LINKS` мест — пути папок. Причина: Р12 — счета и справочники не рвутся при переименовании папки, а `LINKS` и `get_item` работают по путям.
|
|
498
|
+
- Клиенты — сальдо счёта 62, поставщики — 60, сотрудники — группа счетов «Кадры» (работают + в отпуске), «В отпуске» — только субсчёт отпуска. Причина: отпуск не должен убирать человека из ведомости; клиент, закрывший долг, выпадает из состава (правило Р7), выбор через поиск по реестру возвращает его.
|
|
499
|
+
- Договор — поле операции, а не аналитика счетов 60/62. Причина: сальдо по договорам в демо не нужно, а обязательная аналитика усложнила бы каждую проводку по расчётам.
|
|
500
|
+
- Проводка хранит одно количество на обе стороны, поэтому тара при фасовке идёт через счёт 20 (Дт 20 Кт 41 в штуках, затем Дт 41 Кт 20 суммой). Причина: количество масла в литрах и тары в штуках нельзя записать в одной проводке.
|
|
501
|
+
- Тара и топливо учитываются на 41 вместе с товаром (счёт 10 убран). Причина: поступление товара одно и проводит на 41, а раздельные счета требовали бы определять вид номенклатуры в выражении.
|
|
502
|
+
- Себестоимость списания — `unit_cost` (скользящая средняя на дату операции), ручное поле строки переопределяет. Причина: решение пользователя; ФИФО по партиям не нужен, пока партия необязательна. Цена тары входит в стоимость фасованного масла (155 за литр вместо 150), это учёт, а не ошибка.
|
|
503
|
+
- `unit_cost` без остатка — ошибка, а не 0; запасное значение — последний аргумент (излишек при инвентаризации, топливо без остатка — по нормативу). Причина: молчаливый ноль занижает себестоимость, как незаданная ставка — налог.
|
|
504
|
+
- Цена `unit_cost` фиксируется при регистрации; позднее исправление поступления прежние списания не пересчитывает. Причина: проведённая проводка неизменяема (Р1), перепроведение периода — отдельная будущая операция.
|
|
505
|
+
- Каждая аналитика счёта в правиле обязана быть сопоставлена, в том числе необязательная (`batch: 'row.batch'`). Причина: так требует `checkSchema`; пустое значение необязательной аналитики просто пропускается.
|
|
506
|
+
- Места подразделений вложены (`head` → `manager`/`buyer`/`keeper`…): руководитель видит ссылки подчинённого на чтение, подчинённый — свой `own`/`place`. Пользователи на места не назначены. Причина: назначение — дело администратора организации, демо показывает структуру прав.
|
|
507
|
+
|
|
508
|
+
- Шаблон печати — не JS, а выражения `expr.js` с экранированием любого вывода; сырого HTML из данных нет. Причина: данные операций вводят люди и ИИ, форма открывается в окне того же источника.
|
|
509
|
+
- Объект для печати берётся в видимости вызова, формы — по классу объекта, а не класса вызова. Причина: список объектов группы содержит листья с разными шаблонами.
|
|
510
|
+
- Печать только у операций; DOCX отложен (нужна библиотека). Причина: решение пользователя — сначала HTML.
|
|
511
|
+
|
|
512
|
+
- Интерфейс работы с данными — новый, на Lit + Web Awesome (локально, без сборки); формы ODA — временные, после паритета удаляются, проводник ODA остаётся «Конфигуратором». Причина: решение пользователя по плану WORK v2 (25.10); перевод форм ODA на ядро и их отладка в браузере были отступлением от плана.
|
|
513
|
+
|
|
514
|
+
- `noHeader` у блочного поля убирает подпись, а не кнопки; правка в `block.js`, а не отказ от `no-header` в `oda-editor-form`. Причина: подпись в форме уже есть в рамке поля, а кнопки нужны всем блочным полям (таблица, списки, файлы, медиа), не только табличной части.
|
|
515
|
+
|
|
516
|
+
- Оболочка Lit — страница `app` у `$structure`, а не отдельный сайт: ODA-элемент только входит в страницу WORK (вход по ключу, `$item`), а весь интерфейс — Lit в `body`. Причина: вход и сессия остаются общими, а встраивание ODA-чата (день 8) делается через тот же `body`/слот без второй страницы.
|
|
517
|
+
- Меню и права места — один вызов `db_workspace` на подразделении страницы, а не `link_tree`/`places` ODA. Причина: нужны плоские ссылки с `access` и `scope` по местам и описание классов с поддеревьями; `link_tree` отдаёт цепочки для дерева ODA.
|
|
518
|
+
- Меню — описание, а не права: недоступное по ссылке сервер всё равно откажет. Причина: ссылки места — единственный источник прав (Р8), клиент их не пересчитывает.
|
|
519
|
+
- Web Awesome — из `dist-cdn` с явным списком компонентов (`components.js`), без автозагрузчика. Причина: автозагрузчик не видит элементы внутри shadow DOM Lit-компонентов; у Web Awesome внутри свой Lit, у оболочки — `vendor/lit/lit.js` (общих шаблонов нет).
|
|
520
|
+
- Значки — спрайты проекта (`/oda/tools/icons/lib/svg`), а не Font Awesome Web Awesome. Причина: `icon` в `class.js` уже в этих именах, а значки Web Awesome требуют Kit или сети.
|
|
521
|
+
- Контекст (подразделение и место) — в адресе (`#unit=…&place=…`) и localStorage; смена контекста открывает главную. Причина: ссылку можно переслать, а у другого места иное меню — оставаться на экране класса вне меню нельзя.
|
|
522
|
+
- Список, форма и действия — один набор компонентов для справочников и операций, различия задаёт схема и статус (`lifecycle.js`), а не отдельные экраны. Причина: план требует универсальную форму; новый класс в `class.js` сразу получает экран.
|
|
523
|
+
- Состояние списка (поиск, статус, период, фильтры, сортировка, страница) — в адресе, отбор — на сервере. Причина: ссылку можно переслать, возврат из формы возвращает к тому же поиску, а список в тысячи объектов не грузится целиком.
|
|
524
|
+
- Список операций отбирается по подразделению контекста, кроме корня организации. Причина: сводный вид руководителя и объекты без подразделения (пробные) должны быть видны; справочники общие и по подразделению не фильтруются.
|
|
525
|
+
- Форма перед отправкой убирает пустые строки табличных частей. Причина: номера строк в нарушениях сервера (`lines[2].qty`) должны совпадать со строками на экране.
|
|
526
|
+
- Запись и действия идут на лист класса объекта (по `cid` → путь), чтение — на класс списка. Причина: `db_create` требует лист, а `db_preview` без `id` — лист с правилами проводок.
|
|
527
|
+
- «Зарегистрировать» новой операции — создание, затем регистрация; если регистрация отказала, остаётся созданный черновик с ошибкой. Причина: потерять введённое хуже, чем получить лишний черновик.
|
|
528
|
+
- Ошибки по полям разбираются из текста ответа сервера (`parseFieldErrors`), а ответ `db_*` не меняется. Причина: ODA-формы и агент зависят от текущего формата ошибок; менять шлюз ради нового интерфейса не нужно.
|
|
529
|
+
- В `db_read` и `db_preview` добавлено поле `names` (дополнительно, остальной ответ прежний). Причина: форма показывает ссылки названиями без запроса на каждую.
|
|
530
|
+
- Единственная группа слоя в меню показывается своим содержимым (корень слоя — заголовок раздела). Причина: ссылка на `/DATA/CATALOGS` иначе давала бы раздел «Справочники» с единственным пунктом «Справочники».
|
|
531
|
+
|
|
532
|
+
## Блокеры / Открытые вопросы
|
|
533
|
+
- В живой базе остались пробные операции (поступление, тара, фасовка, реализация Р-001 от 20.10) и справочники из `demo-seed`; от проверки формы 25.10 — реализации Т-07842 (проведена) и Т-69789 (черновик).
|
|
534
|
+
- В консоли формы объектов предупреждение `SyntaxError: Unexpected token 'a', "async allo"... is not valid JSON` (было и до правок 25.10): где-то как JSON разбирается исходный текст функции `allowUse`; на работу формы не влияет, не разобрано.
|
|
535
|
+
- `scripts/demo-seed.mjs` на живой `.data/work.db` не запускался (там нет объектов): после запуска нужна проверка форм в браузере.
|
|
536
|
+
- Подразделение «Производство» (`BASE/production`) осталось без CID и мест: в демо дистрибьютора не используется.
|
|
537
|
+
- В полном прогоне `npm test` падают 12 тестов вне этого шага (регистрация и вход, порядок инструментов, lsp, tsc, `inherit-ops` «distributive»); `inherit-ops` падает и без правок демо.
|