hamed and Claude Opus 5
9af763bfbe
feat(resource): let a resource type declare the fields recorded against it
...
What an operator writes down after treating an area is decided by the device,
not by the service: a laser has energy, pulse and shot count, an RF unit has
something else. So the field list lives on the resource type, and adding a new
kind of device becomes a settings change rather than a migration.
One validator covers both directions — the schema when a manager saves it and
the values when an operator submits them. Splitting them would let a schema be
stored that no value can ever satisfy.
A value whose key is not in the schema is rejected rather than stored: silently
keeping it means the operator believes they recorded something that will never
be shown back to them. Option matching compares as strings so "18" and 18 are
one option, not two.
The migration seeds the laser type's three fields onto existing rows that have
none, so clinics already running laser devices do not start from an empty form.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-06 17:05:48 +03:30
..
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-09 22:00:34 +03:30
2026-06-10 10:03:46 +03:30
2026-06-10 13:02:47 +03:30
2026-06-10 14:22:26 +03:30
2026-06-10 14:32:00 +03:30
2026-06-10 14:45:01 +03:30
2026-06-10 14:45:01 +03:30
2026-06-10 15:09:19 +03:30
2026-06-28 09:32:27 +03:30
2026-06-10 21:29:29 +03:30
2026-06-10 22:13:39 +03:30
2026-06-28 09:32:27 +03:30
2026-06-11 12:20:12 +03:30
2026-06-11 12:20:12 +03:30
2026-06-12 12:31:27 +03:30
2026-06-12 13:39:37 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-14 22:10:28 +03:30
2026-06-15 11:03:56 +03:30
2026-06-15 11:03:56 +03:30
2026-06-15 11:19:37 +03:30
2026-06-15 17:53:27 +03:30
2026-06-16 00:25:59 +03:30
2026-06-19 10:19:47 +03:30
2026-06-19 20:42:04 +03:30
2026-06-19 20:42:04 +03:30
2026-06-21 12:35:22 +03:30
2026-06-21 13:26:47 +03:30
2026-06-22 19:44:17 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 15:05:24 +03:30
2026-06-23 16:10:36 +03:30
2026-06-23 22:13:51 +03:30
2026-06-24 11:52:13 +03:30
2026-06-24 13:06:17 +03:30
2026-06-24 13:17:08 +03:30
2026-06-24 16:14:41 +03:30
2026-06-25 17:34:39 +03:30
2026-06-25 19:38:47 +03:30
2026-06-28 17:04:23 +03:30
2026-06-28 17:13:44 +03:30
2026-06-28 19:04:54 +03:30
2026-06-28 19:08:26 +03:30
2026-06-28 19:10:53 +03:30
2026-06-28 20:28:24 +03:30
2026-06-28 21:03:54 +03:30
2026-06-29 20:01:03 +03:30
2026-07-02 10:09:14 +03:30
2026-07-02 15:36:08 +03:30
2026-07-03 12:30:03 +03:30
2026-07-05 10:46:31 +03:30
2026-07-05 11:20:53 +03:30
2026-07-05 11:54:12 +03:30
2026-07-08 00:03:33 +03:30
2026-07-08 12:19:06 +03:30
2026-07-09 07:26:58 +03:30
2026-07-11 08:59:36 +03:30
2026-07-11 11:39:15 +03:30
2026-07-11 11:39:15 +03:30
2026-07-13 08:41:29 +03:30
2026-07-13 08:41:29 +03:30
2026-07-13 11:51:18 +03:30
2026-07-13 13:28:51 +03:30
2026-07-13 14:16:21 +03:30
2026-07-13 14:54:38 +03:30
2026-07-13 15:20:00 +03:30
2026-07-13 15:27:34 +03:30
2026-07-13 15:35:10 +03:30
2026-07-13 16:01:16 +03:30
2026-07-13 23:37:32 +03:30
2026-07-15 11:39:32 +03:30
2026-07-15 12:23:17 +03:30
2026-07-15 13:23:38 +03:30
2026-07-15 13:48:29 +03:30
2026-07-15 14:32:29 +03:30
2026-07-15 23:15:45 +03:30
2026-07-16 10:10:47 +03:30
2026-07-16 12:22:37 +03:30
2026-07-16 12:51:33 +03:30
2026-07-16 13:32:06 +03:30
2026-07-16 14:20:32 +03:30
2026-07-16 19:44:30 +03:30
2026-07-16 19:44:30 +03:30
2026-07-17 11:13:23 +03:30
2026-07-17 11:47:33 +03:30
2026-07-17 12:02:03 +03:30
2026-07-17 10:21:52 +03:30
2026-07-17 14:44:23 +03:30
2026-07-17 15:06:25 +03:30
2026-07-18 09:44:13 +03:30
2026-07-18 12:26:15 +03:30
2026-07-18 12:26:15 +03:30
2026-07-18 12:34:42 +03:30
2026-07-18 13:32:56 +03:30
2026-07-18 16:55:39 +03:30
2026-07-18 22:56:46 +03:30
2026-07-18 23:38:02 +03:30
2026-07-19 08:23:57 +03:30
2026-07-19 20:19:35 +03:30
2026-07-19 20:19:35 +03:30
2026-07-23 15:37:58 +03:30
2026-07-23 23:13:15 +03:30
2026-07-23 23:13:15 +03:30
2026-07-25 16:21:19 +03:30
2026-07-25 16:21:19 +03:30
2026-07-25 16:21:19 +03:30
2026-07-25 17:50:14 +03:30
2026-07-25 17:50:14 +03:30
2026-07-25 17:50:14 +03:30
2026-07-25 18:34:18 +03:30
2026-07-25 18:34:18 +03:30
2026-07-25 18:34:18 +03:30
2026-07-28 11:22:37 +03:30
2026-07-28 11:56:57 +03:30
2026-07-28 11:56:57 +03:30
2026-07-28 11:56:57 +03:30
2026-07-28 11:56:57 +03:30
2026-07-28 15:06:28 +03:30
2026-07-28 15:06:28 +03:30
2026-07-28 15:21:55 +03:30
2026-07-28 16:50:51 +03:30
2026-07-29 13:28:59 +03:30
2026-07-29 19:57:02 +03:30
2026-07-30 10:18:41 +03:30
2026-07-30 12:47:48 +03:30
2026-07-30 16:28:04 +03:30
2026-07-30 17:34:36 +03:30
2026-07-30 18:14:23 +03:30
2026-07-30 18:44:02 +03:30
2026-07-30 21:07:30 +03:30
2026-07-30 21:21:33 +03:30
2026-07-31 09:28:55 +03:30
2026-07-31 09:42:21 +03:30
2026-07-31 10:19:19 +03:30
2026-07-31 10:44:28 +03:30
2026-07-31 11:11:03 +03:30
2026-07-31 11:33:07 +03:30
2026-07-31 11:33:07 +03:30
2026-07-31 12:06:48 +03:30
2026-07-31 12:27:54 +03:30
2026-08-01 15:56:50 +03:30
2026-08-01 20:50:47 +03:30
2026-08-02 12:23:36 +03:30
2026-08-01 21:43:12 +03:30
2026-08-01 21:43:12 +03:30
2026-08-01 21:48:45 +03:30
2026-08-02 15:25:32 +03:30
2026-08-02 18:00:48 +03:30
2026-08-03 12:15:42 +03:30
2026-08-04 12:30:17 +03:30
2026-08-04 12:30:17 +03:30
2026-08-04 19:38:49 +03:30
2026-08-06 16:06:29 +03:30
2026-08-06 16:36:04 +03:30
2026-08-06 16:53:50 +03:30
2026-08-06 17:05:48 +03:30