ApiLogicServer 15.0.61__py3-none-any.whl → 15.1.0__py3-none-any.whl

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.
Files changed (531) hide show
  1. api_logic_server_cli/api_logic_server.py +4 -3
  2. api_logic_server_cli/api_logic_server_info.yaml +2 -2
  3. api_logic_server_cli/cli.py +2 -2
  4. api_logic_server_cli/database/basic_demo.sqlite +0 -0
  5. api_logic_server_cli/genai/{genai_admin_app.py → genai_react_app.py} +10 -2
  6. api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +321 -2
  7. api_logic_server_cli/prototypes/base/docs/training/logic_bank_api.prompt +27 -0
  8. api_logic_server_cli/prototypes/base/logic/logic_discovery/use_case.py +5 -1
  9. api_logic_server_cli/prototypes/base/test/readme_test.md +395 -0
  10. api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
  11. api_logic_server_cli/prototypes/basic_demo/docs/models-not-code.png +0 -0
  12. api_logic_server_cli/prototypes/basic_demo/docs/runtime engines.png +0 -0
  13. api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
  14. api_logic_server_cli/prototypes/basic_demo/logic/procedural/credit_service.py +204 -0
  15. api_logic_server_cli/prototypes/manager/.github/.copilot-instructions.md +1 -12
  16. api_logic_server_cli/prototypes/manager/.vscode/launch.json +2 -1
  17. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/For_VSCode.dockerfile +10 -0
  18. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/devcontainer.json +64 -0
  19. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/readme.md +1 -0
  20. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/setup.sh +10 -0
  21. api_logic_server_cli/prototypes/manager/samples/basic_demo/.env +4 -0
  22. api_logic_server_cli/prototypes/manager/samples/basic_demo/.github/.copilot-instructions.md +581 -0
  23. api_logic_server_cli/prototypes/manager/samples/basic_demo/.gitignore +9 -0
  24. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/ApiLogicServer.xml +24 -0
  25. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Report_Behave_Logic.xml +24 -0
  26. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Run_Behave.xml +24 -0
  27. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Windows_Run_Behave.xml +24 -0
  28. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run___No_Security.xml +25 -0
  29. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run_docker.xml +59 -0
  30. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/launch.json +314 -0
  31. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/settings.json +40 -0
  32. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/venv_init.sh +64 -0
  33. api_logic_server_cli/prototypes/manager/samples/basic_demo/_config.yml +8 -0
  34. api_logic_server_cli/prototypes/manager/samples/basic_demo/_layouts/redirect.html +15 -0
  35. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/__init__.py +0 -0
  36. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/auto_discovery.py +27 -0
  37. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_discovery.py +97 -0
  38. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_expose_api_models.py +53 -0
  39. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/new_service.py +21 -0
  40. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/newer_service.py +21 -0
  41. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/ontimize_api.py +495 -0
  42. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/order_b2b_service.py +60 -0
  43. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/system.py +77 -0
  44. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/customize_api.py +63 -0
  45. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/expose_api_models.py +52 -0
  46. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/json_encoder.py +17 -0
  47. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/readme_customize_api.md +103 -0
  48. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/api_utils.py +171 -0
  49. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/custom_endpoint.py +1085 -0
  50. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/expression_parser.py +685 -0
  51. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_csv_report.py +41 -0
  52. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_pdf_report.py +215 -0
  53. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/opt_locking.py +158 -0
  54. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/readme.md +225 -0
  55. api_logic_server_cli/prototypes/manager/samples/basic_demo/api_logic_server_run.py +162 -0
  56. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/__init__.py +0 -0
  57. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/activate_logicbank.py +46 -0
  58. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/config.py +772 -0
  59. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/default.env +16 -0
  60. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging-reduced.yml +112 -0
  61. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging.yml +123 -0
  62. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/mypy.ini +25 -0
  63. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/server_setup.py +459 -0
  64. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/api/api_discovery/openapi.py +92 -0
  65. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/config/default.env +13 -0
  66. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/db.sqlite +0 -0
  67. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/models.py +130 -0
  68. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/docs/mcp_learning/mcp_discovery.json +108 -0
  69. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/cocktail-napkin.jpg +0 -0
  70. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/declare_logic.py +106 -0
  71. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/email_request.py +49 -0
  72. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
  73. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/security/declare_security.py +60 -0
  74. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/admin.yaml +162 -0
  75. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/home.js +48 -0
  76. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README.md +17 -0
  77. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README_create_react_app.md +70 -0
  78. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package-lock.json +18469 -0
  79. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package.json +47 -0
  80. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/favicon.ico +0 -0
  81. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/index.html +43 -0
  82. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo192.png +0 -0
  83. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo512.png +0 -0
  84. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/manifest.json +25 -0
  85. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/robots.txt +3 -0
  86. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.css +38 -0
  87. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.js +61 -0
  88. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.test.js +8 -0
  89. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config-reference.js +527 -0
  90. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config.js +527 -0
  91. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer-reference.js +216 -0
  92. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer.js +230 -0
  93. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Item.js +170 -0
  94. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Order.js +207 -0
  95. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Product.js +140 -0
  96. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysEmail.js +157 -0
  97. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysMcp.js +110 -0
  98. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/app_loader.js +24 -0
  99. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.css +13 -0
  100. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.js +17 -0
  101. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/logo.svg +1 -0
  102. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +5 -0
  103. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  104. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +25 -0
  105. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  106. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +116 -0
  107. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +116 -0
  108. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  109. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +11 -0
  110. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  111. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  112. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  113. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  114. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +9 -0
  115. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/reportWebVitals.js +13 -0
  116. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/setupTests.js +5 -0
  117. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/__init__.py +0 -0
  118. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/alembic_run.py +98 -0
  119. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/env.py +78 -0
  120. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/readme_alembic.md +36 -0
  121. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/script.py.mako +24 -0
  122. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +34 -0
  123. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/readme.md +1 -0
  124. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic.ini +103 -0
  125. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/authentication_db.sqlite +0 -0
  126. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/bind_dbs.py +25 -0
  127. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/customize_models.py +19 -0
  128. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/authentication_models.py +183 -0
  129. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/auto_discovery.py +27 -0
  130. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db.sqlite +0 -0
  131. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db_debug/db_debug.py +90 -0
  132. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_db.sqlite +0 -0
  133. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_models.py +58 -0
  134. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/models.py +132 -0
  135. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/system/SAFRSBaseX.py +139 -0
  136. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/alp_init.py +40 -0
  137. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/readme.md +13 -0
  138. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/response2code.py +148 -0
  139. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/test_data_preamble.py +83 -0
  140. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.Dockerfile +65 -0
  141. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.sql +112 -0
  142. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_postgres.sql +57 -0
  143. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-azure/azure-deploy.sh +98 -0
  144. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose-dev-local.yml +38 -0
  145. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose.sh +34 -0
  146. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.dockerfile +20 -0
  147. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.sh +67 -0
  148. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/env.list +35 -0
  149. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/run_image.sh +23 -0
  150. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/docker-compose-standard-image.yml +33 -0
  151. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/env.list +55 -0
  152. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
  153. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.trace.db +236 -0
  154. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-realm.json +1807 -0
  155. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-users-0.json +24 -0
  156. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-realm.json +1953 -0
  157. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-users-0.json +23 -0
  158. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
  159. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-dev-network.yml +31 -0
  160. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-nginx.yml +48 -0
  161. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose.yml +24 -0
  162. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-realm.json +1898 -0
  163. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-users-0.json +319 -0
  164. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-realm.json +1953 -0
  165. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-users-0.json +23 -0
  166. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/cert.pem +25 -0
  167. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/key.pem +28 -0
  168. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/nginx.conf +73 -0
  169. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_nginx.txt +0 -0
  170. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_no_nginx.txt +0 -0
  171. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/auth_provider.py +80 -0
  172. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/unused-docker-compose-keycloak.sh +13 -0
  173. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/python-anywhere/python_anywhere_wsgi.py +116 -0
  174. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/readme-devops.md +31 -0
  175. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +14 -0
  176. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/graphics/readme.md +12 -0
  177. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic/readme.md +19 -0
  178. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic_suggestions/readme_logic_suggestions.md +3 -0
  179. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp.prompt +39 -0
  180. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp_schema.json +30 -0
  181. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/models-not-code.png +0 -0
  182. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/runtime engines.png +0 -0
  183. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/system-creation-vibe.md +158 -0
  184. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_1_context.prompt.md +43 -0
  185. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_2_functionality.prompt.md +69 -0
  186. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_3_architecture.prompt.md +29 -0
  187. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_bank_api.prompt +342 -0
  188. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_example.py +41 -0
  189. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_map.prompt.md +13 -0
  190. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_tree.prompt.md +10 -0
  191. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_consumer.py +60 -0
  192. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_producer.py +127 -0
  193. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_readme.md +3 -0
  194. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_context_results.txt +142 -0
  195. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_discovery_response.json +150 -0
  196. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_request.prompt +46 -0
  197. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_schema.txt +47 -0
  198. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response.json +34 -0
  199. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
  200. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_client_executor.py +545 -0
  201. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_server_discovery.json +9 -0
  202. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/readme-mcp.md +9 -0
  203. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +394 -0
  204. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_producer.py +172 -0
  205. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_readme.md +67 -0
  206. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/OrderB2BMapper.py +54 -0
  207. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
  208. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/FlaskKafka.py +105 -0
  209. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/RowDictMapper.py +416 -0
  210. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/api/api_discovery/order_b2b.py +92 -0
  211. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/database/db.sqlite +0 -0
  212. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/docs/er_diagram.png +0 -0
  213. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py +36 -0
  214. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py +30 -0
  215. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/logic/declare_logic.py +147 -0
  216. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/ui/admin/admin.yaml +175 -0
  217. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
  218. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declare_logic.py +81 -0
  219. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/load_verify_rules.py +217 -0
  220. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/app_integration.py +23 -0
  221. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/auto_discovery.py +52 -0
  222. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/check_credit.py +44 -0
  223. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/mcp_client_executor_request.py +50 -0
  224. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/readme_logic_discovery.md +9 -0
  225. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/use_case.py +31 -0
  226. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/credit_service.py +204 -0
  227. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
  228. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
  229. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/readme_logic.md +249 -0
  230. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme.md +495 -0
  231. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_project.md +43 -0
  232. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_standard.md +492 -0
  233. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_vibe.md +353 -0
  234. api_logic_server_cli/prototypes/manager/samples/basic_demo/requirements.txt +3 -0
  235. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.ps1 +30 -0
  236. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.sh +55 -0
  237. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/__init__.py +0 -0
  238. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/__init__.py +0 -0
  239. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/abstract_authentication_provider.py +34 -0
  240. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/keycloak/auth_provider.py +238 -0
  241. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider.py +161 -0
  242. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider_no_swagger.py +98 -0
  243. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/sql/auth_provider.py +127 -0
  244. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/declare_security.py +49 -0
  245. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/readme_security.md +16 -0
  246. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authentication.py +129 -0
  247. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authorization.py +473 -0
  248. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/custom_swagger.json +62 -0
  249. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/__init__.py +0 -0
  250. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/__init__.py +0 -0
  251. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_logic_report.py +256 -0
  252. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_run.py +64 -0
  253. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/about.feature +12 -0
  254. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +20 -0
  255. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/test_utils.py +133 -0
  256. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
  257. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +4 -0
  258. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +75 -0
  259. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +1180 -0
  260. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/basic/server_test.py +33 -0
  261. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/readme_test.md +395 -0
  262. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/__init__.py +0 -0
  263. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin.yaml +173 -0
  264. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin_loader.py +217 -0
  265. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/authentication_admin.yaml +99 -0
  266. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/home.js +48 -0
  267. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/mcp_admin.yaml +53 -0
  268. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.browserslistrc +12 -0
  269. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.dockerignore +47 -0
  270. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.editorconfig +16 -0
  271. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.eslintrc.json +51 -0
  272. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.gitignore +47 -0
  273. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/README.md +42 -0
  274. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/angular.json +206 -0
  275. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/app_model.yaml +303 -0
  276. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/docker-compose-ontimize.yml +54 -0
  277. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/protractor.conf.js +32 -0
  278. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.e2e-spec.ts +23 -0
  279. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.po.ts +11 -0
  280. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/tsconfig.json +13 -0
  281. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/karma.conf.js +32 -0
  282. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/nginx/nginx.conf +29 -0
  283. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/ngsw-config.json +29 -0
  284. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package-lock.json +22651 -0
  285. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package.json +69 -0
  286. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app-routing.module.ts +25 -0
  287. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.html +1 -0
  288. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.scss +1 -0
  289. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.spec.ts +35 -0
  290. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.ts +9 -0
  291. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.config.ts +43 -0
  292. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.module.ts +37 -0
  293. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login-routing.module.ts +12 -0
  294. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.html +58 -0
  295. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.scss +155 -0
  296. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.ts +81 -0
  297. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.module.ts +18 -0
  298. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.theme.scss +51 -0
  299. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer-routing.module.ts +37 -0
  300. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer.module.ts +19 -0
  301. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +90 -0
  302. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
  303. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +32 -0
  304. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.html +44 -0
  305. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
  306. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.ts +23 -0
  307. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.html +26 -0
  308. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
  309. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.ts +18 -0
  310. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item-routing.module.ts +30 -0
  311. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item.module.ts +19 -0
  312. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.html +72 -0
  313. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
  314. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.ts +32 -0
  315. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.html +55 -0
  316. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
  317. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.ts +23 -0
  318. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.html +60 -0
  319. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
  320. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.ts +18 -0
  321. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order-routing.module.ts +37 -0
  322. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order.module.ts +19 -0
  323. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.html +114 -0
  324. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
  325. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.ts +32 -0
  326. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.html +48 -0
  327. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
  328. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.ts +23 -0
  329. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.html +43 -0
  330. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
  331. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.ts +18 -0
  332. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product-routing.module.ts +37 -0
  333. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product.module.ts +19 -0
  334. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.html +91 -0
  335. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
  336. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.ts +32 -0
  337. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.html +35 -0
  338. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
  339. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.ts +23 -0
  340. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.html +20 -0
  341. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
  342. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.ts +18 -0
  343. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about-routing.module.ts +13 -0
  344. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.html +39 -0
  345. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.scss +35 -0
  346. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.ts +17 -0
  347. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.module.ts +18 -0
  348. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.theme.scss +14 -0
  349. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home-routing.module.ts +17 -0
  350. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.html +1 -0
  351. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.scss +3 -0
  352. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.ts +21 -0
  353. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.module.ts +18 -0
  354. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-routing.module.ts +32 -0
  355. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-theme.scss +56 -0
  356. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.html +8 -0
  357. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.scss +1 -0
  358. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.ts +20 -0
  359. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.module.ts +22 -0
  360. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings-routing.module.ts +14 -0
  361. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.html +14 -0
  362. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.scss +44 -0
  363. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.ts +46 -0
  364. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.module.ts +18 -0
  365. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.html +1 -0
  366. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
  367. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +16 -0
  368. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.html +1 -0
  369. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
  370. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.ts +16 -0
  371. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.html +1 -0
  372. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
  373. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.ts +16 -0
  374. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.html +1 -0
  375. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
  376. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.ts +16 -0
  377. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.menu.config.ts +45 -0
  378. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.services.config.ts +5 -0
  379. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/constant.ts +4 -0
  380. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/shared.module.ts +15 -0
  381. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/.gitkeep +0 -0
  382. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/app.scss +20 -0
  383. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/loader.css +173 -0
  384. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/en.json +44 -0
  385. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/es.json +42 -0
  386. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize128.png +0 -0
  387. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize16.png +0 -0
  388. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize256.png +0 -0
  389. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize32.png +0 -0
  390. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize48.png +0 -0
  391. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize64.png +0 -0
  392. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize72.png +0 -0
  393. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize96.png +0 -0
  394. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/github.png +0 -0
  395. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/login_bg.png +0 -0
  396. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image-transparent.png +0 -0
  397. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image.png +0 -0
  398. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize.png +0 -0
  399. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize_web_log.png +0 -0
  400. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.png +0 -0
  401. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.svg +1 -0
  402. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.png +0 -0
  403. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.svg +1 -0
  404. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/user_profile.png +0 -0
  405. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/domchange.js +110 -0
  406. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/keyboard.js +24 -0
  407. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.prod.ts +11 -0
  408. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.ts +15 -0
  409. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/favicon.ico +0 -0
  410. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/index.html +30 -0
  411. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/main.ts +15 -0
  412. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/manifest.webmanifest +59 -0
  413. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/polyfills.ts +66 -0
  414. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/styles.scss +1 -0
  415. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/test.ts +16 -0
  416. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.app.json +18 -0
  417. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.json +25 -0
  418. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.spec.json +18 -0
  419. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/andrew.jpg +0 -0
  420. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/anne.jpg +0 -0
  421. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/janet.jpg +0 -0
  422. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/laura.jpg +0 -0
  423. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/margaret.jpg +0 -0
  424. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/michael.jpg +0 -0
  425. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/nancy.jpg +0 -0
  426. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/robert.jpg +0 -0
  427. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/steven.jpg +0 -0
  428. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/beverages.gif +0 -0
  429. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/cereals.gif +0 -0
  430. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/condiments.gif +0 -0
  431. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/confections.gif +0 -0
  432. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/diary.gif +0 -0
  433. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/meat.gif +0 -0
  434. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/produce.gif +0 -0
  435. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/seafood.gif +0 -0
  436. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README.md +16 -0
  437. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README_create_react_app.md +70 -0
  438. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package-lock.json +18469 -0
  439. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package.json +47 -0
  440. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/favicon.ico +0 -0
  441. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/index.html +43 -0
  442. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo192.png +0 -0
  443. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo512.png +0 -0
  444. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/manifest.json +25 -0
  445. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/robots.txt +3 -0
  446. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.css +38 -0
  447. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.js +80 -0
  448. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.test.js +8 -0
  449. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Config.js +527 -0
  450. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Customer.js +218 -0
  451. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Item.js +190 -0
  452. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Order.js +189 -0
  453. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Product.js +159 -0
  454. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/app_loader.js +24 -0
  455. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.css +13 -0
  456. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.js +17 -0
  457. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/logo.svg +1 -0
  458. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +5 -0
  459. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  460. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +25 -0
  461. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  462. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.js +116 -0
  463. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +116 -0
  464. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  465. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +11 -0
  466. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  467. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  468. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  469. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  470. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +9 -0
  471. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/reportWebVitals.js +13 -0
  472. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/setupTests.js +5 -0
  473. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README.md +20 -0
  474. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README_create_react_app.md +72 -0
  475. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package-lock.json +18469 -0
  476. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package.json +47 -0
  477. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/product-cards.png +0 -0
  478. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/favicon.ico +0 -0
  479. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/index.html +43 -0
  480. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo192.png +0 -0
  481. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo512.png +0 -0
  482. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/manifest.json +25 -0
  483. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/robots.txt +3 -0
  484. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.css +38 -0
  485. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.js +80 -0
  486. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.test.js +8 -0
  487. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Config.js +527 -0
  488. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Customer.js +218 -0
  489. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Item.js +190 -0
  490. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Order.js +189 -0
  491. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Product.js +241 -0
  492. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/app_loader.js +24 -0
  493. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.css +13 -0
  494. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.js +17 -0
  495. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/logo.svg +1 -0
  496. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +5 -0
  497. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  498. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +25 -0
  499. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +25 -0
  500. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +116 -0
  501. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +116 -0
  502. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +7 -0
  503. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +11 -0
  504. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  505. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  506. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  507. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  508. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +9 -0
  509. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/reportWebVitals.js +13 -0
  510. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/setupTests.js +5 -0
  511. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/bar_chart.jinja +64 -0
  512. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/content.html +3 -0
  513. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/py.py +121 -0
  514. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/readme_venv.md +20 -0
  515. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/requirements-no-cli.txt +33 -0
  516. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv-linux.sh +28 -0
  517. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.ps1 +21 -0
  518. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.sh +28 -0
  519. api_logic_server_cli/prototypes/manager/samples/dbs/readme_dbs.md +4 -4
  520. api_logic_server_cli/prototypes/manager/samples/readme_samples.md +13 -6
  521. api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -2
  522. api_logic_server_cli/prototypes/nw/test/readme_test_nw.md +224 -0
  523. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/METADATA +1 -1
  524. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/RECORD +528 -24
  525. api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +0 -58
  526. api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +0 -15
  527. api_logic_server_cli/prototypes/nw/test/readme_test.md +0 -13
  528. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/WHEEL +0 -0
  529. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/entry_points.txt +0 -0
  530. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/licenses/LICENSE +0 -0
  531. {apilogicserver-15.0.61.dist-info → apilogicserver-15.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,295 @@
1
+ # Declarative vs. Procedural Business Logic: A Comprehensive Comparison
2
+
3
+ <br>
4
+
5
+ ## Foreword
6
+
7
+ This document presents a real-world A/B comparison of two approaches to implementing the **same business logic requirements.** We asked AI to generate both a **procedural** implementation using conventional code, and a **declarative** implementation using the LogicBank rules engine.
8
+
9
+ This experiment highlights fundamental differences between the two approaches, and what they mean for building reliable, maintainable systems. It's important, because business logic typically represents *nearly half the effort* in database projects.
10
+
11
+ When asked to produce logic, AI (by itself) defaults to procedural code — because that’s all it knows. This study uncovered two critical problems with that approach:
12
+ 1. **Quality:** The AI-generated procedural code contained subtle but serious bugs, even for just five rules—falling far short of basic reliability.
13
+ 2. **Maintainability:** The procedural implementation exploded to over 200 lines — more than 40X the size of its declarative equivalent — creating “Franken-Code” that is brittle, opaque, and costly to maintain.
14
+
15
+ By contrast, the declarative approach was error free, and 5 Python statements.
16
+
17
+ The answer isn’t to reject AI. Its speed and simplicity are transformative. The key is to **teach AI about declarative rules** so it can produce concise, expressive rules instead of hundreds of lines of brittle procedural code. These rules are then executed by an **automated runtime engine** (like LogicBank), ensuring correctness, scalability, and maintainability — while preserving the velocity that makes AI so valuable.
18
+
19
+ By combining AI with declarative automation, GenAI-Logic delivers the best of both worlds: rapid development and enterprise-grade governance.
20
+
21
+ ![visually](declarative-vs-procedural-comparison.png)
22
+
23
+ <br>
24
+
25
+ ### Deeper Dive
26
+
27
+ [GenAI-Logic](https://www.genai-logic.com) is free and open source, so you can install it to explore declarative logic - [click here](https://apilogicserver.github.io/Docs/Install-Express/). This project is available in github - [click here](https://github.com/ApiLogicServer/basic_demo/blob/main/logic/declarative-vs-procedural-comparison.md).
28
+
29
+ <br>
30
+
31
+ ### How this Document Was Created
32
+
33
+ We created this document from the following scenario:
34
+
35
+ 1. Built the `basic_demo` project [as described here](https://apilogicserver.github.io/Docs/Sample-Basic-Demo/).
36
+ 2. We asked CoPilot to **rebuild the logic *using a procedural approach*** - that is, without the LogicBank rule engine (part of GenAI-Logic).
37
+ * Resulting Procedural Logic: `logic/procedural_logic.py`
38
+ * Declarative logic: `logic/declare_logic.py` (*with LogicBank,* [below](#business-requirements))
39
+ 3. We asked Copilot: **what would happen if the orders' customer-id were changed?**
40
+ * Copilot accepted this as a serious error, and made the bug fix.
41
+ 4. We then asked Copilot: *what if the items' product-id were changed?*
42
+ * Copilot became agitated at finding yet another serious bug...
43
+ * It fixed it, and - ***unprompted* - provided the following analysis** of *Declarative vs Procedural Business Logic.*
44
+
45
+ <br>
46
+
47
+ > Here's the Copilot analysis, in its own words.
48
+
49
+ <br>
50
+
51
+
52
+ ## TL;DR
53
+
54
+ **LogicBank declarative rules provide a 44X reduction in code complexity** compared to traditional procedural implementations:
55
+
56
+ | Aspect | LogicBank Declarative | Procedural Code |
57
+ |--------|----------------------|-----------------|
58
+ | **Lines of Code** | 5 lines | 220+ lines |
59
+ | **Complexity** | Simple rule declarations | Complex event handling |
60
+ | **Maintenance** | Self-documenting business logic | Implementation details obscure logic |
61
+ | **Performance** | Built-in optimization & pruning | Multiple queries, N+1 problems |
62
+ | **Error Handling** | Automatic cascading | Manual event management |
63
+ | **Business Alignment** | Rules match requirements | Code doesn't reflect business intent |
64
+
65
+ **Bottom Line**: Declarative business logic eliminates complexity while providing better performance, maintainability, and business alignment.
66
+
67
+ ---
68
+
69
+ ## Overview
70
+
71
+ This document compares two approaches to implementing business logic in enterprise applications:
72
+ - **Declarative Logic** using LogicBank rules
73
+ - **Traditional Procedural Logic** using event handlers
74
+
75
+ The comparison is based on implementing the same business requirements using both approaches in an order management system.
76
+
77
+ ## Business Requirements
78
+
79
+ Our test case implements these common business rules:
80
+
81
+ 1. **Copy unit_price from Product to Item**
82
+ 2. **Calculate Item amount = quantity × unit_price**
83
+ 3. **Calculate Order total = sum of Item amounts**
84
+ 4. **Update Customer balance = sum of unshipped Order totals**
85
+ 5. **Ensure Customer balance ≤ credit_limit**
86
+ 6. **Validate Item quantity > 0**
87
+ 7. **Log order events**
88
+
89
+ ## Code Comparison
90
+
91
+ ### LogicBank Declarative Rules (~5 lines)
92
+
93
+ ```python
94
+ # Business logic expressed as simple, readable rules
95
+ def declare_logic():
96
+ # Rule 1: Copy unit price from product to item
97
+ Rule.copy(derive=Item.unit_price, from_parent=Product.unit_price)
98
+
99
+ # Rule 2: Calculate item amount
100
+ Rule.formula(derive=Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
101
+
102
+ # Rule 3: Calculate order total
103
+ Rule.sum(derive=Order.amount_total, as_sum_of=Item.amount)
104
+
105
+ # Rule 4: Update customer balance
106
+ Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total,
107
+ where=lambda row: row.date_shipped is None)
108
+
109
+ # Rule 5: Validate credit limit
110
+ Rule.constraint(validate=Customer,
111
+ as_condition=lambda row: row.balance <= row.credit_limit,
112
+ error_msg="Customer balance exceeds credit limit")
113
+ ```
114
+
115
+ ### Procedural Implementation (~220 lines)
116
+
117
+ ```python
118
+ # Complex event handling with manual cascading
119
+ def handle_item_update(mapper, connection, target: models.Item):
120
+ session = Session.object_session(target)
121
+
122
+ # Get OLD version to detect changes
123
+ old_item = session.query(models.Item).get(target.id)
124
+
125
+ # Validate quantity
126
+ ProceduralBusinessLogic.validate_item_quantity(target)
127
+
128
+ # Handle product changes (CRITICAL BUG FIX)
129
+ if old_item and old_item.product_id != target.product_id:
130
+ ProceduralBusinessLogic.copy_unit_price_from_product(target, session)
131
+
132
+ # Recalculate item amount
133
+ ProceduralBusinessLogic.calculate_item_amount(target)
134
+
135
+ # Handle order changes (another potential bug!)
136
+ if old_item and old_item.order_id != target.order_id:
137
+ # Update OLD order total
138
+ old_order = session.query(models.Order).get(old_item.order_id)
139
+ if old_order:
140
+ ProceduralBusinessLogic.calculate_order_total(old_order, session)
141
+ # Update old customer balance
142
+ old_customer = session.query(models.Customer).get(old_order.customer_id)
143
+ if old_customer:
144
+ ProceduralBusinessLogic.update_customer_balance(old_customer, session)
145
+ ProceduralBusinessLogic.validate_credit_limit(old_customer)
146
+
147
+ # Update NEW order total
148
+ if target.order_id:
149
+ order = session.query(models.Order).get(target.order_id)
150
+ if order:
151
+ ProceduralBusinessLogic.calculate_order_total(order, session)
152
+ customer = session.query(models.Customer).get(order.customer_id)
153
+ if customer:
154
+ ProceduralBusinessLogic.update_customer_balance(customer, session)
155
+ ProceduralBusinessLogic.validate_credit_limit(customer)
156
+ ```
157
+
158
+ ## Detailed Comparison
159
+
160
+ ### 1. **Code Volume**
161
+ | Aspect | LogicBank | Procedural |
162
+ |--------|-----------|------------|
163
+ | Lines of Code | ~5 | ~220 |
164
+ | Complexity | Simple rule declarations | Complex event handling |
165
+ | Ratio | **44X MORE CONCISE** | Baseline |
166
+
167
+ ### 2. **Maintainability**
168
+
169
+ **LogicBank:**
170
+ - ✅ Rules are self-documenting
171
+ - ✅ Business logic is immediately recognizable
172
+ - ✅ Changes are localized to specific rules
173
+ - ✅ Easy to add new rules without affecting existing ones
174
+
175
+ **Procedural:**
176
+ - ❌ Business logic buried in implementation details
177
+ - ❌ Hard to understand the complete business flow
178
+ - ❌ Changes require understanding entire event chain
179
+ - ❌ Risk of breaking existing functionality
180
+
181
+ ### 3. **Error Handling & Edge Cases**
182
+
183
+ **LogicBank:**
184
+ - ✅ Automatic handling of all change scenarios
185
+ - ✅ Built-in transaction rollback
186
+ - ✅ No need to manually track old/new values
187
+ - ✅ Automatic cascade management
188
+
189
+ **Procedural:**
190
+ - ❌ Manual handling of every edge case
191
+ - ❌ Comments like "CRITICAL BUG FIX" indicate complexity
192
+ - ❌ Must manually track old values for comparison
193
+ - ❌ Easy to miss scenarios (product changes, order moves, etc.)
194
+
195
+ ### 4. **Performance**
196
+
197
+ **LogicBank:**
198
+ - ✅ **Pruning**: Rules only fire when dependent attributes change
199
+ - ✅ **Optimization**: Uses SQL "adjustment" updates vs full recalculations
200
+ - ✅ **Minimal SQL**: Optimized query patterns
201
+ - ✅ **No N+1 problems**: Intelligent batching
202
+
203
+ **Procedural:**
204
+ - ❌ Multiple queries per operation
205
+ - ❌ Potential N+1 problems
206
+ - ❌ Full recalculations even for minor changes
207
+ - ❌ No automatic optimization
208
+
209
+ ### 5. **Debugging & Observability**
210
+
211
+ **LogicBank:**
212
+ - ✅ Clear rule execution logs
213
+ - ✅ Shows rule chains and dependencies
214
+ - ✅ Easy to trace business logic flow
215
+ - ✅ Built-in logging with row state changes
216
+
217
+ **Procedural:**
218
+ - ❌ Hard to trace through event handlers
219
+ - ❌ Must manually add logging
220
+ - ❌ Difficult to understand execution flow
221
+ - ❌ Error messages don't relate to business rules
222
+
223
+ ### 6. **Testing**
224
+
225
+ **LogicBank:**
226
+ - ✅ Test individual rules independently
227
+ - ✅ Clear rule execution reports
228
+ - ✅ Behave testing integration
229
+ - ✅ Rules map directly to test scenarios
230
+
231
+ **Procedural:**
232
+ - ❌ Must test entire event chain
233
+ - ❌ Hard to isolate specific logic
234
+ - ❌ Complex test setup required
235
+ - ❌ Brittle tests that break with changes
236
+
237
+ ### 7. **Business Alignment**
238
+
239
+ **LogicBank:**
240
+ - ✅ Rules read like business requirements
241
+ - ✅ Business users can understand the logic
242
+ - ✅ Direct mapping from requirements to code
243
+ - ✅ Self-documenting business policies
244
+
245
+ **Procedural:**
246
+ - ❌ Implementation details obscure business logic
247
+ - ❌ Business users cannot read the code
248
+ - ❌ No clear mapping from requirements
249
+ - ❌ Business logic scattered across handlers
250
+
251
+ ## Real-World Impact
252
+
253
+ ### Development Time
254
+ - **LogicBank**: Write rules once, they work everywhere
255
+ - **Procedural**: Must consider every possible scenario upfront
256
+
257
+ ### Risk Management
258
+ - **LogicBank**: Automatic handling reduces risk of bugs
259
+ - **Procedural**: High risk of missing edge cases
260
+
261
+ ### Team Productivity
262
+ - **LogicBank**: New team members can quickly understand rules
263
+ - **Procedural**: Requires deep understanding of event system
264
+
265
+ ### Business Agility
266
+ - **LogicBank**: Easy to modify rules as business changes
267
+ - **Procedural**: Changes require extensive testing and validation
268
+
269
+ ## Conclusion
270
+
271
+ The comparison demonstrates that **LogicBank provides a 44X reduction in code complexity** while delivering:
272
+
273
+ - **Better Maintainability**: Rules are self-documenting and easy to modify
274
+ - **Higher Quality**: Automatic handling eliminates common bugs
275
+ - **Better Performance**: Built-in optimizations and pruning
276
+ - **Business Alignment**: Rules directly express business requirements
277
+ - **Faster Development**: Write less code, get more functionality
278
+
279
+ ### The LogicBank Advantage
280
+
281
+ > **"Logic is declarative, not procedural"**
282
+
283
+ LogicBank represents a fundamental shift from asking **"How do I implement this?"** to **"What do I want to happen?"**
284
+
285
+ This declarative approach:
286
+ 1. **Eliminates the complexity** of manual event handling
287
+ 2. **Reduces maintenance burden** through automatic rule management
288
+ 3. **Improves business alignment** with readable, requirements-based rules
289
+ 4. **Accelerates development** with dramatically less code
290
+
291
+ The evidence is clear: **Declarative business logic is not just more concise—it's fundamentally superior for enterprise application development.**
292
+
293
+ ---
294
+
295
+ *This comparison is based on actual implementations in the API Logic Server project, demonstrating real-world benefits of declarative business logic.*
@@ -0,0 +1,249 @@
1
+ This describes how to use Logic; for more information, [see here](https://apilogicserver.github.io/Docs/Logic-Why).
2
+
3
+ > What is Logic: Multi-table Derivation and Constraint Rules, Extensible with Python
4
+ <br>Rules are:
5
+ <br>1. **Declared** in your IDE - 40X more concise
6
+ <br>2. **Activated** on server start
7
+ <br>3. **Executed** - *automatically* - on updates (using SQLAlchemy events)
8
+ <br>4. **Debugged** in your IDE, and with the console log
9
+ <br>For more on rules, [click here](https://apilogicserver.github.io/Docs/Logic-Why/).
10
+
11
+ &nbsp;
12
+
13
+ ## 🚀 Quick Start, using the `basic_demo` sample database
14
+
15
+ You can provide prompts like this to CoPilot. This is a good approach for new users:
16
+
17
+ ```text title="Declare Logic in Natural Language"
18
+ Create Business Logic for Use Case = Check Credit:
19
+ 1. The Customer's balance is less than the credit limit
20
+ 2. The Customer's balance is the sum of the Order amount_total where date_shipped is null
21
+ 3. The Order's amount_total is the sum of the Item amount
22
+ 4. The Item amount is the quantity * unit_price
23
+ 5. The Item unit_price is copied from the Product unit_price
24
+
25
+ Use case: App Integration
26
+ 1. Send the Order to Kafka topic 'order_shipping' if the date_shipped is not None.
27
+ ```
28
+
29
+ Basic process:
30
+ 1. Create a file such as `logic/logic_discovery/check_credit.py` (e.g., copy from `use_case.py`).
31
+ 2. Paste the prompt above into CoPilot - use `docs/training` to generate logic
32
+ 3. Paste the generated logic into `logic/logic_discovery/check_credit.py`
33
+
34
+ From the Natural Language, Copilot will create Python rules (you can also create these directly using code completion):
35
+ ```python
36
+ if os.environ.get("WG_PROJECT"):
37
+ # Inside WG: Load rules from docs/expprt/export.json
38
+ load_verify_rules()
39
+ else:
40
+ # Outside WG: load declare_logic function
41
+ from logic.logic_discovery.auto_discovery import discover_logic
42
+ discover_logic()
43
+
44
+ # Logic from GenAI: (or, use your IDE w/ code completion)
45
+ from database.models import Product, Order, Item, Customer, SysEmail
46
+
47
+ # Ensure the customer's balance is less than their credit limit
48
+ Rule.constraint(validate=Customer, as_condition=lambda row: row.balance <= row.credit_limit, error_msg="Customer balance ({row.balance}) exceeds credit limit ({row.credit_limit})")
49
+
50
+ # Derive the customer's balance as the sum of order totals where not yet shipped.
51
+ Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total, where=lambda row: row.date_shipped is None)
52
+
53
+ # Derive the order's total amount from the sum of item amounts.
54
+ Rule.sum(derive=Order.amount_total, as_sum_of=Item.amount)
55
+
56
+ # Calculate item amount based on quantity and unit price.
57
+ Rule.formula(derive=Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
58
+
59
+ # Copy unit price from product to item.
60
+ Rule.copy(derive=Item.unit_price, from_parent=Product.unit_price)
61
+
62
+ # Send order details to Kafka if order is shipped.
63
+ Rule.after_flush_row_event(on_class=Order, calling=kafka_producer.send_row_to_kafka, if_condition=lambda row: row.date_shipped is not None, with_args={'topic': 'order_shipping'})
64
+
65
+ # End Logic from GenAI
66
+ ```
67
+
68
+ ## Natural Language vs. IDE
69
+
70
+ If you are using WebGenAI, you can specify rules in Natural Language. You can also augment them in the IDE using code completion. There are some important usage guidelines.
71
+
72
+ > You should generally not alter any files in the `wg_rules` directory. For more information, see [WebGenAI](https://apilogicserver.github.io/Docs/WebGenAI/), and [WebGenAI Logic](https://apilogicserver.github.io/Docs/WebGenAI-CLI.md#natural-language-logic).
73
+
74
+ &nbsp;
75
+
76
+ ## Using Discovery
77
+
78
+ You can declare logic in `declare_logic.py`,
79
+ but that can lead to a lot of rules in 1 file.
80
+
81
+ A *best practice* is to create logic files in `logic/logic_discovery`,
82
+ named after the use case (e.g., `check_credit.py`).
83
+
84
+ The easiest way to to copy/paste `use_case.py` to a new file, then
85
+ add your logic either by Natural Language (use your Coding Assistant, such as CoPilot),
86
+ or your IDE's code completion.
87
+
88
+ <br>
89
+
90
+ ## Examples
91
+ Examples from tutorial project:
92
+ * Examples drawn from [tutorial project](https://github.com/ApiLogicServer/demo/blob/main/logic/declare_logic.py)
93
+ * Use Shift + "." to view in project mode
94
+
95
+ You can [find the rules here](https://apilogicserver.github.io/Docs/Logic). Below, we explore the syntax of 3 typical rules.
96
+
97
+ &nbsp;
98
+
99
+ ### 1. Multi-Table Derivations
100
+
101
+ This declares the Customer.Balance as the sum of the unshipped Order.AmountTotal:
102
+
103
+ ```python
104
+ Rule.sum(derive=models.Customer.Balance,
105
+ as_sum_of=models.Order.AmountTotal,
106
+ where=lambda row: row.ShippedDate is None)
107
+ ```
108
+ It means the rule engine **watches** for these changes:
109
+ * Order inserted/deleted, or
110
+ * AmountTotal or ShippedDate or CustomerID changes
111
+
112
+ Iff changes are detected, the engine **reacts** by *adjusting* the Customer.Balance. SQLs are [optimized](#declarative-logic-important-notes).
113
+
114
+ This would **chain** to check the Customers' Constraint rule, described below.
115
+
116
+ &nbsp;
117
+
118
+ ### 2. Constraints: lambda or function
119
+
120
+ Constraints are multi-field conditions which must be true for transactions to succeed (else an exception is raised). You can express the condition as a lambda or a function:
121
+
122
+ **As a lambda:**
123
+ ```python
124
+ Rule.constraint(validate=models.Customer,
125
+ as_condition=lambda row: row.Balance <= row.CreditLimit, # parent references are supported
126
+ error_msg="balance ({row.Balance}) exceeds credit ({row.CreditLimit})")
127
+ ```
128
+
129
+ **Or, as a function:**
130
+ ```python
131
+ def check_balance(row: models.Customer, old_row: models.Customer, logic_row: LogicRow):
132
+ if logic_row.ins_upd_dlt != "dlt": # see also: logic_row.old_row
133
+ return row.Balance <= row.CreditLimit
134
+ else:
135
+ return True
136
+
137
+ Rule.constraint(validate=models.Customer,
138
+ calling=check_balance,
139
+ error_msg=f"balance ({row.Balance}) exceeds credit ({row.CreditLimit})")
140
+ ```
141
+
142
+ &nbsp;
143
+
144
+ ### 3. Row Events: Extensible with Python
145
+
146
+ Events are procedural Python code, providing extensibility for declarative rules:
147
+ ```python
148
+ def congratulate_sales_rep(row: models.Order, old_row: models.Order, logic_row: LogicRow):
149
+ pass # event code here - sending email, messages, etc.
150
+
151
+ Rule.commit_row_event(on_class=models.Order, calling=congratulate_sales_rep)
152
+ ```
153
+ Note there are multiple kinds of events, so you can control whether they run before or after rule execution. For more information, [see here](https://apilogicserver.github.io/Docs/Logic-Type-Constraint).
154
+
155
+ &nbsp;
156
+
157
+ ## LogicRow: old_row, verb, etc
158
+
159
+ A key argument to functions is `logic_row`:
160
+
161
+ * **Wraps row and old_row,** plus methods for insert, update and delete - rule enforcement
162
+
163
+ * **Additional instance variables:** ins_upd_dlt, nest_level, session, etc.
164
+
165
+ * **Helper Methods:** are_attributes_changed, set_same_named_attributes, get_parent_logic_row(role_name), get_derived_attributes, log, is_inserted, etc
166
+
167
+ Here is an example:
168
+
169
+ ```python
170
+ """
171
+ STATE TRANSITION LOGIC, using old_row
172
+ """
173
+ def raise_over_20_percent(row: models.Employee, old_row: models.Employee, logic_row: LogicRow):
174
+ if logic_row.ins_upd_dlt == "upd" and row.Salary > old_row.Salary:
175
+ return row.Salary >= Decimal('1.20') * old_row.Salary
176
+ else:
177
+ return True
178
+
179
+ Rule.constraint(validate=models.Employee,
180
+ calling=raise_over_20_percent,
181
+ error_msg="{row.LastName} needs a more meaningful raise")
182
+ ```
183
+
184
+ Note the `log` method, which enables you to write row/old_row into the log with a short message:
185
+
186
+ ```python
187
+ logic_row.log("no manager for this order's salesrep")
188
+ ```
189
+
190
+ &nbsp;
191
+
192
+ ## Declarative Logic: Important Notes
193
+
194
+ Logic *declarative*, which differs from conventional *procedural* logic:
195
+
196
+ 1. **Automatic Invocation:** you don't call the rules; they execute in response to updates (via SQLAlchemy events).
197
+
198
+ 2. **Automatic Ordering:** you don't order the rules; execution order is based on system-discovered depencencies.
199
+
200
+ 3. **Automatic Optimizations:** logic is optimized to reduce SQLs.
201
+
202
+ * Rule execution is *pruned* if dependent attributes are not altered
203
+ * SQL is optimized, e.g., `sum` rules operate by *adjustment*, not expensive SQL `select sum`
204
+
205
+ These simplify maintenance / iteration: you can be sure new logic is always called, in the correct order.
206
+
207
+ &nbsp;
208
+
209
+ ## Debugging
210
+
211
+ Debug rules using **system-generated logic log** and your **IDE debugger**; for more information, [see here](https://apilogicserver.github.io/Docs/Logic-Use).
212
+
213
+ &nbsp;
214
+
215
+ ### Using the debugger
216
+
217
+ Use the debugger as shown below. Note you can stop in lambda functions.
218
+
219
+ ![Logic Debugger](https://apilogicserver.github.io/Docs/images/logic/logic-debug.png)
220
+
221
+ &nbsp;
222
+
223
+ ### Logic Log
224
+
225
+ Logging is performed using standard Python logging, with a logger named `logic_logger`. Use `info` for tracing, and `debug` for additional information (e.g., all declared rules are logged).
226
+
227
+ In addition, the system logs all rules that fire, to aid in debugging. Referring the the screen shot above:
228
+
229
+ * Each line represents a rule execution, showing row state (old/new values), and the _{reason}_ that caused the update (e.g., client, sum adjustment)
230
+ * Log indention shows multi-table chaining
231
+
232
+ &nbsp;
233
+
234
+ ## How Logic works
235
+
236
+ *Activation* occurs in `api_logic_server_run.py`:
237
+ ```python
238
+ LogicBank.activate(session=session, activator=declare_logic, constraint_event=constraint_handler)
239
+ ```
240
+
241
+ This installs the rule engine as a SQLAlchemy event listener (`before_flush`). So, Logic *runs* automatically, in response to transaction commits (typically via the API).
242
+
243
+ Rules plug into SQLAlchemy events, and execute as follows:
244
+
245
+ | Logic Phase | Why It Matters |
246
+ |:-----------------------------|:---------------------|
247
+ | **Watch** for changes at the attribute level | Performance - Automatic Attribute-level Pruning |
248
+ | **React** by recomputing value | Ensures Reuse - Invocation is automatic<br>Derivations are optimized (e.g. *adjustment updates* - not aggregate queries) |
249
+ | **Chain** to other referencing data | Simplifies Maintenance - ordering is automatic<br>Multi-table logic automation |