Marc-André Bombeck
d6571c4e9c
feat(symptoms): add person-defined symptoms and timestamped occurrences
...
A symptom of one's own ("aura", "headache") is a definition with an
encrypted name and an icon from the cycle custom-symptom allowlist; each
occurrence carries a time, a 0-10 intensity (the pain score's scale), an
optional encrypted note and an optional link to one of the record's open
illness episodes. Both ride the illness module: every route answers
illness.disabled when it is off.
- Migration 0369 (idempotent): symptom_definitions and symptom_events,
intensity CHECK 0-10, episode link ON DELETE SET NULL.
- /api/symptoms/definitions{,/[id]} and /api/symptoms/events{,/[id]}:
eight active definitions per record (a hidden one frees its slot,
showing it again re-checks), hide or purge, events create/list/edit/
delete, a new link must name an open episode of the same record
(422 symptoms.episode.notOpen). Error group symptoms.*.
- Sharing: reads at READ, logging an occurrence at WRITE, defining and
editing at MANAGE; C1/C3/C4 audit details; frozen lists, the handler
matrix and the activity verbs updated.
- Both encrypted columns registered and rotated; both models in the wipe
plan; both carried at both backup ends with occurrences nested in their
definition, plaintext in a portable file and ciphertext in a recovery
file, and a link to an episode the file lacks dropped and named
(symptomEpisodeReference).
- OpenAPI regenerated.
2026-10-03 21:13:45 +02:00
..
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-03-10 20:14:33 +01:00
2026-04-06 00:42:46 +02:00
2026-04-18 22:20:12 +02:00
2026-05-08 01:05:56 +02:00
2026-05-03 21:52:57 +02:00
2026-05-08 01:05:56 +02:00
2026-05-08 14:33:39 +02:00
2026-05-08 14:29:44 +02:00
2026-05-08 21:36:36 +02:00
2026-05-08 21:45:18 +02:00
2026-05-09 21:01:45 +02:00
2026-05-09 21:04:04 +02:00
2026-05-09 21:14:00 +02:00
2026-05-09 21:36:47 +02:00
2026-05-09 23:46:56 +02:00
2026-05-10 00:20:12 +02:00
2026-05-10 01:25:57 +02:00
2026-05-10 15:54:28 +02:00
2026-05-11 02:44:12 +02:00
2026-05-11 00:35:58 +02:00
2026-05-11 01:35:45 +02:00
2026-05-11 01:36:27 +02:00
2026-05-11 01:51:27 +02:00
2026-05-11 02:13:47 +02:00
2026-05-11 02:38:17 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-15 22:59:10 +02:00
2026-05-16 12:37:55 +02:00
2026-05-16 12:37:55 +02:00
2026-05-16 12:37:55 +02:00
2026-05-16 14:19:57 +02:00
2026-05-16 21:25:26 +02:00
2026-05-17 09:55:33 +02:00
2026-05-17 13:22:51 +02:00
2026-05-17 23:08:17 +02:00
2026-05-21 07:39:10 +02:00
2026-05-21 07:39:10 +02:00
2026-05-21 07:39:10 +02:00
2026-05-21 11:20:24 +02:00
2026-05-21 12:48:02 +02:00
2026-05-21 23:13:21 +02:00
2026-05-22 09:18:52 +02:00
2026-05-22 09:18:52 +02:00
2026-05-22 09:18:52 +02:00
2026-05-23 12:51:41 +02:00
2026-05-23 12:51:41 +02:00
2026-05-28 07:52:11 +02:00
2026-05-28 19:33:11 +02:00
2026-05-28 22:32:18 +02:00
2026-05-28 22:32:40 +02:00
2026-05-28 22:39:20 +02:00
2026-05-28 23:38:21 +02:00
2026-05-29 22:07:10 +02:00
2026-05-30 00:10:12 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-05-31 14:36:17 +02:00
2026-06-01 17:31:45 +02:00
2026-06-01 20:25:34 +02:00
2026-06-01 20:25:34 +02:00
2026-06-01 20:25:42 +02:00
2026-06-01 23:24:10 +02:00
2026-06-02 16:45:23 +02:00
2026-06-02 22:02:50 +02:00
2026-06-02 22:07:28 +02:00
2026-06-02 23:43:22 +02:00
2026-06-02 22:02:46 +02:00
2026-06-02 22:49:43 +02:00
2026-06-03 19:31:16 +02:00
2026-06-04 00:49:31 +02:00
2026-06-04 00:49:31 +02:00
2026-06-04 00:50:13 +02:00
2026-06-04 01:21:42 +02:00
2026-06-04 03:38:19 +02:00
2026-06-04 09:29:49 +02:00
2026-06-04 10:11:19 +02:00
2026-06-04 21:02:10 +02:00
2026-06-04 22:36:58 +02:00
2026-06-05 01:05:47 +02:00
2026-06-05 01:07:27 +02:00
2026-06-05 03:01:36 +02:00
2026-06-05 03:01:36 +02:00
2026-06-05 03:01:36 +02:00
2026-06-05 08:10:13 +02:00
2026-06-05 14:45:58 +02:00
2026-06-05 15:28:47 +02:00
2026-06-05 20:50:05 +02:00
2026-06-06 08:19:32 +02:00
2026-06-06 08:19:32 +02:00
2026-06-06 08:19:32 +02:00
2026-06-06 11:49:23 +02:00
2026-06-06 08:57:12 +02:00
2026-06-06 12:39:28 +02:00
2026-06-06 16:54:43 +02:00
2026-06-07 13:26:41 +02:00
2026-06-07 19:23:59 +02:00
2026-06-08 18:29:05 +02:00
2026-06-10 13:34:46 +02:00
2026-06-10 15:40:48 +02:00
2026-06-10 15:40:48 +02:00
2026-06-10 15:40:48 +02:00
2026-06-10 16:18:48 +02:00
2026-06-10 16:18:48 +02:00
2026-06-10 22:21:44 +02:00
2026-06-11 00:10:01 +02:00
2026-06-11 11:45:58 +02:00
2026-06-11 13:57:15 +02:00
2026-06-11 21:17:05 +02:00
2026-06-12 17:42:31 +02:00
2026-06-12 18:10:21 +02:00
2026-06-12 21:04:09 +02:00
2026-06-12 22:03:01 +02:00
2026-06-12 22:56:03 +02:00
2026-06-13 16:07:50 +02:00
2026-06-14 10:29:22 +02:00
2026-06-14 15:04:25 +02:00
2026-06-14 15:23:26 +02:00
2026-06-14 17:19:09 +02:00
2026-06-14 17:42:00 +02:00
2026-06-14 21:23:56 +02:00
2026-06-14 20:58:49 +02:00
2026-06-15 01:49:28 +02:00
2026-06-14 23:20:54 +02:00
2026-06-14 23:22:52 +02:00
2026-06-15 00:09:33 +02:00
2026-06-15 00:07:30 +02:00
2026-06-15 20:53:46 +02:00
2026-06-15 22:44:35 +02:00
2026-06-16 20:36:13 +02:00
2026-06-16 23:11:08 +02:00
2026-06-16 23:11:08 +02:00
2026-06-16 23:11:08 +02:00
2026-06-18 19:27:28 +02:00
2026-06-18 20:17:13 +02:00
2026-06-18 21:37:13 +02:00
2026-06-18 22:05:17 +02:00
2026-06-18 22:41:47 +02:00
2026-06-19 20:52:31 +02:00
2026-06-19 21:25:22 +02:00
2026-06-19 22:07:46 +02:00
2026-06-20 11:17:43 +02:00
2026-06-20 11:58:58 +02:00
2026-06-20 16:52:19 +02:00
2026-06-20 16:50:06 +02:00
2026-06-21 10:22:29 +02:00
2026-06-21 10:44:15 +02:00
2026-06-21 21:06:17 +02:00
2026-06-21 21:06:09 +02:00
2026-06-21 21:06:42 +02:00
2026-06-22 07:01:42 +02:00
2026-06-22 07:20:41 +02:00
2026-06-26 12:05:49 +02:00
2026-06-26 13:24:30 +02:00
2026-06-27 01:25:35 +02:00
2026-06-27 12:48:48 +02:00
2026-06-27 13:37:50 +02:00
2026-06-27 15:46:03 +02:00
2026-06-27 15:46:03 +02:00
2026-06-27 19:33:10 +02:00
2026-06-27 19:33:10 +02:00
2026-06-27 19:33:10 +02:00
2026-06-27 19:56:16 +02:00
2026-06-27 20:34:31 +02:00
2026-06-27 21:49:39 +02:00
2026-06-27 20:37:35 +02:00
2026-06-28 00:52:04 +02:00
2026-06-28 00:52:04 +02:00
2026-06-28 03:05:10 +02:00
2026-06-28 03:07:15 +02:00
2026-06-28 03:28:37 +02:00
2026-06-28 15:47:39 +02:00
2026-06-28 15:47:25 +02:00
2026-06-28 16:02:54 +02:00
2026-06-28 16:02:54 +02:00
2026-06-28 16:58:13 +02:00
2026-06-28 16:56:54 +02:00
2026-06-28 17:35:45 +02:00
2026-06-28 18:12:51 +02:00
2026-06-28 19:06:21 +02:00
2026-06-29 00:37:39 +02:00
2026-06-30 08:59:44 +02:00
2026-07-03 14:13:06 +02:00
2026-07-05 14:54:17 +02:00
2026-07-05 20:33:29 +02:00
2026-07-07 11:04:31 +02:00
2026-07-07 18:08:12 +02:00
2026-07-07 18:34:58 +02:00
2026-07-09 02:34:06 +02:00
2026-07-09 10:32:59 +02:00
2026-07-09 12:45:50 +02:00
2026-07-09 21:25:25 +02:00
2026-07-09 23:29:06 +02:00
2026-07-10 00:10:56 +02:00
2026-07-10 01:15:32 +02:00
2026-07-10 02:08:03 +02:00
2026-07-10 21:23:00 +02:00
2026-07-11 00:18:23 +02:00
2026-07-14 11:43:53 +02:00
2026-07-14 13:10:47 +02:00
2026-07-15 22:07:25 +02:00
2026-07-16 06:47:36 +02:00
2026-07-16 22:57:27 +02:00
2026-07-16 23:32:28 +02:00
2026-07-17 14:28:56 +02:00
2026-07-17 14:29:07 +02:00
2026-07-17 16:08:39 +02:00
2026-07-17 17:46:28 +02:00
2026-07-17 23:12:12 +02:00
2026-07-18 16:50:56 +02:00
2026-07-18 18:04:26 +02:00
2026-07-19 10:01:06 +02:00
2026-07-19 11:41:12 +02:00
2026-07-19 13:01:45 +02:00
2026-07-19 13:17:34 +02:00
2026-07-19 13:47:25 +02:00
2026-07-20 00:40:20 +02:00
2026-07-20 00:40:20 +02:00
2026-07-20 00:40:20 +02:00
2026-07-21 13:08:28 +02:00
2026-07-22 04:14:15 +02:00
2026-07-22 04:14:15 +02:00
2026-07-22 04:14:15 +02:00
2026-07-23 09:16:03 +02:00
2026-07-24 02:28:51 +02:00
2026-07-24 03:50:14 +02:00
2026-07-25 06:15:37 +02:00
2026-07-25 11:36:18 +02:00
2026-07-25 15:03:44 +02:00
2026-07-25 18:41:40 +02:00
2026-07-25 21:23:26 +02:00
2026-07-26 00:46:03 +02:00
2026-07-26 14:04:56 +02:00
2026-07-26 14:19:26 +02:00
2026-07-26 16:37:21 +02:00
2026-07-26 18:00:20 +02:00
2026-07-26 22:27:48 +02:00
2026-07-27 14:35:33 +02:00
2026-07-27 23:00:19 +02:00
2026-07-28 21:11:43 +02:00
2026-07-28 14:01:11 +02:00
2026-07-28 14:01:11 +02:00
2026-07-29 14:49:12 +02:00
2026-07-31 08:06:07 +02:00
2026-07-31 15:01:23 +02:00
2026-07-31 15:38:50 +02:00
2026-08-01 19:19:01 +02:00
2026-08-02 10:03:04 +02:00
2026-08-02 11:31:41 +02:00
2026-08-02 13:04:25 +02:00
2026-08-02 16:36:12 +02:00
2026-08-04 17:11:40 +02:00
2026-08-06 02:28:56 +02:00
2026-08-06 04:38:09 +02:00
2026-08-06 02:00:35 +02:00
2026-08-06 09:42:47 +02:00
2026-08-06 14:05:59 +02:00
2026-08-06 20:48:50 +02:00
2026-08-07 21:40:41 +02:00
2026-08-08 01:03:05 +02:00
2026-08-08 06:51:42 +02:00
2026-08-08 11:10:25 +02:00
2026-08-08 07:14:02 +02:00
2026-08-08 15:17:05 +02:00
2026-08-08 13:35:03 +02:00
2026-08-10 05:32:58 +02:00
2026-08-10 07:58:48 +02:00
2026-08-13 12:40:50 +02:00
2026-08-14 08:54:43 +02:00
2026-09-02 10:44:03 +02:00
2026-09-10 10:15:31 +02:00
2026-09-10 10:28:57 +02:00
2026-09-10 11:03:24 +02:00
2026-09-10 15:32:35 +02:00
2026-09-11 12:37:54 +02:00
2026-09-11 12:37:54 +02:00
2026-09-24 07:36:47 +02:00
2026-09-24 09:03:58 +02:00
2026-09-24 12:30:39 +02:00
2026-09-25 06:55:22 +02:00
2026-09-25 08:49:45 +02:00
2026-09-25 08:11:37 +02:00
2026-09-25 07:25:29 +02:00
2026-09-25 08:57:10 +02:00
2026-09-26 01:02:48 +02:00
2026-09-25 22:35:11 +02:00
2026-09-25 21:55:14 +02:00
2026-09-26 10:41:02 +02:00
2026-09-26 14:20:17 +02:00
2026-09-26 19:46:01 +02:00
2026-09-26 19:54:40 +02:00
2026-09-26 19:54:38 +02:00
2026-09-27 10:36:27 +02:00
2026-09-27 10:37:37 +02:00
2026-09-27 11:24:41 +02:00
2026-09-27 13:46:38 +02:00
2026-09-30 22:51:02 +02:00
2026-10-03 18:06:28 +02:00
2026-10-03 18:18:56 +02:00
2026-10-03 17:53:36 +02:00
2026-10-03 21:13:45 +02:00
2026-05-09 21:04:04 +02:00