monkeybrain-runtime 1.0.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 (838) hide show
  1. monkeybrain_runtime-1.0.0.dist-info/METADATA +76 -0
  2. monkeybrain_runtime-1.0.0.dist-info/RECORD +838 -0
  3. monkeybrain_runtime-1.0.0.dist-info/WHEEL +5 -0
  4. monkeybrain_runtime-1.0.0.dist-info/entry_points.txt +3 -0
  5. monkeybrain_runtime-1.0.0.dist-info/top_level.txt +2 -0
  6. services/__init__.py +8 -0
  7. services/agentos/__init__.py +0 -0
  8. services/agentos/main.py +1 -0
  9. services/assets/helpers/__init__.py +12 -0
  10. services/assets/helpers/device.py +59 -0
  11. services/assets/helpers/equipment.py +179 -0
  12. services/assets/helpers/instruments.py +72 -0
  13. services/assets/helpers/machines.py +183 -0
  14. services/assets/helpers/materials.py +76 -0
  15. services/assets/helpers/parts.py +116 -0
  16. services/assets/helpers/plc.py +134 -0
  17. services/assets/helpers/tags.py +108 -0
  18. services/assets/helpers/tools.py +101 -0
  19. services/assets/main.py +75 -0
  20. services/assets/models/__init__.py +12 -0
  21. services/assets/models/device.py +79 -0
  22. services/assets/models/equipment.py +222 -0
  23. services/assets/models/instruments.py +85 -0
  24. services/assets/models/machines.py +230 -0
  25. services/assets/models/material.py +266 -0
  26. services/assets/models/parts.py +96 -0
  27. services/assets/models/plc.py +264 -0
  28. services/assets/models/tags.py +76 -0
  29. services/assets/models/tools.py +179 -0
  30. services/assets/routers/__init__.py +12 -0
  31. services/assets/routers/classes.py +65 -0
  32. services/assets/routers/device.py +86 -0
  33. services/assets/routers/equipment.py +145 -0
  34. services/assets/routers/families.py +61 -0
  35. services/assets/routers/instruments.py +70 -0
  36. services/assets/routers/machines.py +136 -0
  37. services/assets/routers/materials.py +105 -0
  38. services/assets/routers/parts.py +130 -0
  39. services/assets/routers/plc.py +94 -0
  40. services/assets/routers/subclasses.py +68 -0
  41. services/assets/routers/tags.py +138 -0
  42. services/assets/routers/tools.py +113 -0
  43. services/auth/helpers/__init__.py +13 -0
  44. services/auth/helpers/approval_decisions.py +261 -0
  45. services/auth/helpers/audit_elasticsearch_sync.py +350 -0
  46. services/auth/helpers/departments.py +53 -0
  47. services/auth/helpers/graph_store.py +848 -0
  48. services/auth/helpers/influx_store.py +280 -0
  49. services/auth/helpers/me.py +33 -0
  50. services/auth/helpers/nats_consumer.py +618 -0
  51. services/auth/helpers/nats_store.py +242 -0
  52. services/auth/helpers/permissions.py +62 -0
  53. services/auth/helpers/roles.py +87 -0
  54. services/auth/helpers/store.py +54 -0
  55. services/auth/helpers/team_members.py +155 -0
  56. services/auth/helpers/teams.py +87 -0
  57. services/auth/helpers/tokens.py +71 -0
  58. services/auth/helpers/users.py +119 -0
  59. services/auth/helpers/websocket_broadcast.py +41 -0
  60. services/auth/main.py +88 -0
  61. services/auth/models/__init__.py +12 -0
  62. services/auth/models/departments.py +55 -0
  63. services/auth/models/login.py +20 -0
  64. services/auth/models/permissions.py +61 -0
  65. services/auth/models/roles.py +53 -0
  66. services/auth/models/session.py +26 -0
  67. services/auth/models/teamMembers.py +59 -0
  68. services/auth/models/teams.py +56 -0
  69. services/auth/models/users.py +77 -0
  70. services/auth/routers/__init__.py +14 -0
  71. services/auth/routers/auth.py +3839 -0
  72. services/auth/routers/departments.py +84 -0
  73. services/auth/routers/integration_config.py +703 -0
  74. services/auth/routers/me.py +28 -0
  75. services/auth/routers/permissions.py +96 -0
  76. services/auth/routers/roles.py +139 -0
  77. services/auth/routers/session.py +224 -0
  78. services/auth/routers/team_members.py +152 -0
  79. services/auth/routers/teams.py +112 -0
  80. services/auth/routers/users.py +131 -0
  81. services/auth/routers/websocket_events.py +247 -0
  82. services/batch_execution/__init__.py +19 -0
  83. services/batch_execution/pipeline_triggers/__init__.py +53 -0
  84. services/batch_execution/pipeline_triggers/pipeline_parameter_adjuster.py +440 -0
  85. services/batch_execution/pipeline_triggers/pipeline_trigger_engine.py +445 -0
  86. services/batch_execution/pipeline_triggers/re_evaluation_queue.py +341 -0
  87. services/batch_execution/pipeline_triggers/test_phase3_implementation.py +553 -0
  88. services/batch_execution/pipeline_triggers/workflow_reevaluator.py +367 -0
  89. services/batch_execution/smoke_test_e2e_feedback_loop.py +704 -0
  90. services/batch_execution/workflow_executor.py +478 -0
  91. services/changeover/helpers/__init__.py +11 -0
  92. services/changeover/helpers/changeover.py +87 -0
  93. services/changeover/helpers/changeover_common.py +55 -0
  94. services/changeover/helpers/changeover_events.py +66 -0
  95. services/changeover/helpers/changeover_kpis.py +33 -0
  96. services/changeover/helpers/changeover_matrix.py +60 -0
  97. services/changeover/helpers/changeover_procedures.py +164 -0
  98. services/changeover/helpers/changeover_windows.py +96 -0
  99. services/changeover/main.py +52 -0
  100. services/changeover/models/__init__.py +11 -0
  101. services/changeover/models/changeover.py +73 -0
  102. services/changeover/models/changeover_events.py +142 -0
  103. services/changeover/models/changeover_kpis.py +75 -0
  104. services/changeover/models/changeover_matrix.py +63 -0
  105. services/changeover/models/changeover_procedures.py +108 -0
  106. services/changeover/models/changeover_tasks.py +87 -0
  107. services/changeover/models/changeover_windows.py +72 -0
  108. services/changeover/routers/__init__.py +9 -0
  109. services/changeover/routers/changeover_events.py +127 -0
  110. services/changeover/routers/changeover_kpis.py +80 -0
  111. services/changeover/routers/changeover_matrix.py +80 -0
  112. services/changeover/routers/changeover_procedures.py +118 -0
  113. services/changeover/routers/changeover_windows.py +98 -0
  114. services/common/__init__.py +2 -0
  115. services/common/approval_chains.py +648 -0
  116. services/common/auth.py +56 -0
  117. services/common/cdc.py +52 -0
  118. services/common/compat.py +217 -0
  119. services/common/compliance.py +562 -0
  120. services/common/config.py +134 -0
  121. services/common/cors.py +17 -0
  122. services/common/data_transformation.py +195 -0
  123. services/common/db.py +577 -0
  124. services/common/embeddings.py +97 -0
  125. services/common/event_reducers.py +194 -0
  126. services/common/event_types.py +51 -0
  127. services/common/integration_ingestion.py +169 -0
  128. services/common/logging.py +204 -0
  129. services/common/models/__init__.py +2 -0
  130. services/common/models/databricks.py +25 -0
  131. services/common/models/enums.py +64 -0
  132. services/common/module_control.py +422 -0
  133. services/common/mongo_cdc_watcher.py +106 -0
  134. services/common/n8n_auth.py +22 -0
  135. services/common/neo4j_mirror.py +1087 -0
  136. services/common/ontology_registry.py +110 -0
  137. services/common/reasoning_traces.py +52 -0
  138. services/common/supply_chain_cdc.py +555 -0
  139. services/common/tracing.py +159 -0
  140. services/common/utils.py +30 -0
  141. services/customers/helpers/__init__.py +8 -0
  142. services/customers/helpers/customer_details.py +64 -0
  143. services/customers/helpers/customer_metadata.py +64 -0
  144. services/customers/helpers/customer_order_metrics.py +67 -0
  145. services/customers/helpers/customer_payment_data.py +67 -0
  146. services/customers/main.py +50 -0
  147. services/customers/models/__init__.py +8 -0
  148. services/customers/models/customer_details.py +42 -0
  149. services/customers/models/customer_metadata.py +97 -0
  150. services/customers/models/customer_order_metrics.py +86 -0
  151. services/customers/models/customer_payment_data.py +60 -0
  152. services/customers/routers/__init__.py +8 -0
  153. services/customers/routers/customer_details.py +88 -0
  154. services/customers/routers/customer_metadata.py +88 -0
  155. services/customers/routers/customer_order_metrics.py +88 -0
  156. services/customers/routers/customer_payment_data.py +88 -0
  157. services/documents/__init__.py +1 -0
  158. services/documents/helpers/__init__.py +6 -0
  159. services/documents/helpers/document_metadata.py +569 -0
  160. services/documents/helpers/document_workflows.py +215 -0
  161. services/documents/helpers/report_templates.py +113 -0
  162. services/documents/main.py +49 -0
  163. services/documents/models/__init__.py +6 -0
  164. services/documents/models/document_metadata.py +215 -0
  165. services/documents/models/document_workflows.py +136 -0
  166. services/documents/models/report_templates.py +132 -0
  167. services/documents/routers/__init__.py +6 -0
  168. services/documents/routers/document_metadata.py +654 -0
  169. services/documents/routers/document_workflows.py +146 -0
  170. services/documents/routers/report_templates.py +86 -0
  171. services/events/helpers/__init__.py +5 -0
  172. services/events/helpers/events.py +394 -0
  173. services/events/main.py +40 -0
  174. services/events/models/__init__.py +5 -0
  175. services/events/models/events.py +50 -0
  176. services/events/routers/__init__.py +6 -0
  177. services/events/routers/count_events.py +109 -0
  178. services/events/routers/events.py +75 -0
  179. services/events/seed_events.py +196 -0
  180. services/facilities/helpers/__init__.py +8 -0
  181. services/facilities/helpers/lines.py +74 -0
  182. services/facilities/helpers/locations.py +231 -0
  183. services/facilities/helpers/plants.py +59 -0
  184. services/facilities/helpers/stages.py +110 -0
  185. services/facilities/helpers/workstation.py +213 -0
  186. services/facilities/main.py +60 -0
  187. services/facilities/models/__init__.py +10 -0
  188. services/facilities/models/industrialLine.py +72 -0
  189. services/facilities/models/industrialPlant.py +164 -0
  190. services/facilities/models/locations.py +74 -0
  191. services/facilities/models/stages.py +92 -0
  192. services/facilities/models/worker.py +73 -0
  193. services/facilities/models/workstation.py +117 -0
  194. services/facilities/models/workstation_live_state.py +59 -0
  195. services/facilities/routers/__init__.py +8 -0
  196. services/facilities/routers/bays.py +81 -0
  197. services/facilities/routers/buildings.py +92 -0
  198. services/facilities/routers/floors.py +81 -0
  199. services/facilities/routers/lines.py +154 -0
  200. services/facilities/routers/locations.py +208 -0
  201. services/facilities/routers/plant.py +203 -0
  202. services/facilities/routers/rooms.py +81 -0
  203. services/facilities/routers/stages.py +152 -0
  204. services/facilities/routers/workstation.py +173 -0
  205. services/file/backup.py +71 -0
  206. services/file/main.py +45 -0
  207. services/file/recieve.py +54 -0
  208. services/file/send.py +55 -0
  209. services/file/src/core/config.py +90 -0
  210. services/file/src/core/keycloak.py +152 -0
  211. services/file/src/core/logging_config.py +9 -0
  212. services/file/src/core/security.py +33 -0
  213. services/file/src/helpers/cad_conversion.py +331 -0
  214. services/file/src/helpers/helpers.py +825 -0
  215. services/file/src/routes/cad_conversion.py +26 -0
  216. services/file/src/routes/files.py +136 -0
  217. services/file/src/routes/presigned.py +154 -0
  218. services/file/src/services/websocket.py +293 -0
  219. services/floor_layout/helpers/__init__.py +8 -0
  220. services/floor_layout/helpers/bays.py +92 -0
  221. services/floor_layout/helpers/buildings.py +54 -0
  222. services/floor_layout/helpers/floors.py +65 -0
  223. services/floor_layout/helpers/rooms.py +76 -0
  224. services/floor_layout/main.py +52 -0
  225. services/floor_layout/models/__init__.py +8 -0
  226. services/floor_layout/models/bays.py +65 -0
  227. services/floor_layout/models/buildings.py +52 -0
  228. services/floor_layout/models/floors.py +45 -0
  229. services/floor_layout/models/rooms.py +61 -0
  230. services/floor_layout/routers/__init__.py +9 -0
  231. services/floor_layout/routers/bays.py +143 -0
  232. services/floor_layout/routers/buildings.py +116 -0
  233. services/floor_layout/routers/floors.py +89 -0
  234. services/floor_layout/routers/locations.py +80 -0
  235. services/floor_layout/routers/rooms.py +134 -0
  236. services/inventory/helpers/__init__.py +13 -0
  237. services/inventory/helpers/cycle_counts.py +124 -0
  238. services/inventory/helpers/inventory_allocations.py +134 -0
  239. services/inventory/helpers/inventory_item_counts.py +114 -0
  240. services/inventory/helpers/inventory_item_quantities.py +114 -0
  241. services/inventory/helpers/inventory_items.py +103 -0
  242. services/inventory/helpers/inventory_stage_outputs.py +134 -0
  243. services/inventory/helpers/inventory_transactions.py +112 -0
  244. services/inventory/helpers/stock_adjustment_requests.py +101 -0
  245. services/inventory/helpers/warehouse_cycle_counts.py +133 -0
  246. services/inventory/helpers/warehouse_locations.py +213 -0
  247. services/inventory/helpers/warehouse_regulated_records.py +123 -0
  248. services/inventory/main.py +62 -0
  249. services/inventory/models/__init__.py +17 -0
  250. services/inventory/models/cycle_counts.py +99 -0
  251. services/inventory/models/inventory_allocations.py +121 -0
  252. services/inventory/models/inventory_common.py +65 -0
  253. services/inventory/models/inventory_enums.py +21 -0
  254. services/inventory/models/inventory_item_count.py +65 -0
  255. services/inventory/models/inventory_item_quantity.py +82 -0
  256. services/inventory/models/inventory_items.py +168 -0
  257. services/inventory/models/inventory_responses.py +44 -0
  258. services/inventory/models/inventory_stage_outputs.py +96 -0
  259. services/inventory/models/inventory_state.py +15 -0
  260. services/inventory/models/inventory_transactions.py +80 -0
  261. services/inventory/models/stock_adjustment_requests.py +109 -0
  262. services/inventory/models/warehouse_cycle_counts.py +119 -0
  263. services/inventory/models/warehouse_location_models.py +708 -0
  264. services/inventory/models/warehouse_regulated_records.py +358 -0
  265. services/inventory/routers/__init__.py +13 -0
  266. services/inventory/routers/cycle_counts.py +106 -0
  267. services/inventory/routers/inventory_allocations.py +125 -0
  268. services/inventory/routers/inventory_item_counts.py +105 -0
  269. services/inventory/routers/inventory_item_quantities.py +105 -0
  270. services/inventory/routers/inventory_items.py +109 -0
  271. services/inventory/routers/inventory_stage_outputs.py +122 -0
  272. services/inventory/routers/inventory_transactions.py +96 -0
  273. services/inventory/routers/stock_adjustment_requests.py +124 -0
  274. services/inventory/routers/warehouse_cycle_counts.py +124 -0
  275. services/inventory/routers/warehouse_locations.py +426 -0
  276. services/inventory/routers/warehouse_regulated_records.py +273 -0
  277. services/iot/helpers/__init__.py +8 -0
  278. services/iot/helpers/ble_device.py +87 -0
  279. services/iot/helpers/mqtt_bridge.py +115 -0
  280. services/iot/helpers/sensor_readings.py +63 -0
  281. services/iot/helpers/sensors.py +77 -0
  282. services/iot/helpers/servers.py +72 -0
  283. services/iot/helpers/uwb_device.py +95 -0
  284. services/iot/main.py +53 -0
  285. services/iot/models/__init__.py +8 -0
  286. services/iot/models/ble_device.py +118 -0
  287. services/iot/models/sensors.py +256 -0
  288. services/iot/models/servers.py +206 -0
  289. services/iot/models/uwb_device.py +106 -0
  290. services/iot/routers/__init__.py +8 -0
  291. services/iot/routers/ble_device.py +110 -0
  292. services/iot/routers/sensors.py +144 -0
  293. services/iot/routers/servers.py +141 -0
  294. services/iot/routers/uwb_device.py +148 -0
  295. services/module_control/__init__.py +1 -0
  296. services/module_control/helpers/__init__.py +1 -0
  297. services/module_control/helpers/integration_config.py +243 -0
  298. services/module_control/helpers/security.py +104 -0
  299. services/module_control/main.py +44 -0
  300. services/module_control/models/__init__.py +1 -0
  301. services/module_control/models/module_control.py +65 -0
  302. services/module_control/routers/__init__.py +1 -0
  303. services/module_control/routers/module_control.py +219 -0
  304. services/orders/helpers/__init__.py +11 -0
  305. services/orders/helpers/invoices.py +123 -0
  306. services/orders/helpers/order_customer_metrics.py +61 -0
  307. services/orders/helpers/order_details.py +71 -0
  308. services/orders/helpers/order_metadata.py +61 -0
  309. services/orders/helpers/order_payment_metadata.py +74 -0
  310. services/orders/helpers/orders.py +119 -0
  311. services/orders/helpers/sales_orders.py +136 -0
  312. services/orders/main.py +56 -0
  313. services/orders/models/__init__.py +11 -0
  314. services/orders/models/invoices.py +415 -0
  315. services/orders/models/order_customer_metrics.py +78 -0
  316. services/orders/models/order_details.py +46 -0
  317. services/orders/models/order_metadata.py +60 -0
  318. services/orders/models/order_payment_metadata.py +63 -0
  319. services/orders/models/orders.py +64 -0
  320. services/orders/models/sales_orders.py +130 -0
  321. services/orders/routers/__init__.py +11 -0
  322. services/orders/routers/invoices.py +111 -0
  323. services/orders/routers/order_customer_metrics.py +87 -0
  324. services/orders/routers/order_details.py +87 -0
  325. services/orders/routers/order_metadata.py +87 -0
  326. services/orders/routers/order_payment_metadata.py +87 -0
  327. services/orders/routers/orders.py +74 -0
  328. services/orders/routers/sales_orders.py +111 -0
  329. services/pm/helpers/__init__.py +14 -0
  330. services/pm/helpers/calendar_bookings.py +114 -0
  331. services/pm/helpers/calibration_point.py +110 -0
  332. services/pm/helpers/calibrations.py +196 -0
  333. services/pm/helpers/checklists.py +318 -0
  334. services/pm/helpers/cleaning.py +333 -0
  335. services/pm/helpers/downtime.py +376 -0
  336. services/pm/helpers/kanban_boards.py +186 -0
  337. services/pm/helpers/maintainance.py +177 -0
  338. services/pm/helpers/sop.py +1155 -0
  339. services/pm/helpers/sop_cdc.py +324 -0
  340. services/pm/helpers/weekly_schedules.py +79 -0
  341. services/pm/main.py +62 -0
  342. services/pm/models/__init__.py +14 -0
  343. services/pm/models/calendar_booking.py +82 -0
  344. services/pm/models/calibration_point.py +44 -0
  345. services/pm/models/calibrations.py +167 -0
  346. services/pm/models/checklists.py +117 -0
  347. services/pm/models/cleaning.py +203 -0
  348. services/pm/models/downtime.py +109 -0
  349. services/pm/models/kanban_board.py +178 -0
  350. services/pm/models/maintainanceLog.py +148 -0
  351. services/pm/models/sop.py +152 -0
  352. services/pm/models/weekly_schedule.py +91 -0
  353. services/pm/routers/__init__.py +14 -0
  354. services/pm/routers/calendar_bookings.py +143 -0
  355. services/pm/routers/calibration_point.py +94 -0
  356. services/pm/routers/calibrations.py +232 -0
  357. services/pm/routers/checklists.py +188 -0
  358. services/pm/routers/cleaning.py +127 -0
  359. services/pm/routers/downtime.py +143 -0
  360. services/pm/routers/kanban_boards.py +283 -0
  361. services/pm/routers/maintainance.py +241 -0
  362. services/pm/routers/sop.py +437 -0
  363. services/pm/routers/weekly_schedules.py +108 -0
  364. services/process_definitions/helpers/__init__.py +11 -0
  365. services/process_definitions/helpers/cpp_cqa_registry.py +120 -0
  366. services/process_definitions/helpers/mbmr_templates.py +107 -0
  367. services/process_definitions/helpers/packing_instructions.py +113 -0
  368. services/process_definitions/helpers/process_constraints.py +495 -0
  369. services/process_definitions/helpers/process_corrections.py +279 -0
  370. services/process_definitions/helpers/process_definition.py +996 -0
  371. services/process_definitions/helpers/process_node_catalog.py +786 -0
  372. services/process_definitions/helpers/process_post_checks.py +441 -0
  373. services/process_definitions/helpers/process_pre_checks.py +351 -0
  374. services/process_definitions/helpers/process_steps.py +220 -0
  375. services/process_definitions/main.py +71 -0
  376. services/process_definitions/models/__init__.py +13 -0
  377. services/process_definitions/models/cpp_cqa_registry.py +145 -0
  378. services/process_definitions/models/gxp_change_controls.py +38 -0
  379. services/process_definitions/models/gxp_risk_assessments.py +30 -0
  380. services/process_definitions/models/gxp_validation_evidence.py +33 -0
  381. services/process_definitions/models/mbmr_templates.py +173 -0
  382. services/process_definitions/models/packing_instructions.py +176 -0
  383. services/process_definitions/models/process_constraints.py +159 -0
  384. services/process_definitions/models/process_corrections.py +118 -0
  385. services/process_definitions/models/process_definition.py +685 -0
  386. services/process_definitions/models/process_definition_common.py +48 -0
  387. services/process_definitions/models/process_node_catalog.py +25 -0
  388. services/process_definitions/models/process_post_checks.py +171 -0
  389. services/process_definitions/models/process_pre_checks.py +168 -0
  390. services/process_definitions/models/process_steps.py +170 -0
  391. services/process_definitions/node_services/__init__.py +8 -0
  392. services/process_definitions/node_services/common.py +95 -0
  393. services/process_definitions/node_services/executor.py +499 -0
  394. services/process_definitions/node_services/flow_simulator.py +733 -0
  395. services/process_definitions/node_services/functions.py +193 -0
  396. services/process_definitions/node_services/messaging.py +44 -0
  397. services/process_definitions/node_services/models.py +221 -0
  398. services/process_definitions/node_services/network.py +161 -0
  399. services/process_definitions/node_services/parsers.py +87 -0
  400. services/process_definitions/node_services/sequence.py +95 -0
  401. services/process_definitions/node_services/storage.py +50 -0
  402. services/process_definitions/node_services/webhooks.py +52 -0
  403. services/process_definitions/routers/__init__.py +10 -0
  404. services/process_definitions/routers/cpp_cqa_registry.py +86 -0
  405. services/process_definitions/routers/mbmr_templates.py +84 -0
  406. services/process_definitions/routers/packing_instructions.py +84 -0
  407. services/process_definitions/routers/process_constraints.py +564 -0
  408. services/process_definitions/routers/process_corrections.py +343 -0
  409. services/process_definitions/routers/process_definition.py +992 -0
  410. services/process_definitions/routers/process_post_checks.py +529 -0
  411. services/process_definitions/routers/process_pre_checks.py +435 -0
  412. services/process_definitions/routers/process_steps.py +274 -0
  413. services/procurement/helpers/__init__.py +9 -0
  414. services/procurement/helpers/goods_receipts.py +240 -0
  415. services/procurement/helpers/purchase_order_shipping_information.py +85 -0
  416. services/procurement/helpers/purchase_orders.py +68 -0
  417. services/procurement/helpers/quality_control.py +235 -0
  418. services/procurement/helpers/sampling.py +404 -0
  419. services/procurement/main.py +52 -0
  420. services/procurement/models/__init__.py +9 -0
  421. services/procurement/models/goods_receipts.py +165 -0
  422. services/procurement/models/purchase_orders.py +54 -0
  423. services/procurement/models/quality_control.py +464 -0
  424. services/procurement/models/reinspection_records.py +28 -0
  425. services/procurement/models/sampling.py +262 -0
  426. services/procurement/models/shipping_information.py +51 -0
  427. services/procurement/routers/__init__.py +9 -0
  428. services/procurement/routers/goods_receipts.py +201 -0
  429. services/procurement/routers/purchase_orders.py +106 -0
  430. services/procurement/routers/quality_control.py +386 -0
  431. services/procurement/routers/sampling.py +296 -0
  432. services/procurement/routers/shipping_information.py +97 -0
  433. services/production/__init__.py +1 -0
  434. services/production/agents/__init__.py +5 -0
  435. services/production/agents/batch_planning_agent.py +815 -0
  436. services/production/models/__init__.py +25 -0
  437. services/production/models/batch.py +253 -0
  438. services/products/helpers/__init__.py +10 -0
  439. services/products/helpers/boms.py +100 -0
  440. services/products/helpers/drug_research.py +644 -0
  441. services/products/helpers/product_component.py +168 -0
  442. services/products/helpers/product_inventory.py +221 -0
  443. services/products/helpers/product_pricing.py +123 -0
  444. services/products/helpers/product_utils.py +32 -0
  445. services/products/helpers/products.py +81 -0
  446. services/products/main.py +59 -0
  447. services/products/models/__init__.py +9 -0
  448. services/products/models/drug_research.py +138 -0
  449. services/products/models/product_common.py +60 -0
  450. services/products/models/product_component.py +1028 -0
  451. services/products/models/product_inventory.py +118 -0
  452. services/products/models/product_pricing.py +73 -0
  453. services/products/models/products.py +151 -0
  454. services/products/routers/__init__.py +9 -0
  455. services/products/routers/boms.py +116 -0
  456. services/products/routers/drug_research.py +115 -0
  457. services/products/routers/product_components.py +123 -0
  458. services/products/routers/product_inventory.py +185 -0
  459. services/products/routers/product_pricing.py +136 -0
  460. services/products/routers/products.py +165 -0
  461. services/replenishment/__init__.py +1 -0
  462. services/replenishment/main.py +46 -0
  463. services/replenishment/routers/__init__.py +1 -0
  464. services/replenishment/routers/replenishment.py +20 -0
  465. services/shifts/helpers/__init__.py +7 -0
  466. services/shifts/helpers/shift_templates.py +124 -0
  467. services/shifts/helpers/shifts.py +79 -0
  468. services/shifts/helpers/timesheets.py +137 -0
  469. services/shifts/main.py +48 -0
  470. services/shifts/models/__init__.py +8 -0
  471. services/shifts/models/shift.py +62 -0
  472. services/shifts/models/shift_template.py +82 -0
  473. services/shifts/models/time_range.py +31 -0
  474. services/shifts/models/timesheet.py +196 -0
  475. services/shifts/routers/__init__.py +7 -0
  476. services/shifts/routers/shift_templates.py +97 -0
  477. services/shifts/routers/shifts.py +117 -0
  478. services/shifts/routers/timesheets.py +117 -0
  479. services/shipping/helpers/__init__.py +15 -0
  480. services/shipping/helpers/carrier.py +78 -0
  481. services/shipping/helpers/customs_declaration.py +104 -0
  482. services/shipping/helpers/delivery_note.py +99 -0
  483. services/shipping/helpers/package.py +95 -0
  484. services/shipping/helpers/pallet.py +85 -0
  485. services/shipping/helpers/route.py +93 -0
  486. services/shipping/helpers/shipping_information.py +82 -0
  487. services/shipping/helpers/shipping_provider_details.py +59 -0
  488. services/shipping/helpers/shipping_provider_metadata.py +59 -0
  489. services/shipping/helpers/vehicle.py +85 -0
  490. services/shipping/helpers/waybill.py +86 -0
  491. services/shipping/main.py +64 -0
  492. services/shipping/models/__init__.py +15 -0
  493. services/shipping/models/carrier.py +97 -0
  494. services/shipping/models/customs_declaration.py +138 -0
  495. services/shipping/models/delivery_note.py +163 -0
  496. services/shipping/models/package.py +152 -0
  497. services/shipping/models/pallet.py +137 -0
  498. services/shipping/models/route.py +120 -0
  499. services/shipping/models/shipping_information.py +55 -0
  500. services/shipping/models/shipping_provider_details.py +42 -0
  501. services/shipping/models/shipping_provider_metadata.py +54 -0
  502. services/shipping/models/vehicle.py +129 -0
  503. services/shipping/models/waybill.py +189 -0
  504. services/shipping/routers/__init__.py +15 -0
  505. services/shipping/routers/carrier.py +99 -0
  506. services/shipping/routers/customs_declaration.py +132 -0
  507. services/shipping/routers/delivery_note.py +150 -0
  508. services/shipping/routers/package.py +141 -0
  509. services/shipping/routers/pallet.py +108 -0
  510. services/shipping/routers/route.py +128 -0
  511. services/shipping/routers/shipping_information.py +97 -0
  512. services/shipping/routers/shipping_provider_details.py +80 -0
  513. services/shipping/routers/shipping_provider_metadata.py +80 -0
  514. services/shipping/routers/vehicle.py +117 -0
  515. services/shipping/routers/waybill.py +119 -0
  516. services/suppliers/helpers/__init__.py +13 -0
  517. services/suppliers/helpers/supplier_capabilities.py +58 -0
  518. services/suppliers/helpers/supplier_certifications.py +67 -0
  519. services/suppliers/helpers/supplier_details.py +58 -0
  520. services/suppliers/helpers/supplier_financials.py +58 -0
  521. services/suppliers/helpers/supplier_inventory.py +74 -0
  522. services/suppliers/helpers/supplier_locations.py +60 -0
  523. services/suppliers/helpers/supplier_pricing.py +69 -0
  524. services/suppliers/helpers/supplier_quality.py +69 -0
  525. services/suppliers/helpers/supplier_shipping.py +69 -0
  526. services/suppliers/main.py +60 -0
  527. services/suppliers/models/__init__.py +13 -0
  528. services/suppliers/models/supplier_capabilities.py +70 -0
  529. services/suppliers/models/supplier_certifications.py +64 -0
  530. services/suppliers/models/supplier_details.py +75 -0
  531. services/suppliers/models/supplier_financials.py +69 -0
  532. services/suppliers/models/supplier_inventory.py +76 -0
  533. services/suppliers/models/supplier_locations.py +70 -0
  534. services/suppliers/models/supplier_pricing.py +74 -0
  535. services/suppliers/models/supplier_quality.py +74 -0
  536. services/suppliers/models/supplier_shipping.py +76 -0
  537. services/suppliers/routers/__init__.py +13 -0
  538. services/suppliers/routers/supplier_capabilities.py +88 -0
  539. services/suppliers/routers/supplier_certifications.py +87 -0
  540. services/suppliers/routers/supplier_details.py +83 -0
  541. services/suppliers/routers/supplier_financials.py +83 -0
  542. services/suppliers/routers/supplier_inventory.py +105 -0
  543. services/suppliers/routers/supplier_locations.py +89 -0
  544. services/suppliers/routers/supplier_pricing.py +96 -0
  545. services/suppliers/routers/supplier_quality.py +96 -0
  546. services/suppliers/routers/supplier_shipping.py +96 -0
  547. services/supply_allocation/main.py +46 -0
  548. services/supply_allocation/routers/__init__.py +1 -0
  549. services/supply_allocation/routers/allocation.py +20 -0
  550. services/taxonomy/helpers/__init__.py +7 -0
  551. services/taxonomy/helpers/classes.py +48 -0
  552. services/taxonomy/helpers/family.py +53 -0
  553. services/taxonomy/helpers/subclass.py +58 -0
  554. services/taxonomy/main.py +48 -0
  555. services/taxonomy/models/__init__.py +7 -0
  556. services/taxonomy/models/classes.py +52 -0
  557. services/taxonomy/models/family.py +60 -0
  558. services/taxonomy/models/subclass.py +50 -0
  559. services/taxonomy/routers/__init__.py +7 -0
  560. services/taxonomy/routers/classes.py +78 -0
  561. services/taxonomy/routers/family.py +77 -0
  562. services/taxonomy/routers/subclass.py +82 -0
  563. services/warehouse_execution/__init__.py +1 -0
  564. services/warehouse_execution/main.py +46 -0
  565. services/warehouse_execution/routers/__init__.py +1 -0
  566. services/warehouse_execution/routers/execution.py +21 -0
  567. services/work_order_agent/__init__.py +17 -0
  568. services/work_order_agent/agent/__init__.py +17 -0
  569. services/work_order_agent/agent/work_order_agent.py +658 -0
  570. services/work_order_agent/tracking/__init__.py +101 -0
  571. services/work_order_agent/tracking/event_system.py +182 -0
  572. services/work_order_agent/tracking/state_machine.py +163 -0
  573. services/work_order_agent/tracking/state_machine_integrator.py +295 -0
  574. services/work_order_agent/tracking/test_phase2_implementation.py +302 -0
  575. services/work_order_agent/tracking/time_analysis.py +301 -0
  576. services/work_order_agent/tracking/tracked_work_order.py +255 -0
  577. services/work_order_agent/tracking/work_order_adapter.py +367 -0
  578. services/work_order_agent/tracking/work_order_batch_manager.py +406 -0
  579. services/work_order_agent/tracking/work_order_repository.py +431 -0
  580. services/workorders/helpers/__init__.py +5 -0
  581. services/workorders/helpers/area_room_usage_ledger.py +139 -0
  582. services/workorders/helpers/batch_execution_records.py +265 -0
  583. services/workorders/helpers/batch_release_workflows.py +158 -0
  584. services/workorders/helpers/batch_step_executions.py +145 -0
  585. services/workorders/helpers/equipment_usage_ledger.py +209 -0
  586. services/workorders/helpers/executed_bmr_records.py +170 -0
  587. services/workorders/helpers/executed_bpr_records.py +170 -0
  588. services/workorders/helpers/executed_instruction_evidence.py +155 -0
  589. services/workorders/helpers/ipc_result_records.py +134 -0
  590. services/workorders/helpers/production_batches.py +117 -0
  591. services/workorders/helpers/work_orders.py +367 -0
  592. services/workorders/helpers/yield_reconciliation_records.py +158 -0
  593. services/workorders/main.py +110 -0
  594. services/workorders/models/__init__.py +5 -0
  595. services/workorders/models/area_room_usage_ledger.py +154 -0
  596. services/workorders/models/batch_execution_records.py +575 -0
  597. services/workorders/models/batch_release_workflows.py +190 -0
  598. services/workorders/models/batch_step_executions.py +142 -0
  599. services/workorders/models/equipment_usage_ledger.py +144 -0
  600. services/workorders/models/executed_bmr_records.py +220 -0
  601. services/workorders/models/executed_bpr_records.py +220 -0
  602. services/workorders/models/executed_instruction_evidence.py +128 -0
  603. services/workorders/models/ipc_result_records.py +164 -0
  604. services/workorders/models/production_batches.py +181 -0
  605. services/workorders/models/work_orders.py +255 -0
  606. services/workorders/models/yield_reconciliation_records.py +175 -0
  607. services/workorders/routers/__init__.py +5 -0
  608. services/workorders/routers/area_room_usage_ledger.py +117 -0
  609. services/workorders/routers/batch_execution_records.py +103 -0
  610. services/workorders/routers/batch_release_workflows.py +86 -0
  611. services/workorders/routers/batch_step_executions.py +88 -0
  612. services/workorders/routers/equipment_usage_ledger.py +115 -0
  613. services/workorders/routers/executed_bmr_records.py +86 -0
  614. services/workorders/routers/executed_bpr_records.py +86 -0
  615. services/workorders/routers/executed_instruction_evidence.py +86 -0
  616. services/workorders/routers/ipc_result_records.py +86 -0
  617. services/workorders/routers/production_batches.py +86 -0
  618. services/workorders/routers/work_orders.py +257 -0
  619. services/workorders/routers/yield_reconciliation_records.py +86 -0
  620. src/broca/__init__.py +5 -0
  621. src/broca/agent.py +201 -0
  622. src/cerebellum/__init__.py +0 -0
  623. src/cerebellum/adapter.py +84 -0
  624. src/cerebellum/capabilities/__init__.py +0 -0
  625. src/cerebellum/capabilities/agent/__init__.py +0 -0
  626. src/cerebellum/capabilities/agent/agents.py +65 -0
  627. src/cerebellum/capabilities/ai/__init__.py +0 -0
  628. src/cerebellum/capabilities/ai/providers.py +106 -0
  629. src/cerebellum/capabilities/api/__init__.py +0 -0
  630. src/cerebellum/capabilities/api/graphql.py +35 -0
  631. src/cerebellum/capabilities/api/rest_api.py +45 -0
  632. src/cerebellum/capabilities/api/webhook.py +30 -0
  633. src/cerebellum/capabilities/browser/__init__.py +0 -0
  634. src/cerebellum/capabilities/browser/browsers.py +27 -0
  635. src/cerebellum/capabilities/cloud/__init__.py +0 -0
  636. src/cerebellum/capabilities/cloud/cloud.py +46 -0
  637. src/cerebellum/capabilities/communication/__init__.py +0 -0
  638. src/cerebellum/capabilities/communication/communication.py +62 -0
  639. src/cerebellum/capabilities/database/__init__.py +0 -0
  640. src/cerebellum/capabilities/database/elasticsearch.py +40 -0
  641. src/cerebellum/capabilities/database/influxdb.py +37 -0
  642. src/cerebellum/capabilities/database/mongodb.py +50 -0
  643. src/cerebellum/capabilities/database/neo4j.py +32 -0
  644. src/cerebellum/capabilities/database/redis.py +44 -0
  645. src/cerebellum/capabilities/enterprise/__init__.py +0 -0
  646. src/cerebellum/capabilities/enterprise/opensource.py +180 -0
  647. src/cerebellum/capabilities/enterprise/proprietary.py +313 -0
  648. src/cerebellum/capabilities/event_streaming/__init__.py +0 -0
  649. src/cerebellum/capabilities/event_streaming/streaming.py +38 -0
  650. src/cerebellum/capabilities/infrastructure/__init__.py +0 -0
  651. src/cerebellum/capabilities/infrastructure/infrastructure.py +30 -0
  652. src/cerebellum/capabilities/productivity/__init__.py +0 -0
  653. src/cerebellum/capabilities/productivity/productivity.py +158 -0
  654. src/cerebellum/capabilities/robotics/__init__.py +0 -0
  655. src/cerebellum/capabilities/robotics/robotics.py +124 -0
  656. src/cerebellum/capabilities/runtime/__init__.py +0 -0
  657. src/cerebellum/capabilities/runtime/runtimes.py +92 -0
  658. src/cerebellum/capabilities/search/__init__.py +0 -0
  659. src/cerebellum/capabilities/search/search.py +63 -0
  660. src/cerebellum/capabilities/source_control/__init__.py +0 -0
  661. src/cerebellum/capabilities/source_control/source_control.py +113 -0
  662. src/cerebellum/capabilities/storage/__init__.py +0 -0
  663. src/cerebellum/capabilities/storage/storage.py +94 -0
  664. src/cerebellum/capabilities/workflow/__init__.py +0 -0
  665. src/cerebellum/capabilities/workflow/workflows.py +49 -0
  666. src/cerebellum/capability.py +108 -0
  667. src/cerebellum/config.py +157 -0
  668. src/cerebellum/fallback.py +147 -0
  669. src/cerebellum/fallback_engine.py +121 -0
  670. src/cerebellum/key_manager.py +129 -0
  671. src/cerebellum/keystore.py +179 -0
  672. src/cerebellum/lifecycle.py +54 -0
  673. src/cerebellum/metadata.py +61 -0
  674. src/cerebellum/operator/base.py +25 -0
  675. src/cerebellum/peripheral.py +92 -0
  676. src/cerebellum/registry.py +98 -0
  677. src/cerebellum/resolve_entity_capability.py +259 -0
  678. src/cingulate/benchmark/__init__.py +23 -0
  679. src/cingulate/benchmark/reporter.py +102 -0
  680. src/cingulate/benchmark/runner.py +159 -0
  681. src/cingulate/benchmark/scenario_runner.py +150 -0
  682. src/cingulate/benchmark/validator.py +102 -0
  683. src/cingulate/governance/__init__.py +21 -0
  684. src/cingulate/governance/architecture_validator.py +194 -0
  685. src/cingulate/governance/compliance.py +104 -0
  686. src/cingulate/governance/governance.py +77 -0
  687. src/cingulate/governance/policy_registry.py +91 -0
  688. src/cortex/__init__.py +33 -0
  689. src/cortex/cost.py +71 -0
  690. src/cortex/counterfactual.py +162 -0
  691. src/cortex/digital_twin.py +90 -0
  692. src/cortex/experience.py +83 -0
  693. src/cortex/feedback.py +144 -0
  694. src/cortex/loss.py +116 -0
  695. src/cortex/prediction.py +142 -0
  696. src/cortex/replay.py +130 -0
  697. src/cortex/reward.py +113 -0
  698. src/cortex/simulator.py +102 -0
  699. src/cortex/world_model.py +180 -0
  700. src/cortex/world_model_simulation.py +1591 -0
  701. src/cortex/world_state.py +121 -0
  702. src/cortex/xavier.py +250 -0
  703. src/deepdive/__init__.py +29 -0
  704. src/deepdive/aggregation.py +113 -0
  705. src/deepdive/digital_twin_aggregator.py +128 -0
  706. src/deepdive/elasticsearch_adapter.py +110 -0
  707. src/deepdive/fleet_analytics.py +131 -0
  708. src/deepdive/knowledge_aggregator.py +130 -0
  709. src/homeostasis/__init__.py +19 -0
  710. src/homeostasis/control_plane.py +159 -0
  711. src/introspection/__init__.py +38 -0
  712. src/introspection/alerting.py +142 -0
  713. src/introspection/health.py +101 -0
  714. src/introspection/lemon.py +243 -0
  715. src/introspection/logging.py +147 -0
  716. src/introspection/metrics.py +106 -0
  717. src/introspection/tracing.py +162 -0
  718. src/monkey_brain/__init__.py +1 -0
  719. src/monkey_brain/api/main.py +148 -0
  720. src/monkey_brain/api/models.py +81 -0
  721. src/monkey_brain/api/routes/routes/keys.py +106 -0
  722. src/monkey_brain/api/routes/routes/run.py +169 -0
  723. src/monkey_brain/api/routes/routes/simulate.py +485 -0
  724. src/monkey_brain/dlm/__init__.py +44 -0
  725. src/monkey_brain/dlm/dlm.py +139 -0
  726. src/monkey_brain/dlm/gc.py +115 -0
  727. src/monkey_brain/dlm/lifecycle.py +149 -0
  728. src/monkey_brain/dlm/orphans.py +99 -0
  729. src/monkey_brain/dlm/storage.py +149 -0
  730. src/monkey_brain/dlm/ttl.py +140 -0
  731. src/monkey_brain/documents/__init__.py +0 -0
  732. src/monkey_brain/documents/document_ocr.py +6 -0
  733. src/monkey_brain/kernel/__init__.py +53 -0
  734. src/monkey_brain/kernel/capability_interface.py +144 -0
  735. src/monkey_brain/kernel/classifier/__init__.py +1 -0
  736. src/monkey_brain/kernel/classifier/embed_classifier.py +125 -0
  737. src/monkey_brain/kernel/classifier/intent_examples.py +106 -0
  738. src/monkey_brain/kernel/dag.py +23 -0
  739. src/monkey_brain/kernel/execution_state.py +257 -0
  740. src/monkey_brain/kernel/goal_planner.py +85 -0
  741. src/monkey_brain/kernel/goal_router.py +20 -0
  742. src/monkey_brain/kernel/goals/__init__.py +1 -0
  743. src/monkey_brain/kernel/goals/goal.py +130 -0
  744. src/monkey_brain/kernel/goals/goal_bootstrap.py +38 -0
  745. src/monkey_brain/kernel/goals/goal_classifier.py +132 -0
  746. src/monkey_brain/kernel/goals/goal_registry.py +75 -0
  747. src/monkey_brain/kernel/intents/__init__.py +1 -0
  748. src/monkey_brain/kernel/intents/event_adapter.py +246 -0
  749. src/monkey_brain/kernel/intents/helpers.py +13 -0
  750. src/monkey_brain/kernel/intents/intent_registry.py +705 -0
  751. src/monkey_brain/kernel/intents/intent_router.py +102 -0
  752. src/monkey_brain/kernel/intents/predicates/approval_create.py +9 -0
  753. src/monkey_brain/kernel/intents/predicates/approval_decision.py +9 -0
  754. src/monkey_brain/kernel/intents/predicates/approval_hold.py +9 -0
  755. src/monkey_brain/kernel/intents/predicates/approval_query.py +9 -0
  756. src/monkey_brain/kernel/intents/predicates/batch_close.py +9 -0
  757. src/monkey_brain/kernel/intents/predicates/batch_creation.py +9 -0
  758. src/monkey_brain/kernel/intents/predicates/batch_delete.py +9 -0
  759. src/monkey_brain/kernel/intents/predicates/batch_hold.py +9 -0
  760. src/monkey_brain/kernel/intents/predicates/batch_record.py +9 -0
  761. src/monkey_brain/kernel/intents/predicates/batch_update.py +9 -0
  762. src/monkey_brain/kernel/intents/predicates/change_control.py +49 -0
  763. src/monkey_brain/kernel/intents/predicates/compliance_audit.py +14 -0
  764. src/monkey_brain/kernel/intents/predicates/decision_intelligence.py +9 -0
  765. src/monkey_brain/kernel/intents/predicates/drug_research.py +9 -0
  766. src/monkey_brain/kernel/intents/predicates/fuzzy_match.py +19 -0
  767. src/monkey_brain/kernel/intents/predicates/production_kpi.py +9 -0
  768. src/monkey_brain/kernel/intents/predicates/sop_create.py +9 -0
  769. src/monkey_brain/kernel/intents/predicates/sop_query.py +9 -0
  770. src/monkey_brain/kernel/intents/predicates/sop_update.py +9 -0
  771. src/monkey_brain/kernel/intents/predicates/warehouse_shipping.py +9 -0
  772. src/monkey_brain/kernel/intents/predicates/work_order_create.py +9 -0
  773. src/monkey_brain/kernel/intents/predicates/work_order_delete.py +9 -0
  774. src/monkey_brain/kernel/intents/predicates/work_order_hold.py +9 -0
  775. src/monkey_brain/kernel/intents/predicates/work_order_query.py +9 -0
  776. src/monkey_brain/kernel/intents/predicates/work_order_status.py +9 -0
  777. src/monkey_brain/kernel/intents/predicates/work_order_update.py +9 -0
  778. src/monkey_brain/kernel/intents/predicates/worker.py +9 -0
  779. src/monkey_brain/kernel/intents/telemetry_adapter.py +274 -0
  780. src/monkey_brain/kernel/intents/utils.py +68 -0
  781. src/monkey_brain/kernel/learning.py +98 -0
  782. src/monkey_brain/kernel/llm_explorer.py +188 -0
  783. src/monkey_brain/kernel/loss.py +81 -0
  784. src/monkey_brain/kernel/nlp/__init__.py +1 -0
  785. src/monkey_brain/kernel/nlp/compat.py +23 -0
  786. src/monkey_brain/kernel/nlp/models.py +10 -0
  787. src/monkey_brain/kernel/nlp/question_analyzer.py +203 -0
  788. src/monkey_brain/kernel/nlp/spacy_parser.py +53 -0
  789. src/monkey_brain/kernel/observer.py +97 -0
  790. src/monkey_brain/kernel/parser/__init__.py +3 -0
  791. src/monkey_brain/kernel/parser/ast.py +28 -0
  792. src/monkey_brain/kernel/parser/extractors/__init__.py +11 -0
  793. src/monkey_brain/kernel/parser/extractors/entities.py +21 -0
  794. src/monkey_brain/kernel/parser/extractors/filters.py +16 -0
  795. src/monkey_brain/kernel/parser/extractors/projections.py +36 -0
  796. src/monkey_brain/kernel/parser/extractors/verbs.py +31 -0
  797. src/monkey_brain/kernel/parser/parser.py +57 -0
  798. src/monkey_brain/kernel/parser/rules.py +75 -0
  799. src/monkey_brain/kernel/pipeline.py +44 -0
  800. src/monkey_brain/kernel/planner.py +57 -0
  801. src/monkey_brain/kernel/rl/__init__.py +33 -0
  802. src/monkey_brain/kernel/rl/learner.py +98 -0
  803. src/monkey_brain/kernel/rl/policy.py +254 -0
  804. src/monkey_brain/kernel/rl/reward.py +117 -0
  805. src/monkey_brain/kernel/rl/transition.py +112 -0
  806. src/monkey_brain/persistence/__init__.py +47 -0
  807. src/monkey_brain/persistence/adapters.py +49 -0
  808. src/monkey_brain/persistence/events.py +105 -0
  809. src/monkey_brain/persistence/manager.py +124 -0
  810. src/monkey_brain/persistence/mongodb_adapter.py +91 -0
  811. src/monkey_brain/persistence/redis_adapter.py +93 -0
  812. src/monkey_brain/persistence/reducer.py +111 -0
  813. src/monkey_brain/runtime/__init__.py +49 -0
  814. src/monkey_brain/runtime/depedencies.py +8 -0
  815. src/monkey_brain/runtime/engine.py +183 -0
  816. src/monkey_brain/runtime/message_bus.py +82 -0
  817. src/monkey_brain/runtime/process.py +144 -0
  818. src/monkey_brain/runtime/resource_manager.py +100 -0
  819. src/monkey_brain/runtime/routers.py +8 -0
  820. src/monkey_brain/runtime/runtime.py +199 -0
  821. src/monkey_brain/runtime/scheduler.py +165 -0
  822. src/monkey_brain/runtime/supervisor.py +133 -0
  823. src/monkey_brain/runtime/worker_pool.py +111 -0
  824. src/plasticity/seed/__init__.py +30 -0
  825. src/plasticity/seed/benchmark_generator.py +105 -0
  826. src/plasticity/seed/event_generator.py +122 -0
  827. src/plasticity/seed/scenario_builder.py +134 -0
  828. src/plasticity/seed/seed_data.py +206 -0
  829. src/plasticity/seed/seeder.py +122 -0
  830. src/plasticity/testing/__init__.py +28 -0
  831. src/plasticity/testing/performance.py +131 -0
  832. src/plasticity/testing/profiler.py +255 -0
  833. src/plasticity/testing/reporter.py +84 -0
  834. src/plasticity/testing/runner.py +209 -0
  835. src/sync/__init__.py +12 -0
  836. src/sync/cloud_aggregator.py +63 -0
  837. src/sync/edge_node.py +51 -0
  838. src/sync/sync_manager.py +74 -0
@@ -0,0 +1,415 @@
1
+ from datetime import datetime, timezone
2
+ from enum import Enum
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from bson import ObjectId
6
+ from pydantic import BaseModel, ConfigDict, EmailStr, Field
7
+
8
+
9
+ def utc_now() -> datetime:
10
+ return datetime.now(timezone.utc)
11
+
12
+
13
+ class InvoiceStatus(str, Enum):
14
+ DRAFT = "draft"
15
+ PENDING = "pending"
16
+ SENT = "sent"
17
+ VIEWED = "viewed"
18
+ PAID = "paid"
19
+ PARTIALLY_PAID = "partially_paid"
20
+ OVERDUE = "overdue"
21
+ CANCELLED = "cancelled"
22
+ REFUNDED = "refunded"
23
+
24
+
25
+ class RecurringFrequency(str, Enum):
26
+ DAILY = "daily"
27
+ WEEKLY = "weekly"
28
+ MONTHLY = "monthly"
29
+ QUARTERLY = "quarterly"
30
+ YEARLY = "yearly"
31
+
32
+
33
+ class SendStatus(str, Enum):
34
+ QUEUED = "queued"
35
+ SENT = "sent"
36
+ DELIVERED = "delivered"
37
+ OPENED = "opened"
38
+ CLICKED = "clicked"
39
+ DOWNLOADED = "downloaded"
40
+ FAILED = "failed"
41
+
42
+
43
+ class NoteType(str, Enum):
44
+ INTERNAL = "internal"
45
+ CUSTOMER = "customer"
46
+ TERMS = "terms"
47
+ PAYMENT_INSTRUCTIONS = "payment_instructions"
48
+
49
+
50
+ class SourceType(str, Enum):
51
+ MANUAL = "manual"
52
+ QUOTE = "quote"
53
+ ESTIMATE = "estimate"
54
+ SALES_ORDER = "sales_order"
55
+ RECURRING = "recurring"
56
+ BULK_IMPORT = "bulk_import"
57
+
58
+
59
+ class TaxDetail(BaseModel):
60
+ rate: Optional[str] = None
61
+ amount: Optional[str] = None
62
+
63
+ model_config = ConfigDict(extra="allow")
64
+
65
+
66
+ class Seller(BaseModel):
67
+ name: Optional[str] = None
68
+ address: Optional[str] = None
69
+ gstin_uin: Optional[str] = None
70
+ gstin: Optional[str] = None
71
+ state_name: Optional[str] = None
72
+ state_code: Optional[str] = None
73
+ email: Optional[EmailStr] = None
74
+ phone: Optional[str] = None
75
+
76
+ model_config = ConfigDict(extra="allow")
77
+
78
+
79
+ class Buyer(BaseModel):
80
+ name: Optional[str] = None
81
+ address: Optional[str] = None
82
+ gstin_uin: Optional[str] = None
83
+ gstin: Optional[str] = None
84
+ state_name: Optional[str] = None
85
+ state_code: Optional[str] = None
86
+ email: Optional[EmailStr] = None
87
+ phone: Optional[str] = None
88
+ customer_id: Optional[str] = None
89
+
90
+ model_config = ConfigDict(extra="allow")
91
+
92
+
93
+ class InvoiceDetails(BaseModel):
94
+ invoice_no: Optional[str] = None
95
+ date: Optional[str] = None
96
+ due_date: Optional[str] = None
97
+ payment_terms: Optional[str] = None
98
+ ack_no: Optional[str] = None
99
+ ack_date: Optional[str] = None
100
+ irn: Optional[str] = None
101
+ challan_no: Optional[str] = None
102
+ challan_date: Optional[str] = None
103
+ reverse_charge: Optional[str] = None
104
+ lr_no: Optional[str] = None
105
+ transport: Optional[str] = None
106
+ transport_id: Optional[str] = None
107
+ vehicle_number: Optional[str] = None
108
+ po_number: Optional[str] = None
109
+
110
+ model_config = ConfigDict(extra="allow")
111
+
112
+
113
+ class InvoiceItem(BaseModel):
114
+ sl_no: Optional[str] = None
115
+ si_no: Optional[str] = None
116
+ product_id: Optional[str] = None
117
+ description: Optional[str] = None
118
+ hsn_sac: Optional[str] = None
119
+ quantity: Optional[str] = None
120
+ rate: Optional[str] = None
121
+ per: Optional[str] = None
122
+ discount: Optional[str] = None
123
+ taxable_value: Optional[str] = None
124
+ amount: Optional[str] = None
125
+ cgst: Optional[TaxDetail | Dict[str, Any]] = None
126
+ sgst: Optional[TaxDetail | Dict[str, Any]] = None
127
+ igst: Optional[TaxDetail | Dict[str, Any]] = None
128
+ total: Optional[str] = None
129
+
130
+ model_config = ConfigDict(extra="allow")
131
+
132
+
133
+ class InvoiceTotal(BaseModel):
134
+ taxable_value: Optional[str] = None
135
+ cgst_amount: Optional[str] = None
136
+ sgst_amount: Optional[str] = None
137
+ igst_amount: Optional[str] = None
138
+ total_tax_amount: Optional[str] = None
139
+ grand_total: Optional[str] = None
140
+ total_amount: Optional[str] = None
141
+ total_quantity: Optional[str] = None
142
+ amount_paid: Optional[str] = "0"
143
+ balance_due: Optional[str] = None
144
+
145
+ model_config = ConfigDict(extra="allow")
146
+
147
+
148
+ class BankDetails(BaseModel):
149
+ bank_name: Optional[str] = None
150
+ branch_name: Optional[str] = None
151
+ account_number: Optional[str] = None
152
+ ifsc: Optional[str] = None
153
+
154
+ model_config = ConfigDict(extra="allow")
155
+
156
+
157
+ class InvoiceAttachment(BaseModel):
158
+ id: Optional[str] = None
159
+ file_name: str
160
+ file_url: str
161
+ file_type: Optional[str] = None
162
+ file_size: Optional[int] = None
163
+ category: Optional[str] = None
164
+ uploaded_at: datetime = Field(default_factory=utc_now)
165
+ uploaded_by: Optional[str] = None
166
+
167
+
168
+ class InvoiceNote(BaseModel):
169
+ note_type: NoteType
170
+ content: str
171
+ created_at: datetime = Field(default_factory=utc_now)
172
+ created_by: Optional[str] = None
173
+ updated_at: Optional[datetime] = None
174
+
175
+
176
+ class InvoiceVersion(BaseModel):
177
+ version: int
178
+ data_snapshot: Dict[str, Any]
179
+ changes_summary: Optional[str] = None
180
+ created_at: datetime = Field(default_factory=utc_now)
181
+ created_by: Optional[str] = None
182
+ reason: Optional[str] = None
183
+
184
+
185
+ class InvoiceSendLog(BaseModel):
186
+ sent_at: datetime = Field(default_factory=utc_now)
187
+ to: List[EmailStr]
188
+ cc: List[EmailStr] = Field(default_factory=list)
189
+ bcc: List[EmailStr] = Field(default_factory=list)
190
+ status: SendStatus
191
+ provider_response: Optional[Dict[str, Any]] = None
192
+ opened_at: Optional[datetime] = None
193
+ clicked_at: Optional[datetime] = None
194
+ downloaded_at: Optional[datetime] = None
195
+ delivery_confirmed_at: Optional[datetime] = None
196
+ error_message: Optional[str] = None
197
+ sent_by: Optional[str] = None
198
+
199
+
200
+ class ScheduledSend(BaseModel):
201
+ scheduled_for: datetime
202
+ timezone: str = "UTC"
203
+ to: List[EmailStr]
204
+ cc: List[EmailStr] = Field(default_factory=list)
205
+ bcc: List[EmailStr] = Field(default_factory=list)
206
+ status: str = "queued"
207
+ created_at: datetime = Field(default_factory=utc_now)
208
+ sent_at: Optional[datetime] = None
209
+ cancelled_at: Optional[datetime] = None
210
+
211
+
212
+ class InvoiceShareLink(BaseModel):
213
+ token: str
214
+ expires_at: Optional[datetime] = None
215
+ password_protected: bool = False
216
+ password_hash: Optional[str] = None
217
+ view_count: int = 0
218
+ last_accessed_at: Optional[datetime] = None
219
+ created_at: datetime = Field(default_factory=utc_now)
220
+ created_by: Optional[str] = None
221
+ is_active: bool = True
222
+
223
+
224
+ class RecurringInvoiceConfig(BaseModel):
225
+ frequency: RecurringFrequency
226
+ start_date: datetime
227
+ end_date: Optional[datetime] = None
228
+ occurrences: Optional[int] = None
229
+ occurrences_completed: int = 0
230
+ auto_send: bool = True
231
+ auto_apply_payment_terms: bool = True
232
+ paused: bool = False
233
+ last_generated_at: Optional[datetime] = None
234
+ next_generation_date: Optional[datetime] = None
235
+ notify_before_generation: bool = True
236
+ notification_days_before: int = 3
237
+ allow_preview: bool = True
238
+ allow_edit_before_send: bool = True
239
+
240
+
241
+ class SourceReference(BaseModel):
242
+ source_type: SourceType
243
+ source_id: Optional[str] = None
244
+ source_number: Optional[str] = None
245
+ conversion_date: Optional[datetime] = None
246
+ converted_by: Optional[str] = None
247
+
248
+
249
+ class BulkImportInfo(BaseModel):
250
+ batch_id: str
251
+ import_date: datetime = Field(default_factory=utc_now)
252
+ source_file: str
253
+ row_number: Optional[int] = None
254
+ validation_errors: List[str] = Field(default_factory=list)
255
+
256
+
257
+ class CustomerPortalAccess(BaseModel):
258
+ enabled: bool = True
259
+ customer_user_id: Optional[str] = None
260
+ last_login: Optional[datetime] = None
261
+ login_count: int = 0
262
+
263
+
264
+ class InvoiceTrackingEvent(BaseModel):
265
+ event_type: str
266
+ timestamp: datetime = Field(default_factory=utc_now)
267
+ user_agent: Optional[str] = None
268
+ ip_address: Optional[str] = None
269
+ metadata: Optional[Dict[str, Any]] = None
270
+
271
+
272
+ class Invoice(BaseModel):
273
+ id: Optional[str] = None
274
+ seller: Optional[Seller] = None
275
+ buyer: Optional[Buyer] = None
276
+ invoice_details: Optional[InvoiceDetails] = None
277
+ items: List[InvoiceItem] = Field(default_factory=list)
278
+ total: Optional[InvoiceTotal] = None
279
+ bank_details: Optional[BankDetails] = None
280
+ amount_in_words: Optional[str] = None
281
+ tax_amount_in_words: Optional[str] = None
282
+ declaration: Optional[str] = None
283
+ status: InvoiceStatus = InvoiceStatus.DRAFT
284
+ source_reference: Optional[SourceReference] = None
285
+ bulk_import_info: Optional[BulkImportInfo] = None
286
+ attachments: List[InvoiceAttachment] = Field(default_factory=list)
287
+ notes: List[InvoiceNote] = Field(default_factory=list)
288
+ versions: List[InvoiceVersion] = Field(default_factory=list)
289
+ current_version: int = 1
290
+ send_logs: List[InvoiceSendLog] = Field(default_factory=list)
291
+ scheduled_sends: List[ScheduledSend] = Field(default_factory=list)
292
+ share_links: List[InvoiceShareLink] = Field(default_factory=list)
293
+ tracking_events: List[InvoiceTrackingEvent] = Field(default_factory=list)
294
+ recurring: Optional[RecurringInvoiceConfig] = None
295
+ parent_recurring_invoice_id: Optional[str] = None
296
+ customer_portal_access: Optional[CustomerPortalAccess] = None
297
+ created_at: datetime = Field(default_factory=utc_now)
298
+ updated_at: datetime = Field(default_factory=utc_now)
299
+ sent_at: Optional[datetime] = None
300
+ paid_at: Optional[datetime] = None
301
+ created_by: Optional[str] = None
302
+ updated_by: Optional[str] = None
303
+
304
+ model_config = ConfigDict(
305
+ arbitrary_types_allowed=True,
306
+ extra="allow",
307
+ json_encoders={ObjectId: str, datetime: lambda value: value.isoformat()},
308
+ )
309
+
310
+
311
+ class InvoiceCreate(BaseModel):
312
+ seller: Optional[Seller] = None
313
+ buyer: Optional[Buyer] = None
314
+ invoice_details: Optional[InvoiceDetails] = None
315
+ items: List[InvoiceItem] = Field(default_factory=list)
316
+ total: Optional[InvoiceTotal] = None
317
+ bank_details: Optional[BankDetails] = None
318
+ amount_in_words: Optional[str] = None
319
+ tax_amount_in_words: Optional[str] = None
320
+ declaration: Optional[str] = None
321
+ status: InvoiceStatus = InvoiceStatus.DRAFT
322
+ source_reference: Optional[SourceReference] = None
323
+ recurring: Optional[RecurringInvoiceConfig] = None
324
+ notes: List[InvoiceNote] = Field(default_factory=list)
325
+ attachments: List[InvoiceAttachment] = Field(default_factory=list)
326
+ created_by: Optional[str] = None
327
+
328
+ model_config = ConfigDict(extra="allow")
329
+
330
+
331
+ class InvoiceUpdate(BaseModel):
332
+ seller: Optional[Seller] = None
333
+ buyer: Optional[Buyer] = None
334
+ invoice_details: Optional[InvoiceDetails] = None
335
+ items: Optional[List[InvoiceItem]] = None
336
+ total: Optional[InvoiceTotal] = None
337
+ bank_details: Optional[BankDetails] = None
338
+ amount_in_words: Optional[str] = None
339
+ tax_amount_in_words: Optional[str] = None
340
+ declaration: Optional[str] = None
341
+ status: Optional[InvoiceStatus] = None
342
+ attachments: Optional[List[InvoiceAttachment]] = None
343
+ notes: Optional[List[InvoiceNote]] = None
344
+ recurring: Optional[RecurringInvoiceConfig] = None
345
+ updated_by: Optional[str] = None
346
+
347
+ model_config = ConfigDict(extra="allow")
348
+
349
+
350
+ class BulkSendRequest(BaseModel):
351
+ invoice_ids: List[str]
352
+ to: Optional[List[EmailStr]] = None
353
+ cc: List[EmailStr] = Field(default_factory=list)
354
+ bcc: List[EmailStr] = Field(default_factory=list)
355
+ schedule_for: Optional[datetime] = None
356
+ timezone: str = "UTC"
357
+
358
+
359
+ class ShareLinkRequest(BaseModel):
360
+ invoice_id: str
361
+ expires_in_days: Optional[int] = 30
362
+ password_protected: bool = False
363
+ password: Optional[str] = None
364
+
365
+
366
+ class ScheduledSendRequest(BaseModel):
367
+ invoice_id: str
368
+ scheduled_for: datetime
369
+ timezone: str = "UTC"
370
+ to: List[EmailStr]
371
+ cc: List[EmailStr] = Field(default_factory=list)
372
+ bcc: List[EmailStr] = Field(default_factory=list)
373
+
374
+
375
+ class BulkInvoiceRow(BaseModel):
376
+ seller_name: Optional[str] = None
377
+ buyer_name: Optional[str] = None
378
+ buyer_email: Optional[EmailStr] = None
379
+ invoice_date: Optional[str] = None
380
+ due_date: Optional[str] = None
381
+ items: List[Dict[str, Any]]
382
+ total_amount: Optional[str] = None
383
+
384
+
385
+ class BulkCreateRequest(BaseModel):
386
+ batch_id: str
387
+ invoices: List[BulkInvoiceRow]
388
+ validate_only: bool = False
389
+ auto_send: bool = False
390
+
391
+
392
+ class ConvertToInvoiceRequest(BaseModel):
393
+ source_type: SourceType
394
+ source_id: str
395
+ invoice_date: Optional[str] = None
396
+ due_date: Optional[str] = None
397
+ auto_send: bool = False
398
+ override_data: Optional[Dict[str, Any]] = None
399
+
400
+
401
+ class VersionRestoreRequest(BaseModel):
402
+ invoice_id: str
403
+ version: int
404
+ reason: Optional[str] = None
405
+
406
+
407
+ class InvoiceResponse(Invoice):
408
+ model_config = ConfigDict(from_attributes=True, extra="allow")
409
+
410
+
411
+ class PaginatedInvoiceResponse(BaseModel):
412
+ total: int
413
+ page: int
414
+ page_size: int
415
+ results: List[InvoiceResponse]
@@ -0,0 +1,78 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class CustomerOrderMetrics(BaseModel):
7
+ order_id: str = Field(..., description="Unique identifier for the order", example="ORD123456")
8
+ returns_exchanges_requested: Optional[int] = Field(None, description="Number of items requested for return or exchange", example=5)
9
+ backordered_items: Optional[int] = Field(None, description="Number of items that were backordered in the order", example=2)
10
+ shipping_tracking_number: Optional[str] = Field(None, description="Tracking number provided by the shipping carrier", example="12999AA10123456784")
11
+ order_fulfillment_location: Optional[str] = Field(None, description="Location from which the order was fulfilled, for example Warehouse A", example="Warehouse B")
12
+ customs_clearance_status: Optional[str] = Field(None, description="Customs status for international shipments, if applicable", example="Cleared")
13
+ order_handling_time: Optional[int] = Field(None, description="Time taken to handle and prepare the order before shipment in days", example=1)
14
+ shipping_status: Optional[str] = Field(None, description="Current status of the order's shipment, for example In Transit, Delivered, or Pending", example="In Transit")
15
+ order_delivery_time: Optional[int] = Field(None, description="Time taken for the order to be delivered from shipment in days", example=3)
16
+ customer_feedback_score: Optional[int] = Field(None, description="Customer rating or feedback score for the order experience from 1-10", example=8)
17
+ order_quality_rating: Optional[int] = Field(None, description="Rating based on the quality of the received items from 1-5", example=4)
18
+ failed_delivery_attempts: Optional[int] = Field(None, description="Number of failed delivery attempts for the order", example=1)
19
+ damage_defect_rate: Optional[float] = Field(None, description="Percentage of orders with damage or defects reported by the customer", example=2.0)
20
+ order_resolution_time: Optional[int] = Field(None, description="Time taken to resolve any issues in days", example=1)
21
+ customer_service_interaction_count: Optional[int] = Field(None, description="Number of customer service interactions for the order", example=2)
22
+ order_accuracy_rate: Optional[float] = Field(None, description="Percentage of orders that were fulfilled correctly", example=98.0)
23
+ late_shipment_rate: Optional[float] = Field(None, description="Percentage of orders shipped later than the expected date", example=4.0)
24
+ customer_loyalty_index: Optional[float] = Field(None, description="A score indicating the likelihood of the customer returning", example=85.0)
25
+ order_fulfillment_time: Optional[int] = Field(None, description="Total time taken to process an order from placement to delivery in days", example=10)
26
+ lead_time_variability: Optional[str] = Field(None, description="Consistency of lead times for fulfilling orders", example="±2 days")
27
+ cycle_time_for_time_sensitive_orders: Optional[int] = Field(None, description="Time taken to process and fulfill priority orders in days", example=5)
28
+ missed_priority_order_rate: Optional[float] = Field(None, description="Percentage of priority orders not fulfilled within the expected timeframe", example=3.0)
29
+ backlogged_order_rate: Optional[float] = Field(None, description="Percentage of orders delivered after the promised deadline", example=4.0)
30
+ critical_path_completion_rate: Optional[float] = Field(None, description="Percentage of critical path tasks completed on time", example=95.0)
31
+ order_cycle_time: Optional[int] = Field(None, description="Time from order placement to delivery in days", example=12)
32
+ order_fill_rate: Optional[float] = Field(None, description="Percentage of customer orders fully fulfilled on the first attempt", example=99.0)
33
+ perfect_order_rate: Optional[float] = Field(None, description="Percentage of orders delivered without issues", example=96.0)
34
+
35
+
36
+ class CustomerOrderMetricsCreate(CustomerOrderMetrics):
37
+ pass
38
+
39
+
40
+ class CustomerOrderMetricsUpdate(BaseModel):
41
+ returns_exchanges_requested: Optional[int] = None
42
+ backordered_items: Optional[int] = None
43
+ shipping_tracking_number: Optional[str] = None
44
+ order_fulfillment_location: Optional[str] = None
45
+ customs_clearance_status: Optional[str] = None
46
+ order_handling_time: Optional[int] = None
47
+ shipping_status: Optional[str] = None
48
+ order_delivery_time: Optional[int] = None
49
+ customer_feedback_score: Optional[int] = None
50
+ order_quality_rating: Optional[int] = None
51
+ failed_delivery_attempts: Optional[int] = None
52
+ damage_defect_rate: Optional[float] = None
53
+ order_resolution_time: Optional[int] = None
54
+ customer_service_interaction_count: Optional[int] = None
55
+ order_accuracy_rate: Optional[float] = None
56
+ late_shipment_rate: Optional[float] = None
57
+ customer_loyalty_index: Optional[float] = None
58
+ order_fulfillment_time: Optional[int] = None
59
+ lead_time_variability: Optional[str] = None
60
+ cycle_time_for_time_sensitive_orders: Optional[int] = None
61
+ missed_priority_order_rate: Optional[float] = None
62
+ backlogged_order_rate: Optional[float] = None
63
+ critical_path_completion_rate: Optional[float] = None
64
+ order_cycle_time: Optional[int] = None
65
+ order_fill_rate: Optional[float] = None
66
+ perfect_order_rate: Optional[float] = None
67
+
68
+
69
+ class CustomerOrderMetricsResponse(CustomerOrderMetrics):
70
+ class Config:
71
+ from_attributes = True
72
+
73
+
74
+ class PaginatedCustomerOrderMetricsResponse(BaseModel):
75
+ total: int
76
+ page: int
77
+ page_size: int
78
+ results: list[CustomerOrderMetricsResponse]
@@ -0,0 +1,46 @@
1
+ from datetime import datetime, timezone
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ def datetime_now() -> datetime:
8
+ return datetime.now(timezone.utc)
9
+
10
+
11
+ class OrderDetailsModel(BaseModel):
12
+ order_id: str = Field(..., description="Unique identifier for the order")
13
+ order_date: datetime = Field(default_factory=datetime_now)
14
+ order_status: str = Field(
15
+ ...,
16
+ description="Current status of the order, for example Pending, Shipped, Delivered, or Canceled",
17
+ )
18
+ order_type: str = Field(..., description="Type of order, for example Standard, Rush, or Backorder")
19
+ priority_level: Optional[str] = Field(None, description="Priority level of the order, for example High, Medium, or Low")
20
+ shipping_method: Optional[str] = Field(None, description="Shipping method used for the order, for example Ground or Air Freight")
21
+ payment_method: str = Field(..., description="Method used to pay for the order, for example Credit Card or Bank Transfer")
22
+
23
+
24
+ class OrderDetailsCreate(OrderDetailsModel):
25
+ pass
26
+
27
+
28
+ class OrderDetailsUpdate(BaseModel):
29
+ order_date: Optional[datetime] = None
30
+ order_status: Optional[str] = None
31
+ order_type: Optional[str] = None
32
+ priority_level: Optional[str] = None
33
+ shipping_method: Optional[str] = None
34
+ payment_method: Optional[str] = None
35
+
36
+
37
+ class OrderDetailsResponse(OrderDetailsModel):
38
+ class Config:
39
+ from_attributes = True
40
+
41
+
42
+ class PaginatedOrderDetailsResponse(BaseModel):
43
+ total: int
44
+ page: int
45
+ page_size: int
46
+ results: list[OrderDetailsResponse]
@@ -0,0 +1,60 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class OrderMetadata(BaseModel):
7
+ order_id: Optional[str] = Field(None, description="Unique identifier for the order", example="ORD123456")
8
+ customer_segment: Optional[str] = Field(None, description="Segment of the customer, for example Retail, Wholesale, or VIP", example="VIP")
9
+ sales_region: Optional[str] = Field(None, description="Region where the sale occurred, for example North America, Europe, or Asia", example="North America")
10
+ salesperson: Optional[str] = Field(None, description="Name or ID of the salesperson responsible for the sale", example="Jane Smith")
11
+ sales_channel: Optional[str] = Field(None, description="The channel through which the sale occurred, for example Online, In-Store, or Distributor", example="Online")
12
+ customs_declaration_id: Optional[str] = Field(None, description="Customs declaration ID for the shipment", example="CD-98765432")
13
+ total_sales_value: Optional[float] = Field(None, gt=0, description="Total revenue generated from the product", example=200.0)
14
+ discount_applied: Optional[float] = Field(0.0, ge=0, description="Total discount applied to the product", example=20.0)
15
+ net_sales_value: Optional[float] = Field(None, gt=0, description="Revenue after discounts", example=180.0)
16
+ tax_amount: Optional[float] = Field(0.0, ge=0, description="Tax amount applied to the product", example=18.0)
17
+ shipping_charges: Optional[float] = Field(0.0, ge=0, description="Shipping charges for the product, if applicable", example=5.0)
18
+ total_revenue: Optional[float] = Field(None, gt=0, description="Total revenue including tax and shipping charges", example=203.0)
19
+ commission_rate: Optional[float] = Field(0.0, ge=0, le=100, description="Commission rate as a percentage", example=5.0)
20
+ commission_amount: Optional[float] = Field(0.0, ge=0, description="Total commission earned for the product", example=10.0)
21
+ promo_code_used: Optional[bool] = Field(False, description="Indicates whether a promo code was applied", example=True)
22
+ promo_code_value: Optional[float] = Field(0.0, ge=0, description="Value of the promo code discount", example=10.0)
23
+ upsell_or_cross_sell: Optional[str] = Field(None, description="Indicates if the product was part of an upsell or cross-sell strategy", example="Upsell")
24
+ refund_amount: Optional[float] = Field(0.0, ge=0, description="Refund amount issued for the product, if applicable", example=50.0)
25
+
26
+
27
+ class OrderMetadataCreate(OrderMetadata):
28
+ pass
29
+
30
+
31
+ class OrderMetadataUpdate(BaseModel):
32
+ customer_segment: Optional[str] = None
33
+ sales_region: Optional[str] = None
34
+ salesperson: Optional[str] = None
35
+ sales_channel: Optional[str] = None
36
+ customs_declaration_id: Optional[str] = None
37
+ total_sales_value: Optional[float] = Field(None, gt=0)
38
+ discount_applied: Optional[float] = Field(None, ge=0)
39
+ net_sales_value: Optional[float] = Field(None, gt=0)
40
+ tax_amount: Optional[float] = Field(None, ge=0)
41
+ shipping_charges: Optional[float] = Field(None, ge=0)
42
+ total_revenue: Optional[float] = Field(None, gt=0)
43
+ commission_rate: Optional[float] = Field(None, ge=0, le=100)
44
+ commission_amount: Optional[float] = Field(None, ge=0)
45
+ promo_code_used: Optional[bool] = None
46
+ promo_code_value: Optional[float] = Field(None, ge=0)
47
+ upsell_or_cross_sell: Optional[str] = None
48
+ refund_amount: Optional[float] = Field(None, ge=0)
49
+
50
+
51
+ class OrderMetadataResponse(OrderMetadata):
52
+ class Config:
53
+ from_attributes = True
54
+
55
+
56
+ class PaginatedOrderMetadataResponse(BaseModel):
57
+ total: int
58
+ page: int
59
+ page_size: int
60
+ results: list[OrderMetadataResponse]
@@ -0,0 +1,63 @@
1
+ from datetime import datetime, timezone
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ def datetime_now() -> datetime:
8
+ return datetime.now(timezone.utc)
9
+
10
+
11
+ class OrderPaymentMetadata(BaseModel):
12
+ order_id: str = Field(..., description="Unique identifier for the order")
13
+ order_payment_status: Optional[str] = Field(None, description="Current payment status of the order", example="Paid")
14
+ payment_method: Optional[str] = Field(None, description="Method used by the customer to pay for the order", example="Credit Card")
15
+ payment_terms: Optional[str] = Field(None, description="Payment terms agreed upon with the customer", example="Net 30")
16
+ order_payment_due_date: Optional[datetime] = Field(None, description="Date by which payment is due for the order", example="2025-01-20")
17
+ payment_received_date: Optional[datetime] = Field(None, description="Actual date the payment was received", example="2025-01-15")
18
+ payment_amount: Optional[float] = Field(None, description="Total amount paid by the customer for the order", example=1200.0)
19
+ outstanding_payment_amount: Optional[float] = Field(None, description="Remaining balance to be paid on the order", example=0.0)
20
+ payment_overdue_amount: Optional[float] = Field(None, description="Total amount that is overdue for payment", example=150.0)
21
+ early_payment_discount: Optional[bool] = Field(None, description="Indicates whether an early payment discount has been applied", example=True)
22
+ late_payment_penalty: Optional[bool] = Field(None, description="Indicates whether a late payment penalty has been applied", example=True)
23
+ credit_limit_utilization: Optional[float] = Field(None, description="Percentage of the customer's available credit limit utilized", example=80.0)
24
+ customer_payment_history: Optional[str] = Field(None, description="Summary of historical payment behavior", example="Consistently Early")
25
+ payment_dispute_status: Optional[str] = Field(None, description="Indicates whether there is any payment dispute", example="Resolved")
26
+ payment_risk_rating: Optional[str] = Field(None, description="Risk level associated with the payment", example="Low")
27
+ payment_processing_time: Optional[int] = Field(None, description="Time taken for payment to be processed and received in days", example=3)
28
+ payment_approval_status: Optional[str] = Field(None, description="Status of payment approval", example="Approved")
29
+
30
+
31
+ class OrderPaymentMetadataCreate(OrderPaymentMetadata):
32
+ pass
33
+
34
+
35
+ class OrderPaymentMetadataUpdate(BaseModel):
36
+ order_payment_status: Optional[str] = None
37
+ payment_method: Optional[str] = None
38
+ payment_terms: Optional[str] = None
39
+ order_payment_due_date: Optional[datetime] = None
40
+ payment_received_date: Optional[datetime] = None
41
+ payment_amount: Optional[float] = None
42
+ outstanding_payment_amount: Optional[float] = None
43
+ payment_overdue_amount: Optional[float] = None
44
+ early_payment_discount: Optional[bool] = None
45
+ late_payment_penalty: Optional[bool] = None
46
+ credit_limit_utilization: Optional[float] = None
47
+ customer_payment_history: Optional[str] = None
48
+ payment_dispute_status: Optional[str] = None
49
+ payment_risk_rating: Optional[str] = None
50
+ payment_processing_time: Optional[int] = None
51
+ payment_approval_status: Optional[str] = None
52
+
53
+
54
+ class OrderPaymentMetadataResponse(OrderPaymentMetadata):
55
+ class Config:
56
+ from_attributes = True
57
+
58
+
59
+ class PaginatedOrderPaymentMetadataResponse(BaseModel):
60
+ total: int
61
+ page: int
62
+ page_size: int
63
+ results: list[OrderPaymentMetadataResponse]