@alfadocs/ui-kit 0.69.0 → 0.70.0

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 (261) hide show
  1. package/dist/_chunks/{agenda-card-BxSFkqgY.js → agenda-card-BQ-IKAru.js} +2 -2
  2. package/dist/_chunks/{agenda-tray-g0kg7HwB.js → agenda-tray-CGXRk58j.js} +2 -2
  3. package/dist/_chunks/{ai-consent-banner-CXlsNX1c.js → ai-consent-banner-Be-h9mRI.js} +3 -3
  4. package/dist/_chunks/ai-tools-rail-B5NEghsp.js +511 -0
  5. package/dist/_chunks/{alert-_mUKLmwA.js → alert-CHYZ96tR.js} +150 -96
  6. package/dist/_chunks/{anamnesis-card-DRmE24OQ.js → anamnesis-card-DvYCa16e.js} +2 -2
  7. package/dist/_chunks/anatomy-scheme-CJB6dI6p.js +2445 -0
  8. package/dist/_chunks/annotation-marker-qt5R9WZX.js +120 -0
  9. package/dist/_chunks/{antenatal-schedule-timeline-35ebkcZT.js → antenatal-schedule-timeline-CwXrQRm1.js} +2 -2
  10. package/dist/_chunks/appointment-card-C06aZqA7.js +310 -0
  11. package/dist/_chunks/appointment-timeline-BJM0S_Fg.js +386 -0
  12. package/dist/_chunks/appointment-tray-DRRw5ROi.js +193 -0
  13. package/dist/_chunks/{audio-recorder-DYXXnGug.js → audio-recorder-Cpdk5qpQ.js} +2 -2
  14. package/dist/_chunks/{badge-CqGsX32l.js → badge-DCOqV9mI.js} +32 -27
  15. package/dist/_chunks/{bishop-score-PJI3AXzA.js → bishop-score-DnYWtZa_.js} +2 -2
  16. package/dist/_chunks/{bmi-calculator-BZtIJ53x.js → bmi-calculator-zjeY4E7J.js} +2 -2
  17. package/dist/_chunks/{booking-C3VqFReX.js → booking-DUBI0oqt.js} +4 -4
  18. package/dist/_chunks/{care-plan-card-CvFGXa2z.js → care-plan-card-C5sTfY9G.js} +5 -5
  19. package/dist/_chunks/{care-plan-entry-card-C3E_gClk.js → care-plan-entry-card-CXnxGCWA.js} +5 -5
  20. package/dist/_chunks/care-plan-header-BUwqDTtz.js +206 -0
  21. package/dist/_chunks/clinical-note-card-BUvNMNGL.js +436 -0
  22. package/dist/_chunks/{contact-profile-card-Dramqa9C.js → contact-profile-card-DDPwRFiP.js} +2 -2
  23. package/dist/_chunks/control-room-rail-Y8ryLYsP.js +229 -0
  24. package/dist/_chunks/{cycle-calculator-DmRGJNaT.js → cycle-calculator-CCmPwcBl.js} +2 -2
  25. package/dist/_chunks/{dependent-selector-CG_FOHya.js → dependent-selector-DUV4thxX.js} +2 -2
  26. package/dist/_chunks/{document-scanner-CTubA0-N.js → document-scanner-C_AxLooF.js} +3 -3
  27. package/dist/_chunks/{due-date-calculator-BTmsIQqD.js → due-date-calculator-Brdj-euS.js} +3 -3
  28. package/dist/_chunks/editable-currency-cell-renderer-C9twtALM.js +328 -0
  29. package/dist/_chunks/email-input-DJ7EXklP.js +397 -0
  30. package/dist/_chunks/{entity-card-COhmqHly.js → entity-card-9_62gY7l.js} +38 -20
  31. package/dist/_chunks/entity-summary-BxRjFh_4.js +138 -0
  32. package/dist/_chunks/{fetal-weight-CRz7KE2D.js → fetal-weight-DNCkyeVo.js} +2 -2
  33. package/dist/_chunks/field-value-NXYczdpO.js +415 -0
  34. package/dist/_chunks/{file-upload-5ScQd4fE.js → file-upload-DwZcAK8D.js} +2 -1
  35. package/dist/_chunks/{freemium-paywall-DZ2mBS3w.js → freemium-paywall-WYlNO7yT.js} +2 -2
  36. package/dist/_chunks/{gestational-age-calculator-BleUdhbI.js → gestational-age-calculator-CF2ISaYQ.js} +3 -3
  37. package/dist/_chunks/hash-CysBBS_N.js +17 -0
  38. package/dist/_chunks/{hcg-doubling-CnjDXX6U.js → hcg-doubling-C7bmuaU3.js} +2 -2
  39. package/dist/_chunks/{actions-cell-renderer-DrcaxB0w.js → link-cell-renderer-CTXqtXV-.js} +715 -592
  40. package/dist/_chunks/lock-CKOIn0IK.js +15 -0
  41. package/dist/_chunks/{marketplace-app-shell-6T9W4Knl.js → marketplace-app-shell-Skhfp6vK.js} +3 -3
  42. package/dist/_chunks/notes-panel-ay8_lPrA.js +158 -0
  43. package/dist/_chunks/{notification-card-BiESdm8q.js → notification-card-D2jiKSJJ.js} +27 -23
  44. package/dist/_chunks/{notification-tray-Btb9oQeZ.js → notification-tray-AEun6DN2.js} +2 -2
  45. package/dist/_chunks/{operator-hero-CP2Nhupm.js → operator-hero-CR0Rqh4-.js} +3 -3
  46. package/dist/_chunks/patient-details-Dlhqb5ig.js +675 -0
  47. package/dist/_chunks/{patient-search-CBC_ySF6.js → patient-search-Be6cLrHR.js} +2 -2
  48. package/dist/_chunks/patient-summary-card-WySCMwwA.js +437 -0
  49. package/dist/_chunks/patient-table-CHxf3Oqk.js +1110 -0
  50. package/dist/_chunks/{payment-form-DvjwYVIT.js → payment-form-CxqIXqw7.js} +2 -2
  51. package/dist/_chunks/{payment-request-card-DioWKBUq.js → payment-request-card-BcZJwu9z.js} +125 -136
  52. package/dist/_chunks/{pdf-viewer-D6BPfW2D.js → pdf-viewer-QfebdLOd.js} +192 -214
  53. package/dist/_chunks/{periodontal-chart-card-BuDEMbHE.js → periodontal-chart-card-hRRJY1NN.js} +2 -2
  54. package/dist/_chunks/{practice-results-KrTHqZua.js → practice-results-C6qDfxos.js} +3 -3
  55. package/dist/_chunks/{pregnancy-dating-DORUAOHB.js → pregnancy-dating-CRVWswD-.js} +3 -3
  56. package/dist/_chunks/{pregnancy-weight-gain-DVz4rr7-.js → pregnancy-weight-gain-BUNpTsH-.js} +2 -2
  57. package/dist/_chunks/radiograph-panel.agent-CAX-C3g3.js +558 -0
  58. package/dist/_chunks/{rich-text-editor-BsV7zUdg.js → rich-text-editor-DlCqPixb.js} +410 -394
  59. package/dist/_chunks/{sign-document-B4DeRhTe.js → sign-document-By6hMOra.js} +2 -2
  60. package/dist/_chunks/{stepper-accordion-Dki6r9ZE.js → stepper-accordion-DC-H-8v4.js} +38 -48
  61. package/dist/_chunks/tab-bar-Bv9nGNdO.js +262 -0
  62. package/dist/_chunks/tooth-scheme-BhQoPNBD.js +2131 -0
  63. package/dist/_chunks/{transaction-chip-DK84XCBU.js → transaction-chip-CscoQbxF.js} +88 -61
  64. package/dist/_chunks/use-clamp-overflow-DQE2kwZ9.js +20 -0
  65. package/dist/_chunks/use-overflow-collapse-BIOzKbni.js +32 -0
  66. package/dist/_chunks/use-persistent-state-nZwZAnE9.js +24 -0
  67. package/dist/_chunks/{warning-stack-BsgaEbL8.js → warning-stack--sTrrBDA.js} +86 -101
  68. package/dist/_chunks/{workflow-map-Bdam9pGp.js → workflow-map-Dy8mLCqF.js} +3 -3
  69. package/dist/_chunks/zoom-out-CgVtf2Wx.js +29 -0
  70. package/dist/agent/index.js +5 -4
  71. package/dist/agent/types.d.ts +19 -2
  72. package/dist/agent-catalog.json +1253 -86
  73. package/dist/agent-i18n/en.json +108 -6
  74. package/dist/components/_shared/entity-card/entity-card.d.ts +6 -0
  75. package/dist/components/_shared/entity-card/index.d.ts +1 -1
  76. package/dist/components/_shared/field-value.d.ts +21 -0
  77. package/dist/components/_shared/field-visibility-cog.d.ts +20 -0
  78. package/dist/components/_shared/field-visibility.d.ts +36 -0
  79. package/dist/components/_shared/patient-fields.d.ts +119 -0
  80. package/dist/components/agenda-card/index.js +1 -1
  81. package/dist/components/agenda-tray/index.js +1 -1
  82. package/dist/components/ai-consent-banner/index.js +1 -1
  83. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +75 -0
  84. package/dist/components/ai-tools-rail/index.js +1 -1
  85. package/dist/components/alert/alert.d.ts +5 -0
  86. package/dist/components/alert/index.js +1 -1
  87. package/dist/components/anamnesis-card/index.js +1 -1
  88. package/dist/components/anatomy-scheme/anatomy-face-paths.d.ts +15 -0
  89. package/dist/components/anatomy-scheme/anatomy-muscle-paths.d.ts +20 -0
  90. package/dist/components/anatomy-scheme/anatomy-scheme-data.d.ts +121 -0
  91. package/dist/components/anatomy-scheme/anatomy-scheme.agent.d.ts +6 -0
  92. package/dist/components/anatomy-scheme/anatomy-scheme.d.ts +69 -0
  93. package/dist/components/anatomy-scheme/index.d.ts +6 -0
  94. package/dist/components/anatomy-scheme/index.js +17 -0
  95. package/dist/components/annotation-marker/annotation-marker.d.ts +33 -0
  96. package/dist/components/annotation-marker/index.d.ts +3 -0
  97. package/dist/components/annotation-marker/index.js +7 -0
  98. package/dist/components/appointment-card/appointment-card.d.ts +25 -1
  99. package/dist/components/appointment-card/index.js +6 -5
  100. package/dist/components/appointment-timeline/appointment-timeline.agent.d.ts +4 -0
  101. package/dist/components/appointment-timeline/appointment-timeline.d.ts +66 -0
  102. package/dist/components/appointment-timeline/index.d.ts +4 -0
  103. package/dist/components/appointment-timeline/index.js +6 -0
  104. package/dist/components/audio-recorder/index.js +1 -1
  105. package/dist/components/badge/badge.d.ts +6 -2
  106. package/dist/components/badge/index.js +1 -1
  107. package/dist/components/bishop-score/index.js +1 -1
  108. package/dist/components/bmi-calculator/index.js +1 -1
  109. package/dist/components/booking/index.js +1 -1
  110. package/dist/components/care-plan-card/index.js +1 -1
  111. package/dist/components/care-plan-entry-card/index.js +1 -1
  112. package/dist/components/care-plan-header/care-plan-header.agent.d.ts +4 -0
  113. package/dist/components/care-plan-header/care-plan-header.d.ts +100 -0
  114. package/dist/components/care-plan-header/index.d.ts +4 -0
  115. package/dist/components/care-plan-header/index.js +6 -0
  116. package/dist/components/clinical-note-card/clinical-note-card.d.ts +21 -1
  117. package/dist/components/clinical-note-card/index.js +1 -1
  118. package/dist/components/contact-profile-card/index.js +1 -1
  119. package/dist/components/control-room-rail/control-room-context.d.ts +53 -0
  120. package/dist/components/control-room-rail/control-room-rail.d.ts +35 -0
  121. package/dist/components/control-room-rail/index.d.ts +5 -0
  122. package/dist/components/control-room-rail/index.js +9 -0
  123. package/dist/components/cycle-calculator/index.js +1 -1
  124. package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts +18 -0
  125. package/dist/components/data-table/index.d.ts +1 -1
  126. package/dist/components/data-table/index.js +32 -31
  127. package/dist/components/dependent-selector/index.js +1 -1
  128. package/dist/components/document-scanner/index.js +1 -1
  129. package/dist/components/due-date-calculator/index.js +2 -2
  130. package/dist/components/email-input/index.js +1 -1
  131. package/dist/components/entity-summary/entity-summary.d.ts +43 -0
  132. package/dist/components/entity-summary/index.d.ts +3 -0
  133. package/dist/components/entity-summary/index.js +5 -0
  134. package/dist/components/fetal-weight/index.js +1 -1
  135. package/dist/components/file-upload/index.js +1 -1
  136. package/dist/components/freemium-paywall/index.js +1 -1
  137. package/dist/components/gestational-age-calculator/index.js +1 -1
  138. package/dist/components/hcg-doubling/index.js +1 -1
  139. package/dist/components/index.d.ts +9 -0
  140. package/dist/components/notes-panel/index.d.ts +3 -0
  141. package/dist/components/notes-panel/index.js +5 -0
  142. package/dist/components/notes-panel/notes-panel.d.ts +64 -0
  143. package/dist/components/notification-card/index.js +1 -1
  144. package/dist/components/notification-tray/index.js +1 -1
  145. package/dist/components/operator-hero/index.js +1 -1
  146. package/dist/components/patient-details/index.d.ts +5 -0
  147. package/dist/components/patient-details/index.js +6 -0
  148. package/dist/components/patient-details/patient-details.agent.d.ts +4 -0
  149. package/dist/components/patient-details/patient-details.d.ts +96 -0
  150. package/dist/components/patient-search/index.js +1 -1
  151. package/dist/components/patient-summary-card/index.js +1 -1
  152. package/dist/components/patient-summary-card/patient-summary-card.d.ts +40 -1
  153. package/dist/components/patient-table/columns.d.ts +69 -40
  154. package/dist/components/patient-table/index.d.ts +2 -6
  155. package/dist/components/patient-table/index.js +8 -9
  156. package/dist/components/patient-table/patient-table.d.ts +38 -4
  157. package/dist/components/patient-table/types.d.ts +52 -2
  158. package/dist/components/patient-table/use-responsive-columns.d.ts +8 -6
  159. package/dist/components/payment-card/index.js +1 -1
  160. package/dist/components/payment-form/index.js +1 -1
  161. package/dist/components/pdf-viewer/index.js +1 -1
  162. package/dist/components/periodontal-chart-card/index.js +1 -1
  163. package/dist/components/practice-results/index.js +1 -1
  164. package/dist/components/pregnancy-dating/index.js +1 -1
  165. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  166. package/dist/components/radiograph-panel/index.d.ts +4 -0
  167. package/dist/components/radiograph-panel/index.js +7 -0
  168. package/dist/components/radiograph-panel/radiograph-panel.agent.d.ts +13 -0
  169. package/dist/components/radiograph-panel/radiograph-panel.d.ts +36 -0
  170. package/dist/components/rich-text-editor/index.js +1 -1
  171. package/dist/components/sidebar/index.js +1 -1
  172. package/dist/components/sign-document/index.js +1 -1
  173. package/dist/components/stepper-accordion/index.js +1 -1
  174. package/dist/components/tab-bar/index.js +1 -1
  175. package/dist/components/tab-bar/tab-bar.d.ts +18 -1
  176. package/dist/components/tooth-scheme/index.d.ts +2 -2
  177. package/dist/components/tooth-scheme/index.js +30 -23
  178. package/dist/components/tooth-scheme/tooth-data.d.ts +112 -1
  179. package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts +2 -2
  180. package/dist/components/tooth-scheme/tooth-scheme.d.ts +75 -11
  181. package/dist/components/transaction-chip/index.js +1 -1
  182. package/dist/components/transaction-chip/transaction-chip.d.ts +2 -2
  183. package/dist/components/warning-stack/index.js +1 -1
  184. package/dist/components/warning-stack/warning-stack.d.ts +10 -7
  185. package/dist/components/workflow/index.js +1 -1
  186. package/dist/hooks/index.d.ts +1 -0
  187. package/dist/hooks/index.js +24 -22
  188. package/dist/hooks/use-clamp-overflow.d.ts +19 -0
  189. package/dist/hooks/use-overflow-collapse.d.ts +46 -0
  190. package/dist/hooks/use-persistent-state.d.ts +7 -1
  191. package/dist/hooks/use-scroll-overflow.d.ts +36 -0
  192. package/dist/i18n/locales/ar.d.ts +308 -24
  193. package/dist/i18n/locales/ar.js +322 -27
  194. package/dist/i18n/locales/de.d.ts +308 -24
  195. package/dist/i18n/locales/de.js +322 -27
  196. package/dist/i18n/locales/el.d.ts +308 -24
  197. package/dist/i18n/locales/el.js +322 -27
  198. package/dist/i18n/locales/en.d.ts +309 -32
  199. package/dist/i18n/locales/en.js +323 -35
  200. package/dist/i18n/locales/es.d.ts +308 -24
  201. package/dist/i18n/locales/es.js +322 -27
  202. package/dist/i18n/locales/fr.d.ts +308 -24
  203. package/dist/i18n/locales/fr.js +322 -27
  204. package/dist/i18n/locales/hi.d.ts +308 -24
  205. package/dist/i18n/locales/hi.js +322 -27
  206. package/dist/i18n/locales/it.d.ts +308 -24
  207. package/dist/i18n/locales/it.js +322 -27
  208. package/dist/i18n/locales/ja.d.ts +308 -24
  209. package/dist/i18n/locales/ja.js +322 -27
  210. package/dist/i18n/locales/nl.d.ts +308 -24
  211. package/dist/i18n/locales/nl.js +322 -27
  212. package/dist/i18n/locales/pl.d.ts +308 -24
  213. package/dist/i18n/locales/pl.js +322 -27
  214. package/dist/i18n/locales/pt.d.ts +308 -24
  215. package/dist/i18n/locales/pt.js +322 -27
  216. package/dist/i18n/locales/ro.d.ts +308 -24
  217. package/dist/i18n/locales/ro.js +322 -27
  218. package/dist/i18n/locales/ru.d.ts +308 -24
  219. package/dist/i18n/locales/ru.js +322 -27
  220. package/dist/i18n/locales/sq.d.ts +308 -24
  221. package/dist/i18n/locales/sq.js +322 -27
  222. package/dist/i18n/locales/sv.d.ts +308 -24
  223. package/dist/i18n/locales/sv.js +322 -27
  224. package/dist/i18n/locales/tr.d.ts +308 -24
  225. package/dist/i18n/locales/tr.js +322 -27
  226. package/dist/i18n/locales/zh.d.ts +308 -24
  227. package/dist/i18n/locales/zh.js +322 -27
  228. package/dist/index.js +672 -623
  229. package/dist/locales/ar.json +311 -27
  230. package/dist/locales/de.json +311 -27
  231. package/dist/locales/el.json +311 -27
  232. package/dist/locales/en.json +311 -27
  233. package/dist/locales/es.json +311 -27
  234. package/dist/locales/fr.json +311 -27
  235. package/dist/locales/hi.json +311 -27
  236. package/dist/locales/it.json +311 -27
  237. package/dist/locales/ja.json +311 -27
  238. package/dist/locales/nl.json +311 -27
  239. package/dist/locales/pl.json +311 -27
  240. package/dist/locales/pt.json +311 -27
  241. package/dist/locales/ro.json +311 -27
  242. package/dist/locales/ru.json +311 -27
  243. package/dist/locales/sq.json +311 -27
  244. package/dist/locales/sv.json +311 -27
  245. package/dist/locales/tr.json +311 -27
  246. package/dist/locales/zh.json +311 -27
  247. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  248. package/dist/tokens.css +1 -1
  249. package/package.json +37 -1
  250. package/dist/_chunks/ai-tools-rail-BA_sqy1A.js +0 -373
  251. package/dist/_chunks/appointment-tray-CZtvtaH-.js +0 -431
  252. package/dist/_chunks/clinical-note-card-DqQYf_D4.js +0 -333
  253. package/dist/_chunks/editable-currency-cell-renderer-kgqp_mIw.js +0 -448
  254. package/dist/_chunks/email-input-B_Y55f5G.js +0 -396
  255. package/dist/_chunks/patient-summary-card-B836_fDB.js +0 -435
  256. package/dist/_chunks/patient-table-CDuosVru.js +0 -889
  257. package/dist/_chunks/tab-bar-B1ovILzh.js +0 -105
  258. package/dist/_chunks/tooth-scheme-yBr53cvv.js +0 -1330
  259. package/dist/_chunks/use-persistent-state-i23OWy6G.js +0 -24
  260. package/dist/components/patient-table/cell-renderers/contact-cell.d.ts +0 -45
  261. package/dist/components/patient-table/cell-renderers/patient-identity-cell.d.ts +0 -26
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.69.0",
3
+ "packageVersion": "0.70.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -532,6 +532,247 @@
532
532
  }
533
533
  }
534
534
  },
535
+ {
536
+ "kind": "component",
537
+ "id": "anatomy-scheme",
538
+ "capabilities": [
539
+ "pick",
540
+ "set_value",
541
+ "edit_inline",
542
+ "view_change"
543
+ ],
544
+ "state": [
545
+ {
546
+ "name": "chart",
547
+ "type": "object",
548
+ "description": "Current anatomy chart — findings keyed by region id. Notes are PHI and omitted from this snapshot; read them per-region via get_region.",
549
+ "descriptionKey": "ui.agent.anatomyScheme.state.chart"
550
+ },
551
+ {
552
+ "name": "activeView",
553
+ "type": "string",
554
+ "description": "Id of the currently displayed anatomy view.",
555
+ "descriptionKey": "ui.agent.anatomyScheme.state.activeView"
556
+ }
557
+ ],
558
+ "actions": [
559
+ {
560
+ "name": "focus_region",
561
+ "safety": "read",
562
+ "argsType": "{ regionId: string }",
563
+ "argsSchema": {
564
+ "type": "object",
565
+ "properties": {
566
+ "regionId": {
567
+ "type": "string",
568
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
569
+ }
570
+ },
571
+ "required": [
572
+ "regionId"
573
+ ]
574
+ },
575
+ "idempotent": true,
576
+ "description": "Move focus to a specific region in the active view.",
577
+ "descriptionKey": "ui.agent.anatomyScheme.actions.focusRegion"
578
+ },
579
+ {
580
+ "name": "get_region",
581
+ "safety": "phi",
582
+ "argsType": "{ regionId: string }",
583
+ "argsSchema": {
584
+ "type": "object",
585
+ "properties": {
586
+ "regionId": {
587
+ "type": "string",
588
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
589
+ }
590
+ },
591
+ "required": [
592
+ "regionId"
593
+ ]
594
+ },
595
+ "returns": "AnatomyFinding[]",
596
+ "returnsSchema": {
597
+ "type": "array",
598
+ "items": {
599
+ "type": "object",
600
+ "properties": {
601
+ "type": {
602
+ "enum": [
603
+ "observation",
604
+ "lesion",
605
+ "pain",
606
+ "treatment",
607
+ "note"
608
+ ]
609
+ },
610
+ "note": {
611
+ "type": "string"
612
+ }
613
+ },
614
+ "required": [
615
+ "type"
616
+ ]
617
+ }
618
+ },
619
+ "idempotent": true,
620
+ "description": "Read the findings (incl. notes) recorded on one region.",
621
+ "descriptionKey": "ui.agent.anatomyScheme.actions.getRegion"
622
+ },
623
+ {
624
+ "name": "regions_with",
625
+ "safety": "read",
626
+ "argsType": "{ type: FindingType }",
627
+ "argsSchema": {
628
+ "type": "object",
629
+ "properties": {
630
+ "type": {
631
+ "enum": [
632
+ "observation",
633
+ "lesion",
634
+ "pain",
635
+ "treatment",
636
+ "note"
637
+ ]
638
+ }
639
+ },
640
+ "required": [
641
+ "type"
642
+ ]
643
+ },
644
+ "returns": "string[]",
645
+ "returnsSchema": {
646
+ "type": "array",
647
+ "items": {
648
+ "type": "string",
649
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
650
+ }
651
+ },
652
+ "idempotent": true,
653
+ "description": "List the region ids carrying a given finding type.",
654
+ "descriptionKey": "ui.agent.anatomyScheme.actions.regionsWith"
655
+ },
656
+ {
657
+ "name": "set_finding",
658
+ "safety": "write",
659
+ "argsType": "{ regionId: string; type: FindingType; note?: string }",
660
+ "argsSchema": {
661
+ "type": "object",
662
+ "properties": {
663
+ "regionId": {
664
+ "type": "string",
665
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
666
+ },
667
+ "type": {
668
+ "enum": [
669
+ "observation",
670
+ "lesion",
671
+ "pain",
672
+ "treatment",
673
+ "note"
674
+ ]
675
+ },
676
+ "note": {
677
+ "type": "string"
678
+ }
679
+ },
680
+ "required": [
681
+ "regionId",
682
+ "type"
683
+ ]
684
+ },
685
+ "idempotent": true,
686
+ "description": "Record a finding (observation / lesion / pain / treatment / note) on a region.",
687
+ "descriptionKey": "ui.agent.anatomyScheme.actions.setFinding"
688
+ },
689
+ {
690
+ "name": "remove_finding",
691
+ "safety": "write",
692
+ "argsType": "{ regionId: string; type: FindingType }",
693
+ "argsSchema": {
694
+ "type": "object",
695
+ "properties": {
696
+ "regionId": {
697
+ "type": "string",
698
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
699
+ },
700
+ "type": {
701
+ "enum": [
702
+ "observation",
703
+ "lesion",
704
+ "pain",
705
+ "treatment",
706
+ "note"
707
+ ]
708
+ }
709
+ },
710
+ "required": [
711
+ "regionId",
712
+ "type"
713
+ ]
714
+ },
715
+ "idempotent": true,
716
+ "description": "Remove a single finding type from a region.",
717
+ "descriptionKey": "ui.agent.anatomyScheme.actions.removeFinding"
718
+ },
719
+ {
720
+ "name": "clear_region",
721
+ "safety": "destructive",
722
+ "argsType": "{ regionId: string }",
723
+ "argsSchema": {
724
+ "type": "object",
725
+ "properties": {
726
+ "regionId": {
727
+ "type": "string",
728
+ "description": "Region id within the active view, e.g. 'ovary-l', 'prostate', 'quadriceps-r', 'kidney-r'."
729
+ }
730
+ },
731
+ "required": [
732
+ "regionId"
733
+ ]
734
+ },
735
+ "idempotent": true,
736
+ "description": "Clear every finding from a region.",
737
+ "descriptionKey": "ui.agent.anatomyScheme.actions.clearRegion"
738
+ },
739
+ {
740
+ "name": "set_view",
741
+ "safety": "write",
742
+ "argsType": "{ viewId: string }",
743
+ "argsSchema": {
744
+ "type": "object",
745
+ "properties": {
746
+ "viewId": {
747
+ "type": "string",
748
+ "description": "View id, e.g. 'body-front', 'face-front', 'female-reproductive', 'male-reproductive', 'urinary', 'muscular-front', 'skeletal-front'."
749
+ }
750
+ },
751
+ "required": [
752
+ "viewId"
753
+ ]
754
+ },
755
+ "idempotent": true,
756
+ "description": "Switch the active anatomy view.",
757
+ "descriptionKey": "ui.agent.anatomyScheme.actions.setView"
758
+ }
759
+ ],
760
+ "domHooks": {
761
+ "root": {
762
+ "attr": "data-component",
763
+ "value": "anatomy-scheme"
764
+ },
765
+ "instanceId": {
766
+ "attr": "data-component-id",
767
+ "sourceProp": "id",
768
+ "description": "Sourced from the id prop."
769
+ },
770
+ "item": {
771
+ "attr": "data-region",
772
+ "description": "Each rendered region `<g>` carries its region id as `data-region` and its anatomical side (`left` / `right` / `midline`) as `data-side`, so bilateral regions can be disambiguated by side. The root `data-system` / `data-view` attributes expose the active anatomy system and view."
773
+ }
774
+ }
775
+ },
535
776
  {
536
777
  "kind": "component",
537
778
  "id": "app-frame",
@@ -567,6 +808,66 @@
567
808
  }
568
809
  }
569
810
  },
811
+ {
812
+ "kind": "component",
813
+ "id": "appointment-timeline",
814
+ "capabilities": [
815
+ "scroll",
816
+ "pick"
817
+ ],
818
+ "state": [
819
+ {
820
+ "name": "items",
821
+ "type": "Array<{ id: string; state: string }>",
822
+ "description": "Currently-rendered appointments. Ids + lifecycle state only — never patient identity.",
823
+ "descriptionKey": "ui.agent.appointmentTimeline.state.items"
824
+ }
825
+ ],
826
+ "actions": [
827
+ {
828
+ "name": "select_item",
829
+ "safety": "read",
830
+ "argsType": "{ id: string }",
831
+ "argsSchema": {
832
+ "type": "object",
833
+ "properties": {
834
+ "id": {
835
+ "type": "string"
836
+ }
837
+ },
838
+ "required": [
839
+ "id"
840
+ ]
841
+ },
842
+ "idempotent": true,
843
+ "description": "Activate the appointment with the given id.",
844
+ "descriptionKey": "ui.agent.appointmentTimeline.actions.selectItem"
845
+ },
846
+ {
847
+ "name": "jump_to_today",
848
+ "safety": "read",
849
+ "idempotent": true,
850
+ "description": "Re-anchor the timeline scroll on today's appointments.",
851
+ "descriptionKey": "ui.agent.appointmentTimeline.actions.jumpToToday"
852
+ }
853
+ ],
854
+ "domHooks": {
855
+ "root": {
856
+ "attr": "data-component",
857
+ "value": "appointment-timeline",
858
+ "description": "Marks the AppointmentTimeline wrapper."
859
+ },
860
+ "instanceId": {
861
+ "attr": "data-component-id",
862
+ "sourceProp": "id",
863
+ "description": "Sourced from the id prop. Required to address a specific timeline from the agent."
864
+ },
865
+ "item": {
866
+ "attr": "data-appointment-id",
867
+ "description": "Stable appointment id emitted on each rendered AppointmentCard inside the timeline."
868
+ }
869
+ }
870
+ },
570
871
  {
571
872
  "kind": "component",
572
873
  "id": "appointment-tray",
@@ -1565,6 +1866,38 @@
1565
1866
  }
1566
1867
  }
1567
1868
  },
1869
+ {
1870
+ "kind": "component",
1871
+ "id": "care-plan-header",
1872
+ "capabilities": [],
1873
+ "state": [
1874
+ {
1875
+ "name": "state",
1876
+ "type": "'estimate' | 'accepted' | 'discarded' | 'closed'",
1877
+ "description": "The plan lifecycle state. Enum value only — never the localised label or any PHI.",
1878
+ "descriptionKey": "ui.agent.carePlanHeader.state.state"
1879
+ },
1880
+ {
1881
+ "name": "alertCount",
1882
+ "type": "number",
1883
+ "description": "How many attention alerts (e.g. missing signature) are showing. Count only — never the alert labels.",
1884
+ "descriptionKey": "ui.agent.carePlanHeader.state.alertCount"
1885
+ }
1886
+ ],
1887
+ "actions": [],
1888
+ "domHooks": {
1889
+ "root": {
1890
+ "attr": "data-component",
1891
+ "value": "care-plan-header",
1892
+ "description": "Marks the CarePlanHeader root region."
1893
+ },
1894
+ "instanceId": {
1895
+ "attr": "data-component-id",
1896
+ "sourceProp": "id",
1897
+ "description": "Sourced from the id prop. Addresses a specific plan header."
1898
+ }
1899
+ }
1900
+ },
1568
1901
  {
1569
1902
  "kind": "component",
1570
1903
  "id": "carousel",
@@ -4902,29 +5235,162 @@
4902
5235
  },
4903
5236
  {
4904
5237
  "kind": "component",
4905
- "id": "patient-search",
5238
+ "id": "patient-details",
4906
5239
  "capabilities": [
4907
- "filter"
5240
+ "view_change",
5241
+ "set_value"
4908
5242
  ],
4909
5243
  "state": [
4910
5244
  {
4911
- "name": "variant",
4912
- "type": "string",
4913
- "description": "Active variant one of `who-where`, `who-where-when`, `faceted`, `discovery`.",
4914
- "descriptionKey": "ui.agent.patientSearch.state.variant"
5245
+ "name": "visibleFieldOrder",
5246
+ "type": "string[]",
5247
+ "description": "Ordered list of visible field KEYS (e.g. \"fiscalCode\"). Never a field value.",
5248
+ "descriptionKey": "ui.agent.patientDetails.state.visibleFieldOrder"
5249
+ },
5250
+ {
5251
+ "name": "patientId",
5252
+ "type": "string | undefined",
5253
+ "description": "Opaque patient id the panel is bound to. No patient-identifiable data.",
5254
+ "descriptionKey": "ui.agent.patientDetails.state.patientId"
4915
5255
  }
4916
5256
  ],
4917
5257
  "actions": [
4918
5258
  {
4919
- "name": "reset",
5259
+ "name": "set_visible_fields",
4920
5260
  "safety": "write",
5261
+ "argsType": "{ fieldIds: string[] }",
5262
+ "argsSchema": {
5263
+ "type": "object",
5264
+ "properties": {
5265
+ "fieldIds": {
5266
+ "type": "array",
5267
+ "items": {
5268
+ "type": "string"
5269
+ }
5270
+ }
5271
+ },
5272
+ "required": [
5273
+ "fieldIds"
5274
+ ]
5275
+ },
4921
5276
  "idempotent": true,
4922
- "description": "Clear the current search query (WHO, WHERE, WHEN, facets, geo) via the consumer-owned onChange.",
4923
- "descriptionKey": "ui.agent.patientSearch.actions.reset"
4924
- },
4925
- {
4926
- "name": "focus_primary",
4927
- "safety": "read",
5277
+ "examples": [
5278
+ {
5279
+ "args": {
5280
+ "fieldIds": [
5281
+ "lastName",
5282
+ "firstName",
5283
+ "phone",
5284
+ "email"
5285
+ ]
5286
+ },
5287
+ "note": "Show only name + contact fields."
5288
+ }
5289
+ ],
5290
+ "description": "Set which fields are visible (and their order). Unknown ids are ignored.",
5291
+ "descriptionKey": "ui.agent.patientDetails.actions.setVisibleFields"
5292
+ },
5293
+ {
5294
+ "name": "set_field_order",
5295
+ "safety": "write",
5296
+ "argsType": "{ orderedIds: string[] }",
5297
+ "argsSchema": {
5298
+ "type": "object",
5299
+ "properties": {
5300
+ "orderedIds": {
5301
+ "type": "array",
5302
+ "items": {
5303
+ "type": "string"
5304
+ }
5305
+ }
5306
+ },
5307
+ "required": [
5308
+ "orderedIds"
5309
+ ]
5310
+ },
5311
+ "idempotent": true,
5312
+ "description": "Reorder the visible fields. Order within a section is honoured; sections stay fixed.",
5313
+ "descriptionKey": "ui.agent.patientDetails.actions.setFieldOrder"
5314
+ },
5315
+ {
5316
+ "name": "update_field",
5317
+ "safety": "phi",
5318
+ "argsType": "{ fieldId: string; value: unknown }",
5319
+ "argsSchema": {
5320
+ "type": "object",
5321
+ "properties": {
5322
+ "fieldId": {
5323
+ "type": "string"
5324
+ },
5325
+ "value": {}
5326
+ },
5327
+ "required": [
5328
+ "fieldId",
5329
+ "value"
5330
+ ]
5331
+ },
5332
+ "idempotent": true,
5333
+ "openWorld": true,
5334
+ "errors": [
5335
+ "no-save-handler",
5336
+ "validation-failed",
5337
+ "permission-denied"
5338
+ ],
5339
+ "examples": [
5340
+ {
5341
+ "args": {
5342
+ "fieldId": "job",
5343
+ "value": "Architect"
5344
+ },
5345
+ "note": "Update the patient’s occupation."
5346
+ }
5347
+ ],
5348
+ "description": "Write a patient field value via the consumer's audited save path. Subject to the same permissions and validation as a human edit.",
5349
+ "descriptionKey": "ui.agent.patientDetails.actions.updateField"
5350
+ }
5351
+ ],
5352
+ "domHooks": {
5353
+ "root": {
5354
+ "attr": "data-component",
5355
+ "value": "patient-details",
5356
+ "description": "Marks the PatientDetails root region."
5357
+ },
5358
+ "instanceId": {
5359
+ "attr": "data-component-id",
5360
+ "sourceProp": "id",
5361
+ "description": "Sourced from the id prop. Addresses a specific panel."
5362
+ },
5363
+ "item": {
5364
+ "attr": "data-field-id",
5365
+ "description": "Stable field KEY on each row. Never the field value (no PHI in the DOM hook)."
5366
+ }
5367
+ }
5368
+ },
5369
+ {
5370
+ "kind": "component",
5371
+ "id": "patient-search",
5372
+ "capabilities": [
5373
+ "filter"
5374
+ ],
5375
+ "state": [
5376
+ {
5377
+ "name": "variant",
5378
+ "type": "string",
5379
+ "description": "Active variant — one of `who-where`, `who-where-when`, `faceted`, `discovery`.",
5380
+ "descriptionKey": "ui.agent.patientSearch.state.variant"
5381
+ }
5382
+ ],
5383
+ "actions": [
5384
+ {
5385
+ "name": "reset",
5386
+ "safety": "write",
5387
+ "idempotent": true,
5388
+ "description": "Clear the current search query (WHO, WHERE, WHEN, facets, geo) via the consumer-owned onChange.",
5389
+ "descriptionKey": "ui.agent.patientSearch.actions.reset"
5390
+ },
5391
+ {
5392
+ "name": "focus_primary",
5393
+ "safety": "read",
4928
5394
  "idempotent": true,
4929
5395
  "description": "Move keyboard focus to the most-relevant search field for the current variant.",
4930
5396
  "descriptionKey": "ui.agent.patientSearch.actions.focusPrimary"
@@ -5827,6 +6293,65 @@
5827
6293
  }
5828
6294
  }
5829
6295
  },
6296
+ {
6297
+ "kind": "component",
6298
+ "id": "radiograph-panel",
6299
+ "capabilities": [
6300
+ "pick",
6301
+ "view_change"
6302
+ ],
6303
+ "state": [
6304
+ {
6305
+ "name": "radiographs",
6306
+ "type": "Array<{ id: string; kind?: string }>",
6307
+ "description": "Structural references (id + kind) to the films shown for the selected tooth.",
6308
+ "descriptionKey": "ui.agent.radiographPanel.state.radiographs"
6309
+ }
6310
+ ],
6311
+ "actions": [
6312
+ {
6313
+ "name": "view_radiograph",
6314
+ "safety": "read",
6315
+ "argsType": "{ id: string }",
6316
+ "argsSchema": {
6317
+ "type": "object",
6318
+ "properties": {
6319
+ "id": {
6320
+ "type": "string"
6321
+ }
6322
+ },
6323
+ "required": [
6324
+ "id"
6325
+ ]
6326
+ },
6327
+ "idempotent": true,
6328
+ "description": "Open a film in the fullscreen viewer by id.",
6329
+ "descriptionKey": "ui.agent.radiographPanel.actions.viewRadiograph"
6330
+ },
6331
+ {
6332
+ "name": "close_viewer",
6333
+ "safety": "read",
6334
+ "idempotent": true,
6335
+ "description": "Close the fullscreen radiograph viewer.",
6336
+ "descriptionKey": "ui.agent.radiographPanel.actions.closeViewer"
6337
+ }
6338
+ ],
6339
+ "domHooks": {
6340
+ "root": {
6341
+ "attr": "data-component",
6342
+ "value": "radiograph-panel"
6343
+ },
6344
+ "instanceId": {
6345
+ "attr": "data-component-id",
6346
+ "sourceProp": "id",
6347
+ "description": "Sourced from the id prop."
6348
+ },
6349
+ "item": {
6350
+ "attr": "data-radiograph-id",
6351
+ "description": "Each film row (`<li>`) carries its radiograph id as `data-radiograph-id`. The panel root additionally carries the selected tooth's FDI id as `data-tooth`."
6352
+ }
6353
+ }
6354
+ },
5830
6355
  {
5831
6356
  "kind": "component",
5832
6357
  "id": "rating",
@@ -7892,14 +8417,26 @@
7892
8417
  {
7893
8418
  "name": "chart",
7894
8419
  "type": "object",
7895
- "description": "Current dental chart — findings (and marked surfaces) keyed by FDI id.",
8420
+ "description": "Current dental chart — findings (and marked surfaces) keyed by FDI id, or by a special-element id (quadrant / sextant / arch / general) for region-spanning findings.",
7896
8421
  "descriptionKey": "ui.agent.toothScheme.state.chart"
7897
8422
  },
7898
8423
  {
7899
8424
  "name": "chartedTeeth",
7900
8425
  "type": "string[]",
7901
- "description": "FDI ids of every tooth carrying at least one finding.",
8426
+ "description": "Ids carrying at least one finding — FDI tooth ids and/or special-element ids (quadrant / sextant / arch / general).",
7902
8427
  "descriptionKey": "ui.agent.toothScheme.state.chartedTeeth"
8428
+ },
8429
+ {
8430
+ "name": "radiographs",
8431
+ "type": "Record<string, { id: string; kind?: string }[]>",
8432
+ "description": "Structural references (id + kind) to the radiographs on each tooth, keyed by FDI id. Notes, dates and image URLs are not exposed here — fetch them on demand via get_radiographs.",
8433
+ "descriptionKey": "ui.agent.toothScheme.state.radiographs"
8434
+ },
8435
+ {
8436
+ "name": "teethWithRadiographs",
8437
+ "type": "string[]",
8438
+ "description": "FDI ids of every tooth carrying at least one radiograph.",
8439
+ "descriptionKey": "ui.agent.toothScheme.state.teethWithRadiographs"
7903
8440
  }
7904
8441
  ],
7905
8442
  "actions": [
@@ -7912,7 +8449,7 @@
7912
8449
  "properties": {
7913
8450
  "id": {
7914
8451
  "type": "string",
7915
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8452
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
7916
8453
  }
7917
8454
  },
7918
8455
  "required": [
@@ -7932,7 +8469,7 @@
7932
8469
  "properties": {
7933
8470
  "id": {
7934
8471
  "type": "string",
7935
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8472
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
7936
8473
  }
7937
8474
  },
7938
8475
  "required": [
@@ -7994,13 +8531,93 @@
7994
8531
  "type": "array",
7995
8532
  "items": {
7996
8533
  "type": "string",
7997
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8534
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
7998
8535
  }
7999
8536
  },
8000
8537
  "idempotent": true,
8001
- "description": "List the FDI ids of every tooth carrying a given finding (e.g. all teeth with caries).",
8538
+ "description": "List the ids carrying a given finding — FDI tooth ids and/or special-element ids (e.g. all teeth with caries).",
8002
8539
  "descriptionKey": "ui.agent.toothScheme.actions.teethWith"
8003
8540
  },
8541
+ {
8542
+ "name": "get_radiographs",
8543
+ "safety": "read",
8544
+ "argsType": "{ id: FdiId }",
8545
+ "argsSchema": {
8546
+ "type": "object",
8547
+ "properties": {
8548
+ "id": {
8549
+ "type": "string",
8550
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
8551
+ }
8552
+ },
8553
+ "required": [
8554
+ "id"
8555
+ ]
8556
+ },
8557
+ "returns": "Radiograph[]",
8558
+ "returnsSchema": {
8559
+ "type": "array",
8560
+ "items": {
8561
+ "type": "object",
8562
+ "properties": {
8563
+ "id": {
8564
+ "type": "string"
8565
+ },
8566
+ "url": {
8567
+ "type": "string"
8568
+ },
8569
+ "thumbnailUrl": {
8570
+ "type": "string"
8571
+ },
8572
+ "date": {
8573
+ "type": "string",
8574
+ "description": "ISO acquisition date (YYYY-MM-DD)."
8575
+ },
8576
+ "note": {
8577
+ "type": "string"
8578
+ },
8579
+ "kind": {
8580
+ "enum": [
8581
+ "periapical",
8582
+ "bitewing",
8583
+ "panoramic",
8584
+ "other"
8585
+ ]
8586
+ },
8587
+ "alt": {
8588
+ "type": "string"
8589
+ }
8590
+ },
8591
+ "required": [
8592
+ "id",
8593
+ "url"
8594
+ ]
8595
+ }
8596
+ },
8597
+ "idempotent": true,
8598
+ "description": "Read the radiographs (x-rays) attached to one tooth.",
8599
+ "descriptionKey": "ui.agent.toothScheme.actions.getRadiographs"
8600
+ },
8601
+ {
8602
+ "name": "open_radiographs",
8603
+ "safety": "read",
8604
+ "argsType": "{ id: FdiId }",
8605
+ "argsSchema": {
8606
+ "type": "object",
8607
+ "properties": {
8608
+ "id": {
8609
+ "type": "string",
8610
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
8611
+ }
8612
+ },
8613
+ "required": [
8614
+ "id"
8615
+ ]
8616
+ },
8617
+ "idempotent": true,
8618
+ "description": "Focus a tooth and open its radiograph archive (fires the host's onOpenRadiographs).",
8619
+ "descriptionKey": "ui.agent.toothScheme.actions.openRadiographs"
8620
+ },
8004
8621
  {
8005
8622
  "name": "set_finding",
8006
8623
  "safety": "write",
@@ -8010,7 +8627,7 @@
8010
8627
  "properties": {
8011
8628
  "id": {
8012
8629
  "type": "string",
8013
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8630
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
8014
8631
  },
8015
8632
  "condition": {
8016
8633
  "enum": [
@@ -8046,7 +8663,7 @@
8046
8663
  ]
8047
8664
  },
8048
8665
  "idempotent": true,
8049
- "description": "Record a finding on a tooth (crown, implant, root canal, caries, …). Optionally mark the affected surfaces for a surface finding.",
8666
+ "description": "Record a finding on a tooth or region element (crown, implant, root canal, caries, …). Optionally mark the affected surfaces for a surface finding.",
8050
8667
  "descriptionKey": "ui.agent.toothScheme.actions.setFinding"
8051
8668
  },
8052
8669
  {
@@ -8058,7 +8675,7 @@
8058
8675
  "properties": {
8059
8676
  "id": {
8060
8677
  "type": "string",
8061
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8678
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
8062
8679
  },
8063
8680
  "condition": {
8064
8681
  "enum": [
@@ -8094,7 +8711,7 @@
8094
8711
  "properties": {
8095
8712
  "id": {
8096
8713
  "type": "string",
8097
- "description": "FDI tooth id, e.g. '11'–'48' permanent, '51'–'85' primary."
8714
+ "description": "FDI tooth id ('11'–'48' permanent, '51'–'85' primary) or a special-element id ('Q1'–'Q4' quadrants, 'S1'–'S6' sextants, 'AS'/'AI' arches, 'general'; primary mirrors with an 'm' prefix)."
8098
8715
  }
8099
8716
  },
8100
8717
  "required": [
@@ -8118,7 +8735,7 @@
8118
8735
  },
8119
8736
  "item": {
8120
8737
  "attr": "data-fdi",
8121
- "description": "Each rendered tooth `<g>` carries its FDI id as `data-fdi`. The `data-projection` attribute on the root exposes the side/plan view."
8738
+ "description": "Each rendered tooth `<g>` carries its FDI id as `data-fdi`; selectable special-element slots carry their id there too (plus `data-special` naming the kind). The `data-projection` / `data-view-mode` attributes on the root expose the side/plan/both view."
8122
8739
  }
8123
8740
  }
8124
8741
  },
@@ -9037,10 +9654,6 @@
9037
9654
  "as": "register",
9038
9655
  "entity": "carePlan"
9039
9656
  },
9040
- {
9041
- "component": "select",
9042
- "as": "periodFilter"
9043
- },
9044
9657
  {
9045
9658
  "component": "button",
9046
9659
  "as": "newPlan"
@@ -9053,10 +9666,6 @@
9053
9666
  "component": "icon-button-group",
9054
9667
  "as": "rowActions"
9055
9668
  },
9056
- {
9057
- "component": "tag",
9058
- "as": "planStatus"
9059
- },
9060
9669
  {
9061
9670
  "component": "transaction-chip",
9062
9671
  "as": "invoiceChip"
@@ -9067,27 +9676,15 @@
9067
9676
  },
9068
9677
  {
9069
9678
  "component": "counter",
9070
- "as": "totalsFooter"
9679
+ "as": "planRollupCount"
9071
9680
  },
9072
9681
  {
9073
9682
  "component": "card",
9074
- "as": "planDetail"
9075
- },
9076
- {
9077
- "component": "description-list",
9078
- "as": "planSummary"
9079
- },
9080
- {
9081
- "component": "tooth-scheme",
9082
- "as": "odontogram"
9683
+ "as": "gridCard"
9083
9684
  },
9084
9685
  {
9085
9686
  "component": "warning-stack",
9086
9687
  "as": "planWarnings"
9087
- },
9088
- {
9089
- "component": "badge",
9090
- "as": "rollupCount"
9091
9688
  }
9092
9689
  ],
9093
9690
  "workflows": [
@@ -9108,14 +9705,12 @@
9108
9705
  {
9109
9706
  "name": "filter_by_period",
9110
9707
  "safety": "read",
9111
- "description": "Choose a period preset (e.g. this month, this year) and filter the register to it.",
9708
+ "description": "Filter the register to a created/scheduled date range via the per-column date filters.",
9112
9709
  "descriptionKey": "ui.agent.carePlans.workflows.filterByPeriod",
9113
9710
  "uiActions": [
9114
- "select.set_value",
9115
9711
  "data-table.apply_filter"
9116
9712
  ],
9117
9713
  "stateReads": [
9118
- "select.value",
9119
9714
  "data-table.filter"
9120
9715
  ],
9121
9716
  "apiActions": []
@@ -9687,41 +10282,182 @@
9687
10282
  },
9688
10283
  {
9689
10284
  "kind": "pattern",
9690
- "id": "marketplace-app-shell",
10285
+ "id": "invoices",
9691
10286
  "composes": [
9692
10287
  {
9693
- "component": "app-frame",
9694
- "as": "frame"
10288
+ "component": "data-table",
10289
+ "as": "ledger",
10290
+ "entity": "invoice"
9695
10291
  },
9696
10292
  {
9697
- "component": "header",
9698
- "as": "topBar"
10293
+ "component": "icon-button-group",
10294
+ "as": "tableActions"
9699
10295
  },
9700
10296
  {
9701
- "component": "sidebar",
9702
- "as": "mainNav",
9703
- "entity": "navItem"
10297
+ "component": "icon-button",
10298
+ "as": "tableAction"
9704
10299
  },
9705
10300
  {
9706
- "component": "tab-bar",
9707
- "as": "embeddedNav",
9708
- "entity": "navItem"
10301
+ "component": "badge",
10302
+ "as": "statusBadge"
9709
10303
  },
9710
10304
  {
9711
- "component": "avatar",
9712
- "as": "accountAvatar"
9713
- },
10305
+ "component": "button",
10306
+ "as": "rowAction"
10307
+ }
10308
+ ],
10309
+ "workflows": [
9714
10310
  {
9715
- "component": "dropdown-menu",
9716
- "as": "accountMenu"
10311
+ "name": "filter_invoices",
10312
+ "safety": "read",
10313
+ "description": "Narrow the ledger by number, relation, status, date range or amount using the per-column filters.",
10314
+ "descriptionKey": "ui.agent.invoices.workflows.filterInvoices",
10315
+ "uiActions": [
10316
+ "data-table.apply_filter"
10317
+ ],
10318
+ "stateReads": [
10319
+ "data-table.filter"
10320
+ ],
10321
+ "apiActions": [
10322
+ "invoice.list"
10323
+ ]
9717
10324
  },
9718
10325
  {
9719
- "component": "header-settings",
9720
- "as": "settings"
10326
+ "name": "sort_ledger",
10327
+ "safety": "read",
10328
+ "description": "Re-sort the ledger by any column (e.g. issue date, total, balance).",
10329
+ "descriptionKey": "ui.agent.invoices.workflows.sortLedger",
10330
+ "uiActions": [
10331
+ "data-table.sort_by"
10332
+ ],
10333
+ "stateReads": [
10334
+ "data-table.sort"
10335
+ ],
10336
+ "apiActions": []
9721
10337
  },
9722
10338
  {
9723
- "component": "sign-in-with-alfadocs-button",
9724
- "as": "connectCta"
10339
+ "name": "paginate",
10340
+ "safety": "read",
10341
+ "description": "Move to another page of the ledger.",
10342
+ "descriptionKey": "ui.agent.invoices.workflows.paginate",
10343
+ "uiActions": [
10344
+ "data-table.go_to_page"
10345
+ ],
10346
+ "stateReads": [
10347
+ "data-table.currentPage"
10348
+ ],
10349
+ "apiActions": []
10350
+ },
10351
+ {
10352
+ "name": "export_ledger",
10353
+ "safety": "read",
10354
+ "description": "Export the current (optionally filtered) ledger from the page-header table-tools cluster — CSV / Excel / PDF.",
10355
+ "descriptionKey": "ui.agent.invoices.workflows.exportLedger",
10356
+ "uiActions": [],
10357
+ "apiActions": [
10358
+ "invoice.export"
10359
+ ]
10360
+ },
10361
+ {
10362
+ "name": "view_invoice",
10363
+ "safety": "read",
10364
+ "description": "Open a single invoice from its row action to inspect line items and payment history.",
10365
+ "descriptionKey": "ui.agent.invoices.workflows.viewInvoice",
10366
+ "uiActions": [
10367
+ "data-table.get_selection"
10368
+ ],
10369
+ "stateReads": [
10370
+ "data-table.selection"
10371
+ ],
10372
+ "apiActions": [
10373
+ "invoice.get"
10374
+ ]
10375
+ },
10376
+ {
10377
+ "name": "download_pdf",
10378
+ "safety": "read",
10379
+ "description": "Download the selected invoice as a PDF from its row action.",
10380
+ "descriptionKey": "ui.agent.invoices.workflows.downloadPdf",
10381
+ "uiActions": [
10382
+ "data-table.get_selection"
10383
+ ],
10384
+ "stateReads": [
10385
+ "data-table.selection"
10386
+ ],
10387
+ "apiActions": [
10388
+ "invoice.downloadPdf"
10389
+ ]
10390
+ },
10391
+ {
10392
+ "name": "send_reminder",
10393
+ "safety": "write",
10394
+ "description": "Send a payment reminder for the selected invoice through its eligible channel (email or SMS).",
10395
+ "descriptionKey": "ui.agent.invoices.workflows.sendReminder",
10396
+ "uiActions": [
10397
+ "data-table.get_selection"
10398
+ ],
10399
+ "stateReads": [
10400
+ "data-table.selection"
10401
+ ],
10402
+ "apiActions": [
10403
+ "invoice.sendReminder"
10404
+ ]
10405
+ },
10406
+ {
10407
+ "name": "delete_invoice",
10408
+ "safety": "destructive",
10409
+ "description": "Delete the selected invoice from its row action. Paid invoices cannot be deleted. Irreversible.",
10410
+ "descriptionKey": "ui.agent.invoices.workflows.deleteInvoice",
10411
+ "uiActions": [
10412
+ "data-table.get_selection",
10413
+ "data-table.clear_selection"
10414
+ ],
10415
+ "stateReads": [
10416
+ "data-table.selection"
10417
+ ],
10418
+ "apiActions": [
10419
+ "invoice.delete"
10420
+ ]
10421
+ }
10422
+ ]
10423
+ },
10424
+ {
10425
+ "kind": "pattern",
10426
+ "id": "marketplace-app-shell",
10427
+ "composes": [
10428
+ {
10429
+ "component": "app-frame",
10430
+ "as": "frame"
10431
+ },
10432
+ {
10433
+ "component": "header",
10434
+ "as": "topBar"
10435
+ },
10436
+ {
10437
+ "component": "sidebar",
10438
+ "as": "mainNav",
10439
+ "entity": "navItem"
10440
+ },
10441
+ {
10442
+ "component": "tab-bar",
10443
+ "as": "embeddedNav",
10444
+ "entity": "navItem"
10445
+ },
10446
+ {
10447
+ "component": "avatar",
10448
+ "as": "accountAvatar"
10449
+ },
10450
+ {
10451
+ "component": "dropdown-menu",
10452
+ "as": "accountMenu"
10453
+ },
10454
+ {
10455
+ "component": "header-settings",
10456
+ "as": "settings"
10457
+ },
10458
+ {
10459
+ "component": "sign-in-with-alfadocs-button",
10460
+ "as": "connectCta"
9725
10461
  },
9726
10462
  {
9727
10463
  "component": "alert",
@@ -10547,8 +11283,8 @@
10547
11283
  "as": "bulkAction"
10548
11284
  },
10549
11285
  {
10550
- "component": "select",
10551
- "as": "viewSwitcher"
11286
+ "component": "icon-button-group",
11287
+ "as": "tableActions"
10552
11288
  }
10553
11289
  ],
10554
11290
  "workflows": [
@@ -10626,21 +11362,14 @@
10626
11362
  ]
10627
11363
  },
10628
11364
  {
10629
- "name": "apply_view",
11365
+ "name": "export_roster",
10630
11366
  "safety": "read",
10631
- "description": "Choose a saved view from the switcher to apply its filter and sort (and saved column layout) to the roster.",
10632
- "descriptionKey": "ui.agent.patients.workflows.applyView",
10633
- "uiActions": [
10634
- "select.set_value",
10635
- "data-table.apply_filter",
10636
- "data-table.sort_by"
10637
- ],
10638
- "stateReads": [
10639
- "select.value",
10640
- "data-table.filter",
10641
- "data-table.sort"
10642
- ],
10643
- "apiActions": []
11367
+ "description": "Export the current (optionally filtered) patient roster from the page-header table-tools cluster CSV / Excel / PDF.",
11368
+ "descriptionKey": "ui.agent.patients.workflows.exportRoster",
11369
+ "uiActions": [],
11370
+ "apiActions": [
11371
+ "patient.export"
11372
+ ]
10644
11373
  }
10645
11374
  ]
10646
11375
  },
@@ -11065,6 +11794,147 @@
11065
11794
  }
11066
11795
  ]
11067
11796
  },
11797
+ {
11798
+ "kind": "pattern",
11799
+ "id": "services",
11800
+ "composes": [
11801
+ {
11802
+ "component": "data-table",
11803
+ "as": "catalogue",
11804
+ "entity": "service"
11805
+ },
11806
+ {
11807
+ "component": "card",
11808
+ "as": "gridShell"
11809
+ },
11810
+ {
11811
+ "component": "icon-button-group",
11812
+ "as": "tableActions"
11813
+ },
11814
+ {
11815
+ "component": "icon-button",
11816
+ "as": "tableAction"
11817
+ },
11818
+ {
11819
+ "component": "switch",
11820
+ "as": "compactActionsToggle"
11821
+ }
11822
+ ],
11823
+ "workflows": [
11824
+ {
11825
+ "name": "filter_services",
11826
+ "safety": "read",
11827
+ "description": "Narrow the catalogue by name, code, category, VAT rate or active status using the per-column filters.",
11828
+ "descriptionKey": "ui.agent.services.workflows.filterServices",
11829
+ "uiActions": [
11830
+ "data-table.apply_filter"
11831
+ ],
11832
+ "stateReads": [
11833
+ "data-table.filter"
11834
+ ],
11835
+ "apiActions": [
11836
+ "service.list"
11837
+ ]
11838
+ },
11839
+ {
11840
+ "name": "sort_catalogue",
11841
+ "safety": "read",
11842
+ "description": "Re-sort the catalogue by any column (e.g. price, duration, active).",
11843
+ "descriptionKey": "ui.agent.services.workflows.sortCatalogue",
11844
+ "uiActions": [
11845
+ "data-table.sort_by"
11846
+ ],
11847
+ "stateReads": [
11848
+ "data-table.sort"
11849
+ ],
11850
+ "apiActions": []
11851
+ },
11852
+ {
11853
+ "name": "compact_actions",
11854
+ "safety": "read",
11855
+ "description": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
11856
+ "descriptionKey": "ui.agent.services.workflows.compactActions",
11857
+ "uiActions": [
11858
+ "switch.set_checked"
11859
+ ],
11860
+ "stateReads": [
11861
+ "switch.checked"
11862
+ ],
11863
+ "apiActions": []
11864
+ },
11865
+ {
11866
+ "name": "toggle_active",
11867
+ "safety": "write",
11868
+ "description": "Flip a service’s availability via its per-row Active toggle so it is offered (or withdrawn) on new plans.",
11869
+ "descriptionKey": "ui.agent.services.workflows.toggleActive",
11870
+ "uiActions": [
11871
+ "data-table.get_selection"
11872
+ ],
11873
+ "stateReads": [
11874
+ "data-table.selection"
11875
+ ],
11876
+ "apiActions": [
11877
+ "service.setActive"
11878
+ ]
11879
+ },
11880
+ {
11881
+ "name": "export_catalogue",
11882
+ "safety": "read",
11883
+ "description": "Export the current (optionally filtered) catalogue from the page-header table-tools cluster — CSV / Excel / PDF.",
11884
+ "descriptionKey": "ui.agent.services.workflows.exportCatalogue",
11885
+ "uiActions": [],
11886
+ "apiActions": [
11887
+ "service.export"
11888
+ ]
11889
+ },
11890
+ {
11891
+ "name": "edit_service",
11892
+ "safety": "write",
11893
+ "description": "Edit the selected service (e.g. price, duration, VAT) from its row action.",
11894
+ "descriptionKey": "ui.agent.services.workflows.editService",
11895
+ "uiActions": [
11896
+ "data-table.get_selection"
11897
+ ],
11898
+ "stateReads": [
11899
+ "data-table.selection"
11900
+ ],
11901
+ "apiActions": [
11902
+ "service.update"
11903
+ ]
11904
+ },
11905
+ {
11906
+ "name": "duplicate_service",
11907
+ "safety": "write",
11908
+ "description": "Duplicate the selected service into a new editable copy from its row action.",
11909
+ "descriptionKey": "ui.agent.services.workflows.duplicateService",
11910
+ "uiActions": [
11911
+ "data-table.get_selection"
11912
+ ],
11913
+ "stateReads": [
11914
+ "data-table.selection"
11915
+ ],
11916
+ "apiActions": [
11917
+ "service.duplicate"
11918
+ ]
11919
+ },
11920
+ {
11921
+ "name": "delete_service",
11922
+ "safety": "destructive",
11923
+ "description": "Delete the selected service from its row action. A service in use on a plan cannot be deleted. Irreversible.",
11924
+ "descriptionKey": "ui.agent.services.workflows.deleteService",
11925
+ "uiActions": [
11926
+ "data-table.get_selection",
11927
+ "data-table.clear_selection"
11928
+ ],
11929
+ "stateReads": [
11930
+ "data-table.selection"
11931
+ ],
11932
+ "apiActions": [
11933
+ "service.delete"
11934
+ ]
11935
+ }
11936
+ ]
11937
+ },
11068
11938
  {
11069
11939
  "kind": "pattern",
11070
11940
  "id": "settings",
@@ -11466,6 +12336,153 @@
11466
12336
  }
11467
12337
  ]
11468
12338
  },
12339
+ {
12340
+ "kind": "pattern",
12341
+ "id": "tasks",
12342
+ "composes": [
12343
+ {
12344
+ "component": "data-table",
12345
+ "as": "roster",
12346
+ "entity": "task"
12347
+ },
12348
+ {
12349
+ "component": "warning-stack",
12350
+ "as": "notices"
12351
+ },
12352
+ {
12353
+ "component": "switch",
12354
+ "as": "doneToggle"
12355
+ },
12356
+ {
12357
+ "component": "button",
12358
+ "as": "noticeAction"
12359
+ },
12360
+ {
12361
+ "component": "icon-button-group",
12362
+ "as": "tableActions"
12363
+ },
12364
+ {
12365
+ "component": "icon-button",
12366
+ "as": "tableAction"
12367
+ },
12368
+ {
12369
+ "component": "smart-date",
12370
+ "as": "dueDate"
12371
+ }
12372
+ ],
12373
+ "workflows": [
12374
+ {
12375
+ "name": "filter_tasks",
12376
+ "safety": "read",
12377
+ "description": "Narrow the roster by title, type, assignee, due range or status using the per-column filters.",
12378
+ "descriptionKey": "ui.agent.tasks.workflows.filterTasks",
12379
+ "uiActions": [
12380
+ "data-table.apply_filter"
12381
+ ],
12382
+ "stateReads": [
12383
+ "data-table.filter"
12384
+ ],
12385
+ "apiActions": [
12386
+ "task.list"
12387
+ ]
12388
+ },
12389
+ {
12390
+ "name": "filter_from_notice",
12391
+ "safety": "read",
12392
+ "description": "Apply a WarningStack notice’s \"View\" action (e.g. \"View overdue\", \"View collections\") to narrow the roster to the flagged tasks.",
12393
+ "descriptionKey": "ui.agent.tasks.workflows.filterFromNotice",
12394
+ "uiActions": [
12395
+ "data-table.apply_filter"
12396
+ ],
12397
+ "stateReads": [
12398
+ "data-table.filter"
12399
+ ],
12400
+ "apiActions": []
12401
+ },
12402
+ {
12403
+ "name": "sort_roster",
12404
+ "safety": "read",
12405
+ "description": "Re-sort the roster by any column (e.g. soonest due first, created date).",
12406
+ "descriptionKey": "ui.agent.tasks.workflows.sortRoster",
12407
+ "uiActions": [
12408
+ "data-table.sort_by"
12409
+ ],
12410
+ "stateReads": [
12411
+ "data-table.sort"
12412
+ ],
12413
+ "apiActions": []
12414
+ },
12415
+ {
12416
+ "name": "toggle_done",
12417
+ "safety": "write",
12418
+ "description": "Mark a task as done (or reopen it) via its per-row done toggle.",
12419
+ "descriptionKey": "ui.agent.tasks.workflows.toggleDone",
12420
+ "uiActions": [
12421
+ "switch.set_checked"
12422
+ ],
12423
+ "stateReads": [
12424
+ "switch.checked"
12425
+ ],
12426
+ "apiActions": [
12427
+ "task.setDone"
12428
+ ]
12429
+ },
12430
+ {
12431
+ "name": "compact_actions",
12432
+ "safety": "read",
12433
+ "description": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
12434
+ "descriptionKey": "ui.agent.tasks.workflows.compactActions",
12435
+ "uiActions": [
12436
+ "switch.set_checked"
12437
+ ],
12438
+ "stateReads": [
12439
+ "switch.checked"
12440
+ ],
12441
+ "apiActions": []
12442
+ },
12443
+ {
12444
+ "name": "export_roster",
12445
+ "safety": "read",
12446
+ "description": "Export the current (optionally filtered) roster from the page-header table-tools cluster — CSV / Excel / PDF.",
12447
+ "descriptionKey": "ui.agent.tasks.workflows.exportRoster",
12448
+ "uiActions": [],
12449
+ "apiActions": [
12450
+ "task.export"
12451
+ ]
12452
+ },
12453
+ {
12454
+ "name": "edit_task",
12455
+ "safety": "write",
12456
+ "description": "Edit the selected task from its row action.",
12457
+ "descriptionKey": "ui.agent.tasks.workflows.editTask",
12458
+ "uiActions": [
12459
+ "data-table.get_selection"
12460
+ ],
12461
+ "stateReads": [
12462
+ "data-table.selection"
12463
+ ],
12464
+ "apiActions": [
12465
+ "task.update"
12466
+ ]
12467
+ },
12468
+ {
12469
+ "name": "delete_task",
12470
+ "safety": "destructive",
12471
+ "description": "Delete the selected task from its row action. Completed tasks cannot be deleted. Irreversible.",
12472
+ "descriptionKey": "ui.agent.tasks.workflows.deleteTask",
12473
+ "uiActions": [
12474
+ "data-table.get_selection",
12475
+ "data-table.clear_selection"
12476
+ ],
12477
+ "stateReads": [
12478
+ "data-table.selection"
12479
+ ],
12480
+ "apiActions": [
12481
+ "task.delete"
12482
+ ]
12483
+ }
12484
+ ]
12485
+ },
11469
12486
  {
11470
12487
  "kind": "pattern",
11471
12488
  "id": "two-factor-login",
@@ -11636,6 +12653,156 @@
11636
12653
  ]
11637
12654
  }
11638
12655
  ]
12656
+ },
12657
+ {
12658
+ "kind": "pattern",
12659
+ "id": "warehouse",
12660
+ "composes": [
12661
+ {
12662
+ "component": "data-table",
12663
+ "as": "inventory",
12664
+ "entity": "inventoryItem"
12665
+ },
12666
+ {
12667
+ "component": "icon-button-group",
12668
+ "as": "tableActions"
12669
+ },
12670
+ {
12671
+ "component": "icon-button",
12672
+ "as": "tableAction"
12673
+ },
12674
+ {
12675
+ "component": "badge",
12676
+ "as": "statusBadge"
12677
+ },
12678
+ {
12679
+ "component": "switch",
12680
+ "as": "compactActionsToggle"
12681
+ },
12682
+ {
12683
+ "component": "dialog",
12684
+ "as": "importDialog"
12685
+ },
12686
+ {
12687
+ "component": "file-upload",
12688
+ "as": "xmlUpload"
12689
+ }
12690
+ ],
12691
+ "workflows": [
12692
+ {
12693
+ "name": "filter_inventory",
12694
+ "safety": "read",
12695
+ "description": "Narrow the inventory by product, SKU, category, supplier or stock status using the per-column filters.",
12696
+ "descriptionKey": "ui.agent.warehouse.workflows.filterInventory",
12697
+ "uiActions": [
12698
+ "data-table.apply_filter"
12699
+ ],
12700
+ "stateReads": [
12701
+ "data-table.filter"
12702
+ ],
12703
+ "apiActions": [
12704
+ "inventory.list"
12705
+ ]
12706
+ },
12707
+ {
12708
+ "name": "sort_inventory",
12709
+ "safety": "read",
12710
+ "description": "Re-sort the inventory by any column (e.g. in-stock, total value, last restocked).",
12711
+ "descriptionKey": "ui.agent.warehouse.workflows.sortInventory",
12712
+ "uiActions": [
12713
+ "data-table.sort_by"
12714
+ ],
12715
+ "stateReads": [
12716
+ "data-table.sort"
12717
+ ],
12718
+ "apiActions": []
12719
+ },
12720
+ {
12721
+ "name": "compact_actions",
12722
+ "safety": "read",
12723
+ "description": "Toggle the ColumnToggle settings-footer switch to compact the per-row action column.",
12724
+ "descriptionKey": "ui.agent.warehouse.workflows.compactActions",
12725
+ "uiActions": [
12726
+ "switch.set_checked"
12727
+ ],
12728
+ "stateReads": [
12729
+ "switch.checked"
12730
+ ],
12731
+ "apiActions": []
12732
+ },
12733
+ {
12734
+ "name": "export_inventory",
12735
+ "safety": "read",
12736
+ "description": "Export the current (optionally filtered) inventory from the page-header table-tools cluster — CSV / Excel / PDF.",
12737
+ "descriptionKey": "ui.agent.warehouse.workflows.exportInventory",
12738
+ "uiActions": [],
12739
+ "apiActions": [
12740
+ "inventory.export"
12741
+ ]
12742
+ },
12743
+ {
12744
+ "name": "stock_in",
12745
+ "safety": "write",
12746
+ "description": "Record incoming stock for the selected item from its row action.",
12747
+ "descriptionKey": "ui.agent.warehouse.workflows.stockIn",
12748
+ "uiActions": [
12749
+ "data-table.get_selection"
12750
+ ],
12751
+ "stateReads": [
12752
+ "data-table.selection"
12753
+ ],
12754
+ "apiActions": [
12755
+ "inventory.stockIn"
12756
+ ]
12757
+ },
12758
+ {
12759
+ "name": "stock_out",
12760
+ "safety": "write",
12761
+ "description": "Record outgoing stock for the selected item from its row action.",
12762
+ "descriptionKey": "ui.agent.warehouse.workflows.stockOut",
12763
+ "uiActions": [
12764
+ "data-table.get_selection"
12765
+ ],
12766
+ "stateReads": [
12767
+ "data-table.selection"
12768
+ ],
12769
+ "apiActions": [
12770
+ "inventory.stockOut"
12771
+ ]
12772
+ },
12773
+ {
12774
+ "name": "edit_item",
12775
+ "safety": "write",
12776
+ "description": "Edit the selected inventory item (e.g. min-stock threshold, supplier) from its row action.",
12777
+ "descriptionKey": "ui.agent.warehouse.workflows.editItem",
12778
+ "uiActions": [
12779
+ "data-table.get_selection"
12780
+ ],
12781
+ "stateReads": [
12782
+ "data-table.selection"
12783
+ ],
12784
+ "apiActions": [
12785
+ "inventory.update"
12786
+ ]
12787
+ },
12788
+ {
12789
+ "name": "import_fatturapa",
12790
+ "safety": "write",
12791
+ "description": "Open the FatturaPA XML import dialog, upload supplier e-invoice XML files, review the classified line preview, deselect any unwanted lines, and confirm to create articles and stock movements.",
12792
+ "descriptionKey": "ui.agent.warehouse.workflows.importFatturapa",
12793
+ "uiActions": [
12794
+ "dialog.open",
12795
+ "file-upload.clear"
12796
+ ],
12797
+ "stateReads": [
12798
+ "dialog.isOpen",
12799
+ "file-upload.files"
12800
+ ],
12801
+ "apiActions": [
12802
+ "inventory.importFatturapa"
12803
+ ]
12804
+ }
12805
+ ]
11639
12806
  }
11640
12807
  ]
11641
12808
  }