@happyvertical/smrt-education 0.57.37 → 0.57.39

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 (61) hide show
  1. package/AGENTS.md +8 -0
  2. package/agents/catalog-previews.md +98 -0
  3. package/agents/family-intake.md +97 -0
  4. package/dist/catalog-contracts.d.ts +2 -0
  5. package/dist/catalog-contracts.d.ts.map +1 -1
  6. package/dist/catalog-database-sync-store.d.ts.map +1 -1
  7. package/dist/catalog-models.d.ts +5 -0
  8. package/dist/catalog-models.d.ts.map +1 -1
  9. package/dist/catalog-preview.d.ts +63 -0
  10. package/dist/catalog-preview.d.ts.map +1 -0
  11. package/dist/catalog-read-service.d.ts +3 -0
  12. package/dist/catalog-read-service.d.ts.map +1 -1
  13. package/dist/catalog.d.ts +4 -4
  14. package/dist/catalog.d.ts.map +1 -1
  15. package/dist/chunks/{workbook-photo-service-1wcnf-Xf.js → workbook-photo-service-DCmqeWLd.js} +448 -202
  16. package/dist/chunks/workbook-photo-service-DCmqeWLd.js.map +1 -0
  17. package/dist/course-source.d.ts +2 -2
  18. package/dist/course-source.d.ts.map +1 -1
  19. package/dist/family-intake-contracts.d.ts +56 -0
  20. package/dist/family-intake-contracts.d.ts.map +1 -0
  21. package/dist/family-intake-ingestion.d.ts +29 -0
  22. package/dist/family-intake-ingestion.d.ts.map +1 -0
  23. package/dist/family-intake-models.d.ts +58 -0
  24. package/dist/family-intake-models.d.ts.map +1 -0
  25. package/dist/family-intake-service.d.ts +70 -0
  26. package/dist/family-intake-service.d.ts.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +289 -13
  30. package/dist/index.js.map +1 -1
  31. package/dist/ingestion.d.ts +2 -0
  32. package/dist/ingestion.d.ts.map +1 -1
  33. package/dist/ingestion.js +426 -13
  34. package/dist/ingestion.js.map +1 -1
  35. package/dist/intake-original-evidence.d.ts +10 -0
  36. package/dist/intake-original-evidence.d.ts.map +1 -0
  37. package/dist/learner-service.d.ts +2 -0
  38. package/dist/learner-service.d.ts.map +1 -1
  39. package/dist/learners.d.ts +5 -5
  40. package/dist/learners.d.ts.map +1 -1
  41. package/dist/lesson-assets.d.ts +2 -2
  42. package/dist/lesson-assets.d.ts.map +1 -1
  43. package/dist/manifest.json +1447 -162
  44. package/dist/smrt-knowledge.json +563 -10
  45. package/dist/sources/public-illustrative-mathematics-adapter.d.ts +4 -2
  46. package/dist/sources/public-illustrative-mathematics-adapter.d.ts.map +1 -1
  47. package/dist/sources/public-illustrative-mathematics-parser.d.ts +5 -0
  48. package/dist/sources/public-illustrative-mathematics-parser.d.ts.map +1 -1
  49. package/dist/submission-service.d.ts +1 -1
  50. package/dist/submission-service.d.ts.map +1 -1
  51. package/dist/submissions.d.ts +7 -7
  52. package/dist/submissions.d.ts.map +1 -1
  53. package/dist/workbook-models.d.ts +8 -8
  54. package/dist/workbook-models.d.ts.map +1 -1
  55. package/dist/workbook-photo-ingestion.d.ts.map +1 -1
  56. package/dist/workbook-photo-models.d.ts +6 -5
  57. package/dist/workbook-photo-models.d.ts.map +1 -1
  58. package/dist/workbook-photo-service.d.ts +6 -0
  59. package/dist/workbook-photo-service.d.ts.map +1 -1
  60. package/package.json +10 -10
  61. package/dist/chunks/workbook-photo-service-1wcnf-Xf.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-education",
5
- "packageVersion": "0.57.37",
5
+ "packageVersion": "0.57.39",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-education:CatalogProviderCollection": {
8
8
  "name": "catalogprovidercollection",
@@ -108,7 +108,7 @@
108
108
  "collectionExportName": "CatalogResourceCollectionCollection",
109
109
  "schema": {
110
110
  "tableName": "catalog_resources",
111
- "ddl": "CREATE TABLE IF NOT EXISTS \"catalog_resources\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"provider_id\" TEXT NOT NULL,\n \"stable_id\" TEXT NOT NULL,\n \"revision\" TEXT NOT NULL,\n \"canonical_url\" TEXT,\n \"title\" TEXT NOT NULL,\n \"supplied_description\" TEXT,\n \"author\" TEXT,\n \"subjects\" TEXT,\n \"grades\" TEXT,\n \"language\" TEXT,\n \"resource_type\" TEXT,\n \"parent_stable_id\" TEXT,\n \"available_formats\" TEXT,\n \"representation\" TEXT,\n \"license_evidence\" TEXT,\n \"license_state\" TEXT DEFAULT 'unknown',\n \"visibility\" TEXT DEFAULT 'catalog',\n \"last_seen_run_id\" TEXT,\n \"withdrawn_at\" TEXT\n);",
111
+ "ddl": "CREATE TABLE IF NOT EXISTS \"catalog_resources\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"provider_id\" TEXT NOT NULL,\n \"stable_id\" TEXT NOT NULL,\n \"revision\" TEXT NOT NULL,\n \"canonical_url\" TEXT,\n \"title\" TEXT NOT NULL,\n \"supplied_description\" TEXT,\n \"author\" TEXT,\n \"subjects\" TEXT,\n \"grades\" TEXT,\n \"language\" TEXT,\n \"resource_type\" TEXT,\n \"parent_stable_id\" TEXT,\n \"available_formats\" TEXT,\n \"representation\" TEXT,\n \"preview\" TEXT,\n \"license_evidence\" TEXT,\n \"license_state\" TEXT DEFAULT 'unknown',\n \"visibility\" TEXT DEFAULT 'catalog',\n \"last_seen_run_id\" TEXT,\n \"withdrawn_at\" TEXT\n);",
112
112
  "columns": {
113
113
  "id": {
114
114
  "type": "UUID",
@@ -205,6 +205,11 @@
205
205
  "notNull": false,
206
206
  "unique": false
207
207
  },
208
+ "preview": {
209
+ "type": "TEXT",
210
+ "notNull": false,
211
+ "unique": false
212
+ },
208
213
  "license_evidence": {
209
214
  "type": "TEXT",
210
215
  "notNull": false,
@@ -249,7 +254,7 @@
249
254
  ]
250
255
  }
251
256
  ],
252
- "version": "e75f6bd0"
257
+ "version": "6ea66f0d"
253
258
  },
254
259
  "importPath": "@happyvertical/smrt-education"
255
260
  },
@@ -809,6 +814,10 @@
809
814
  "type": "text",
810
815
  "required": false
811
816
  },
817
+ "preview": {
818
+ "type": "text",
819
+ "required": false
820
+ },
812
821
  "licenseEvidence": {
813
822
  "type": "text",
814
823
  "required": false
@@ -843,6 +852,36 @@
843
852
  }
844
853
  },
845
854
  "methods": {
855
+ "getPreview": {
856
+ "name": "getPreview",
857
+ "async": false,
858
+ "parameters": [],
859
+ "returnType": "CatalogPreview | undefined",
860
+ "isStatic": false,
861
+ "isPublic": true
862
+ },
863
+ "setPreview": {
864
+ "name": "setPreview",
865
+ "async": false,
866
+ "parameters": [
867
+ {
868
+ "name": "value",
869
+ "type": "CatalogPreview | undefined",
870
+ "optional": false,
871
+ "unionBranches": [
872
+ {
873
+ "type": "CatalogPreview"
874
+ },
875
+ {
876
+ "type": "undefined"
877
+ }
878
+ ]
879
+ }
880
+ ],
881
+ "returnType": "void",
882
+ "isStatic": false,
883
+ "isPublic": true
884
+ },
846
885
  "getRepresentation": {
847
886
  "name": "getRepresentation",
848
887
  "async": false,
@@ -907,7 +946,7 @@
907
946
  ],
908
947
  "schema": {
909
948
  "tableName": "catalog_resources",
910
- "ddl": "CREATE TABLE IF NOT EXISTS \"catalog_resources\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"provider_id\" TEXT NOT NULL,\n \"stable_id\" TEXT NOT NULL,\n \"revision\" TEXT NOT NULL,\n \"canonical_url\" TEXT,\n \"title\" TEXT NOT NULL,\n \"supplied_description\" TEXT,\n \"author\" TEXT,\n \"subjects\" TEXT,\n \"grades\" TEXT,\n \"language\" TEXT,\n \"resource_type\" TEXT,\n \"parent_stable_id\" TEXT,\n \"available_formats\" TEXT,\n \"representation\" TEXT,\n \"license_evidence\" TEXT,\n \"license_state\" TEXT DEFAULT 'unknown',\n \"visibility\" TEXT DEFAULT 'catalog',\n \"last_seen_run_id\" TEXT,\n \"withdrawn_at\" TEXT\n);",
949
+ "ddl": "CREATE TABLE IF NOT EXISTS \"catalog_resources\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"provider_id\" TEXT NOT NULL,\n \"stable_id\" TEXT NOT NULL,\n \"revision\" TEXT NOT NULL,\n \"canonical_url\" TEXT,\n \"title\" TEXT NOT NULL,\n \"supplied_description\" TEXT,\n \"author\" TEXT,\n \"subjects\" TEXT,\n \"grades\" TEXT,\n \"language\" TEXT,\n \"resource_type\" TEXT,\n \"parent_stable_id\" TEXT,\n \"available_formats\" TEXT,\n \"representation\" TEXT,\n \"preview\" TEXT,\n \"license_evidence\" TEXT,\n \"license_state\" TEXT DEFAULT 'unknown',\n \"visibility\" TEXT DEFAULT 'catalog',\n \"last_seen_run_id\" TEXT,\n \"withdrawn_at\" TEXT\n);",
911
950
  "columns": {
912
951
  "id": {
913
952
  "type": "UUID",
@@ -1004,6 +1043,11 @@
1004
1043
  "notNull": false,
1005
1044
  "unique": false
1006
1045
  },
1046
+ "preview": {
1047
+ "type": "TEXT",
1048
+ "notNull": false,
1049
+ "unique": false
1050
+ },
1007
1051
  "license_evidence": {
1008
1052
  "type": "TEXT",
1009
1053
  "notNull": false,
@@ -1048,7 +1092,7 @@
1048
1092
  ]
1049
1093
  }
1050
1094
  ],
1051
- "version": "e75f6bd0"
1095
+ "version": "6ea66f0d"
1052
1096
  },
1053
1097
  "importPath": "@happyvertical/smrt-education"
1054
1098
  },
@@ -1777,7 +1821,13 @@
1777
1821
  "save": {
1778
1822
  "name": "save",
1779
1823
  "async": true,
1780
- "parameters": [],
1824
+ "parameters": [
1825
+ {
1826
+ "name": "options",
1827
+ "type": "SmrtSaveOptions",
1828
+ "optional": true
1829
+ }
1830
+ ],
1781
1831
  "returnType": "Promise<this>",
1782
1832
  "isStatic": false,
1783
1833
  "isPublic": true
@@ -2118,7 +2168,13 @@
2118
2168
  "save": {
2119
2169
  "name": "save",
2120
2170
  "async": true,
2121
- "parameters": [],
2171
+ "parameters": [
2172
+ {
2173
+ "name": "options",
2174
+ "type": "SmrtSaveOptions",
2175
+ "optional": true
2176
+ }
2177
+ ],
2122
2178
  "returnType": "Promise<this>",
2123
2179
  "isStatic": false,
2124
2180
  "isPublic": true
@@ -2451,7 +2507,13 @@
2451
2507
  "save": {
2452
2508
  "name": "save",
2453
2509
  "async": true,
2454
- "parameters": [],
2510
+ "parameters": [
2511
+ {
2512
+ "name": "options",
2513
+ "type": "SmrtSaveOptions",
2514
+ "optional": true
2515
+ }
2516
+ ],
2455
2517
  "returnType": "Promise<this>",
2456
2518
  "isStatic": false,
2457
2519
  "isPublic": true
@@ -2698,7 +2760,13 @@
2698
2760
  "save": {
2699
2761
  "name": "save",
2700
2762
  "async": true,
2701
- "parameters": [],
2763
+ "parameters": [
2764
+ {
2765
+ "name": "options",
2766
+ "type": "SmrtSaveOptions",
2767
+ "optional": true
2768
+ }
2769
+ ],
2702
2770
  "returnType": "Promise<this>",
2703
2771
  "isStatic": false,
2704
2772
  "isPublic": true
@@ -2931,7 +2999,13 @@
2931
2999
  "save": {
2932
3000
  "name": "save",
2933
3001
  "async": true,
2934
- "parameters": [],
3002
+ "parameters": [
3003
+ {
3004
+ "name": "options",
3005
+ "type": "SmrtSaveOptions",
3006
+ "optional": true
3007
+ }
3008
+ ],
2935
3009
  "returnType": "Promise<this>",
2936
3010
  "isStatic": false,
2937
3011
  "isPublic": true
@@ -3233,7 +3307,13 @@
3233
3307
  "save": {
3234
3308
  "name": "save",
3235
3309
  "async": true,
3236
- "parameters": [],
3310
+ "parameters": [
3311
+ {
3312
+ "name": "options",
3313
+ "type": "SmrtSaveOptions",
3314
+ "optional": true
3315
+ }
3316
+ ],
3237
3317
  "returnType": "Promise<this>",
3238
3318
  "isStatic": false,
3239
3319
  "isPublic": true
@@ -3531,7 +3611,13 @@
3531
3611
  "save": {
3532
3612
  "name": "save",
3533
3613
  "async": true,
3534
- "parameters": [],
3614
+ "parameters": [
3615
+ {
3616
+ "name": "options",
3617
+ "type": "SmrtSaveOptions",
3618
+ "optional": true
3619
+ }
3620
+ ],
3535
3621
  "returnType": "Promise<this>",
3536
3622
  "isStatic": false,
3537
3623
  "isPublic": true
@@ -3838,7 +3924,13 @@
3838
3924
  "save": {
3839
3925
  "name": "save",
3840
3926
  "async": true,
3841
- "parameters": [],
3927
+ "parameters": [
3928
+ {
3929
+ "name": "options",
3930
+ "type": "SmrtSaveOptions",
3931
+ "optional": true
3932
+ }
3933
+ ],
3842
3934
  "returnType": "Promise<this>",
3843
3935
  "isStatic": false,
3844
3936
  "isPublic": true
@@ -4137,7 +4229,13 @@
4137
4229
  "save": {
4138
4230
  "name": "save",
4139
4231
  "async": true,
4140
- "parameters": [],
4232
+ "parameters": [
4233
+ {
4234
+ "name": "options",
4235
+ "type": "SmrtSaveOptions",
4236
+ "optional": true
4237
+ }
4238
+ ],
4141
4239
  "returnType": "Promise<this>",
4142
4240
  "isStatic": false,
4143
4241
  "isPublic": true
@@ -8037,7 +8135,13 @@
8037
8135
  "save": {
8038
8136
  "name": "save",
8039
8137
  "async": true,
8040
- "parameters": [],
8138
+ "parameters": [
8139
+ {
8140
+ "name": "options",
8141
+ "type": "SmrtSaveOptions",
8142
+ "optional": true
8143
+ }
8144
+ ],
8041
8145
  "returnType": "Promise<this>",
8042
8146
  "isStatic": false,
8043
8147
  "isPublic": true
@@ -8270,13 +8374,13 @@
8270
8374
  },
8271
8375
  "importPath": "@happyvertical/smrt-education"
8272
8376
  },
8273
- "@happyvertical/smrt-education:Learner": {
8274
- "name": "learner",
8275
- "className": "Learner",
8276
- "qualifiedName": "@happyvertical/smrt-education:Learner",
8277
- "collection": "learners",
8278
- "description": "A learner is a real user/profile identity with active family membership.",
8279
- "filePath": "/home/runner/work/smrt/smrt/packages/education/src/learners.ts",
8377
+ "@happyvertical/smrt-education:FamilyIntake": {
8378
+ "name": "familyintake",
8379
+ "className": "FamilyIntake",
8380
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntake",
8381
+ "collection": "familyintakes",
8382
+ "description": "Family-owned receipt, independent of learner attribution and ingestion expiry.",
8383
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
8280
8384
  "packageName": "@happyvertical/smrt-education",
8281
8385
  "fields": {
8282
8386
  "tenantId": {
@@ -8296,102 +8400,73 @@
8296
8400
  }
8297
8401
  }
8298
8402
  },
8299
- "userId": {
8300
- "type": "crossPackageRef",
8301
- "required": true,
8302
- "related": "@happyvertical/smrt-users:User"
8303
- },
8304
- "profileId": {
8305
- "type": "crossPackageRef",
8306
- "required": true,
8307
- "related": "@happyvertical/smrt-profiles:Profile"
8308
- },
8309
- "displayName": {
8403
+ "itemId": {
8310
8404
  "type": "text",
8311
8405
  "required": false
8312
8406
  },
8313
- "birthDate": {
8314
- "type": "datetime",
8407
+ "actorUserId": {
8408
+ "type": "text",
8315
8409
  "required": false
8316
8410
  },
8317
- "level": {
8318
- "type": "integer",
8319
- "required": true,
8320
- "default": 0
8411
+ "ownerProfileId": {
8412
+ "type": "crossPackageRef",
8413
+ "required": false,
8414
+ "related": "@happyvertical/smrt-profiles:Profile"
8321
8415
  },
8322
- "settings": {
8416
+ "contentDigest": {
8323
8417
  "type": "text",
8324
8418
  "required": false
8419
+ },
8420
+ "sourceJson": {
8421
+ "type": "text",
8422
+ "required": false,
8423
+ "_meta": {}
8325
8424
  }
8326
8425
  },
8327
8426
  "methods": {
8328
- "getSettings": {
8329
- "name": "getSettings",
8330
- "async": false,
8331
- "parameters": [],
8332
- "returnType": "Record<string, unknown>",
8333
- "isStatic": false,
8334
- "isPublic": true
8335
- },
8336
- "setSettings": {
8337
- "name": "setSettings",
8338
- "async": false,
8427
+ "save": {
8428
+ "name": "save",
8429
+ "async": true,
8339
8430
  "parameters": [
8340
8431
  {
8341
- "name": "value",
8342
- "type": "Record<string, unknown>",
8343
- "optional": false
8432
+ "name": "options",
8433
+ "type": "SmrtSaveOptions",
8434
+ "optional": true
8344
8435
  }
8345
8436
  ],
8346
- "returnType": "void",
8437
+ "returnType": "Promise<this>",
8347
8438
  "isStatic": false,
8348
8439
  "isPublic": true
8349
8440
  },
8350
- "save": {
8351
- "name": "save",
8441
+ "delete": {
8442
+ "name": "delete",
8352
8443
  "async": true,
8353
8444
  "parameters": [],
8354
- "returnType": "Promise<this>",
8445
+ "returnType": "Promise<void>",
8355
8446
  "isStatic": false,
8356
8447
  "isPublic": true
8357
8448
  }
8358
8449
  },
8359
8450
  "decoratorConfig": {
8451
+ "tableName": "family_intakes",
8452
+ "conflictColumns": [
8453
+ "tenant_id",
8454
+ "item_id"
8455
+ ],
8360
8456
  "api": false,
8361
8457
  "mcp": false,
8362
8458
  "cli": false,
8363
8459
  "tenantScoped": {
8364
8460
  "mode": "required"
8365
- },
8366
- "conflictColumns": [
8367
- "tenant_id",
8368
- "slug",
8369
- "context"
8370
- ]
8461
+ }
8371
8462
  },
8372
8463
  "extends": "SmrtObject",
8373
- "exportName": "Learner",
8374
- "collectionExportName": "LearnerCollection",
8375
- "validationRules": [
8376
- {
8377
- "field": "userId",
8378
- "rule": "required",
8379
- "fieldType": "crossPackageRef"
8380
- },
8381
- {
8382
- "field": "profileId",
8383
- "rule": "required",
8384
- "fieldType": "crossPackageRef"
8385
- },
8386
- {
8387
- "field": "level",
8388
- "rule": "required",
8389
- "fieldType": "integer"
8390
- }
8391
- ],
8464
+ "exportName": "FamilyIntake",
8465
+ "collectionExportName": "FamilyIntakeCollection",
8466
+ "validationRules": [],
8392
8467
  "schema": {
8393
- "tableName": "learners",
8394
- "ddl": "CREATE TABLE IF NOT EXISTS \"learners\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"user_id\" UUID NOT NULL,\n \"profile_id\" UUID NOT NULL,\n \"display_name\" TEXT,\n \"birth_date\" TIMESTAMP,\n \"level\" INTEGER NOT NULL DEFAULT 0,\n \"settings\" TEXT\n);",
8468
+ "tableName": "family_intakes",
8469
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"owner_profile_id\" UUID,\n \"content_digest\" TEXT,\n \"source_json\" TEXT\n);",
8395
8470
  "columns": {
8396
8471
  "id": {
8397
8472
  "type": "UUID",
@@ -8424,35 +8499,28 @@
8424
8499
  "notNull": true,
8425
8500
  "unique": false
8426
8501
  },
8427
- "user_id": {
8428
- "type": "UUID",
8429
- "referenceKind": "crossPackageRef",
8430
- "notNull": true,
8431
- "unique": false
8432
- },
8433
- "profile_id": {
8434
- "type": "UUID",
8435
- "referenceKind": "crossPackageRef",
8436
- "notNull": true,
8502
+ "item_id": {
8503
+ "type": "TEXT",
8504
+ "notNull": false,
8437
8505
  "unique": false
8438
8506
  },
8439
- "display_name": {
8507
+ "actor_user_id": {
8440
8508
  "type": "TEXT",
8441
8509
  "notNull": false,
8442
8510
  "unique": false
8443
8511
  },
8444
- "birth_date": {
8445
- "type": "TIMESTAMP",
8512
+ "owner_profile_id": {
8513
+ "type": "UUID",
8514
+ "referenceKind": "crossPackageRef",
8446
8515
  "notNull": false,
8447
8516
  "unique": false
8448
8517
  },
8449
- "level": {
8450
- "type": "INTEGER",
8451
- "notNull": true,
8452
- "unique": false,
8453
- "default": 0
8518
+ "content_digest": {
8519
+ "type": "TEXT",
8520
+ "notNull": false,
8521
+ "unique": false
8454
8522
  },
8455
- "settings": {
8523
+ "source_json": {
8456
8524
  "type": "TEXT",
8457
8525
  "notNull": false,
8458
8526
  "unique": false
@@ -8460,59 +8528,1103 @@
8460
8528
  },
8461
8529
  "indexes": [
8462
8530
  {
8463
- "name": "learners_slug_context_idx",
8531
+ "name": "family_intakes_tenant_id_item_id_idx",
8464
8532
  "columns": [
8465
8533
  "tenant_id",
8466
- "slug",
8467
- "context"
8534
+ "item_id"
8468
8535
  ],
8469
- "unique": true
8536
+ "unique": true,
8537
+ "nullsNotDistinct": true
8470
8538
  },
8471
8539
  {
8472
- "name": "learners_tenant_id_created_at_idx",
8540
+ "name": "family_intakes_slug_context_idx",
8473
8541
  "columns": [
8474
- "tenant_id",
8475
- "created_at"
8542
+ "slug",
8543
+ "context"
8476
8544
  ]
8477
8545
  },
8478
8546
  {
8479
- "name": "learners_user_id_idx",
8547
+ "name": "family_intakes_tenant_id_created_at_idx",
8480
8548
  "columns": [
8481
- "user_id"
8549
+ "tenant_id",
8550
+ "created_at"
8482
8551
  ]
8483
8552
  },
8484
8553
  {
8485
- "name": "learners_profile_id_idx",
8554
+ "name": "family_intakes_owner_profile_id_idx",
8486
8555
  "columns": [
8487
- "profile_id"
8556
+ "owner_profile_id"
8488
8557
  ]
8489
8558
  }
8490
8559
  ],
8491
- "version": "ca9907b5"
8560
+ "version": "2577578b"
8492
8561
  },
8493
8562
  "importPath": "@happyvertical/smrt-education"
8494
8563
  },
8495
- "@happyvertical/smrt-education:Curriculum": {
8496
- "name": "curriculum",
8497
- "className": "Curriculum",
8498
- "qualifiedName": "@happyvertical/smrt-education:Curriculum",
8499
- "collection": "curriculums",
8500
- "description": "A distinct plan retains its own enrollment history.",
8501
- "filePath": "/home/runner/work/smrt/smrt/packages/education/src/learners.ts",
8564
+ "@happyvertical/smrt-education:FamilyIntakeCollection": {
8565
+ "name": "familyintakecollection",
8566
+ "className": "FamilyIntakeCollection",
8567
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntakeCollection",
8568
+ "collection": "familyintakes",
8569
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
8502
8570
  "packageName": "@happyvertical/smrt-education",
8503
- "fields": {
8504
- "tenantId": {
8505
- "type": "text",
8506
- "required": true,
8507
- "_meta": {
8508
- "sqlType": "UUID",
8509
- "__tenancy": {
8510
- "isTenantIdField": true,
8511
- "autoFilter": true,
8512
- "required": true,
8513
- "autoPopulate": true,
8514
- "nullable": false,
8515
- "mode": "required",
8571
+ "fields": {},
8572
+ "methods": {},
8573
+ "decoratorConfig": {
8574
+ "tableName": "family_intakes",
8575
+ "api": false,
8576
+ "mcp": false,
8577
+ "cli": false
8578
+ },
8579
+ "extends": "SmrtCollection",
8580
+ "extendsTypeArg": "FamilyIntake",
8581
+ "exportName": "FamilyIntakeCollection",
8582
+ "collectionExportName": "FamilyIntakeCollectionCollection",
8583
+ "schema": {
8584
+ "tableName": "family_intakes",
8585
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"owner_profile_id\" UUID,\n \"content_digest\" TEXT,\n \"source_json\" TEXT\n);",
8586
+ "columns": {
8587
+ "id": {
8588
+ "type": "UUID",
8589
+ "primaryKey": true,
8590
+ "referenceKind": "id",
8591
+ "notNull": true
8592
+ },
8593
+ "slug": {
8594
+ "type": "TEXT",
8595
+ "notNull": true
8596
+ },
8597
+ "context": {
8598
+ "type": "TEXT",
8599
+ "notNull": true,
8600
+ "default": ""
8601
+ },
8602
+ "created_at": {
8603
+ "type": "TIMESTAMP",
8604
+ "notNull": true,
8605
+ "default": "current_timestamp"
8606
+ },
8607
+ "updated_at": {
8608
+ "type": "TIMESTAMP",
8609
+ "notNull": true,
8610
+ "default": "current_timestamp"
8611
+ },
8612
+ "tenant_id": {
8613
+ "type": "UUID",
8614
+ "referenceKind": "tenantId",
8615
+ "notNull": true,
8616
+ "unique": false
8617
+ },
8618
+ "item_id": {
8619
+ "type": "TEXT",
8620
+ "notNull": false,
8621
+ "unique": false
8622
+ },
8623
+ "actor_user_id": {
8624
+ "type": "TEXT",
8625
+ "notNull": false,
8626
+ "unique": false
8627
+ },
8628
+ "owner_profile_id": {
8629
+ "type": "UUID",
8630
+ "referenceKind": "crossPackageRef",
8631
+ "notNull": false,
8632
+ "unique": false
8633
+ },
8634
+ "content_digest": {
8635
+ "type": "TEXT",
8636
+ "notNull": false,
8637
+ "unique": false
8638
+ },
8639
+ "source_json": {
8640
+ "type": "TEXT",
8641
+ "notNull": false,
8642
+ "unique": false
8643
+ }
8644
+ },
8645
+ "indexes": [
8646
+ {
8647
+ "name": "family_intakes_tenant_id_item_id_idx",
8648
+ "columns": [
8649
+ "tenant_id",
8650
+ "item_id"
8651
+ ],
8652
+ "unique": true,
8653
+ "nullsNotDistinct": true
8654
+ },
8655
+ {
8656
+ "name": "family_intakes_slug_context_idx",
8657
+ "columns": [
8658
+ "slug",
8659
+ "context"
8660
+ ]
8661
+ },
8662
+ {
8663
+ "name": "family_intakes_tenant_id_created_at_idx",
8664
+ "columns": [
8665
+ "tenant_id",
8666
+ "created_at"
8667
+ ]
8668
+ },
8669
+ {
8670
+ "name": "family_intakes_owner_profile_id_idx",
8671
+ "columns": [
8672
+ "owner_profile_id"
8673
+ ]
8674
+ }
8675
+ ],
8676
+ "version": "2577578b"
8677
+ },
8678
+ "importPath": "@happyvertical/smrt-education"
8679
+ },
8680
+ "@happyvertical/smrt-education:FamilyIntakeAsset": {
8681
+ "name": "familyintakeasset",
8682
+ "className": "FamilyIntakeAsset",
8683
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntakeAsset",
8684
+ "collection": "familyintakeassets",
8685
+ "description": "Sole family owner join; adoption borrows this exact immutable original.",
8686
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
8687
+ "packageName": "@happyvertical/smrt-education",
8688
+ "fields": {
8689
+ "tenantId": {
8690
+ "type": "text",
8691
+ "required": true,
8692
+ "_meta": {
8693
+ "sqlType": "UUID",
8694
+ "__tenancy": {
8695
+ "isTenantIdField": true,
8696
+ "autoFilter": true,
8697
+ "required": true,
8698
+ "autoPopulate": true,
8699
+ "nullable": false,
8700
+ "mode": "required",
8701
+ "field": "tenantId",
8702
+ "allowSuperAdminBypass": false
8703
+ }
8704
+ }
8705
+ },
8706
+ "intakeId": {
8707
+ "type": "foreignKey",
8708
+ "required": true,
8709
+ "related": "FamilyIntake",
8710
+ "_meta": {
8711
+ "required": true
8712
+ }
8713
+ },
8714
+ "assetId": {
8715
+ "type": "crossPackageRef",
8716
+ "required": false,
8717
+ "related": "@happyvertical/smrt-assets:Asset"
8718
+ },
8719
+ "name": {
8720
+ "type": "text",
8721
+ "required": false
8722
+ },
8723
+ "mimeType": {
8724
+ "type": "text",
8725
+ "required": false
8726
+ },
8727
+ "sha256": {
8728
+ "type": "text",
8729
+ "required": false
8730
+ },
8731
+ "position": {
8732
+ "type": "integer",
8733
+ "required": true,
8734
+ "default": 0
8735
+ }
8736
+ },
8737
+ "methods": {
8738
+ "save": {
8739
+ "name": "save",
8740
+ "async": true,
8741
+ "parameters": [
8742
+ {
8743
+ "name": "options",
8744
+ "type": "SmrtSaveOptions",
8745
+ "optional": true
8746
+ }
8747
+ ],
8748
+ "returnType": "Promise<this>",
8749
+ "isStatic": false,
8750
+ "isPublic": true
8751
+ },
8752
+ "delete": {
8753
+ "name": "delete",
8754
+ "async": true,
8755
+ "parameters": [],
8756
+ "returnType": "Promise<void>",
8757
+ "isStatic": false,
8758
+ "isPublic": true
8759
+ }
8760
+ },
8761
+ "decoratorConfig": {
8762
+ "tableName": "family_intake_assets",
8763
+ "conflictColumns": [
8764
+ "tenant_id",
8765
+ "intake_id",
8766
+ "asset_id"
8767
+ ],
8768
+ "api": false,
8769
+ "mcp": false,
8770
+ "cli": false,
8771
+ "tenantScoped": {
8772
+ "mode": "required"
8773
+ }
8774
+ },
8775
+ "extends": "SmrtObject",
8776
+ "exportName": "FamilyIntakeAsset",
8777
+ "collectionExportName": "FamilyIntakeAssetCollection",
8778
+ "displayLabelField": "name",
8779
+ "validationRules": [
8780
+ {
8781
+ "field": "intakeId",
8782
+ "rule": "required",
8783
+ "fieldType": "foreignKey"
8784
+ },
8785
+ {
8786
+ "field": "position",
8787
+ "rule": "required",
8788
+ "fieldType": "integer"
8789
+ }
8790
+ ],
8791
+ "schema": {
8792
+ "tableName": "family_intake_assets",
8793
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intake_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"intake_id\" UUID NOT NULL,\n \"asset_id\" UUID,\n \"name\" TEXT,\n \"mime_type\" TEXT,\n \"sha256\" TEXT,\n \"position\" INTEGER NOT NULL DEFAULT 0\n);",
8794
+ "columns": {
8795
+ "id": {
8796
+ "type": "UUID",
8797
+ "primaryKey": true,
8798
+ "referenceKind": "id",
8799
+ "notNull": true
8800
+ },
8801
+ "slug": {
8802
+ "type": "TEXT",
8803
+ "notNull": true
8804
+ },
8805
+ "context": {
8806
+ "type": "TEXT",
8807
+ "notNull": true,
8808
+ "default": ""
8809
+ },
8810
+ "created_at": {
8811
+ "type": "TIMESTAMP",
8812
+ "notNull": true,
8813
+ "default": "current_timestamp"
8814
+ },
8815
+ "updated_at": {
8816
+ "type": "TIMESTAMP",
8817
+ "notNull": true,
8818
+ "default": "current_timestamp"
8819
+ },
8820
+ "tenant_id": {
8821
+ "type": "UUID",
8822
+ "referenceKind": "tenantId",
8823
+ "notNull": true,
8824
+ "unique": false
8825
+ },
8826
+ "intake_id": {
8827
+ "type": "UUID",
8828
+ "referenceKind": "foreignKey",
8829
+ "notNull": true,
8830
+ "unique": false,
8831
+ "foreignKey": {
8832
+ "table": "family_intakes",
8833
+ "column": "id",
8834
+ "onDelete": "CASCADE",
8835
+ "onUpdate": "CASCADE"
8836
+ }
8837
+ },
8838
+ "asset_id": {
8839
+ "type": "UUID",
8840
+ "referenceKind": "crossPackageRef",
8841
+ "notNull": false,
8842
+ "unique": false
8843
+ },
8844
+ "name": {
8845
+ "type": "TEXT",
8846
+ "notNull": false,
8847
+ "unique": false
8848
+ },
8849
+ "mime_type": {
8850
+ "type": "TEXT",
8851
+ "notNull": false,
8852
+ "unique": false
8853
+ },
8854
+ "sha256": {
8855
+ "type": "TEXT",
8856
+ "notNull": false,
8857
+ "unique": false
8858
+ },
8859
+ "position": {
8860
+ "type": "INTEGER",
8861
+ "notNull": true,
8862
+ "unique": false,
8863
+ "default": 0
8864
+ }
8865
+ },
8866
+ "indexes": [
8867
+ {
8868
+ "name": "family_intake_assets_tenant_id_intake_id_idx",
8869
+ "columns": [
8870
+ "tenant_id",
8871
+ "intake_id",
8872
+ "asset_id"
8873
+ ],
8874
+ "unique": true,
8875
+ "nullsNotDistinct": true
8876
+ },
8877
+ {
8878
+ "name": "family_intake_assets_slug_context_idx",
8879
+ "columns": [
8880
+ "slug",
8881
+ "context"
8882
+ ]
8883
+ },
8884
+ {
8885
+ "name": "family_intake_assets_tenant_id_created_at_idx",
8886
+ "columns": [
8887
+ "tenant_id",
8888
+ "created_at"
8889
+ ]
8890
+ },
8891
+ {
8892
+ "name": "family_intake_assets_intake_id_idx",
8893
+ "columns": [
8894
+ "intake_id"
8895
+ ]
8896
+ },
8897
+ {
8898
+ "name": "family_intake_assets_asset_id_idx",
8899
+ "columns": [
8900
+ "asset_id"
8901
+ ]
8902
+ }
8903
+ ],
8904
+ "version": "3811d126"
8905
+ },
8906
+ "importPath": "@happyvertical/smrt-education"
8907
+ },
8908
+ "@happyvertical/smrt-education:FamilyIntakeAssetCollection": {
8909
+ "name": "familyintakeassetcollection",
8910
+ "className": "FamilyIntakeAssetCollection",
8911
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntakeAssetCollection",
8912
+ "collection": "familyintakeassets",
8913
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
8914
+ "packageName": "@happyvertical/smrt-education",
8915
+ "fields": {},
8916
+ "methods": {},
8917
+ "decoratorConfig": {
8918
+ "tableName": "family_intake_assets",
8919
+ "api": false,
8920
+ "mcp": false,
8921
+ "cli": false
8922
+ },
8923
+ "extends": "SmrtCollection",
8924
+ "extendsTypeArg": "FamilyIntakeAsset",
8925
+ "exportName": "FamilyIntakeAssetCollection",
8926
+ "collectionExportName": "FamilyIntakeAssetCollectionCollection",
8927
+ "schema": {
8928
+ "tableName": "family_intake_assets",
8929
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intake_assets\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"intake_id\" UUID NOT NULL,\n \"asset_id\" UUID,\n \"name\" TEXT,\n \"mime_type\" TEXT,\n \"sha256\" TEXT,\n \"position\" INTEGER NOT NULL DEFAULT 0\n);",
8930
+ "columns": {
8931
+ "id": {
8932
+ "type": "UUID",
8933
+ "primaryKey": true,
8934
+ "referenceKind": "id",
8935
+ "notNull": true
8936
+ },
8937
+ "slug": {
8938
+ "type": "TEXT",
8939
+ "notNull": true
8940
+ },
8941
+ "context": {
8942
+ "type": "TEXT",
8943
+ "notNull": true,
8944
+ "default": ""
8945
+ },
8946
+ "created_at": {
8947
+ "type": "TIMESTAMP",
8948
+ "notNull": true,
8949
+ "default": "current_timestamp"
8950
+ },
8951
+ "updated_at": {
8952
+ "type": "TIMESTAMP",
8953
+ "notNull": true,
8954
+ "default": "current_timestamp"
8955
+ },
8956
+ "tenant_id": {
8957
+ "type": "UUID",
8958
+ "referenceKind": "tenantId",
8959
+ "notNull": true,
8960
+ "unique": false
8961
+ },
8962
+ "intake_id": {
8963
+ "type": "UUID",
8964
+ "referenceKind": "foreignKey",
8965
+ "notNull": true,
8966
+ "unique": false,
8967
+ "foreignKey": {
8968
+ "table": "family_intakes",
8969
+ "column": "id",
8970
+ "onDelete": "CASCADE",
8971
+ "onUpdate": "CASCADE"
8972
+ }
8973
+ },
8974
+ "asset_id": {
8975
+ "type": "UUID",
8976
+ "referenceKind": "crossPackageRef",
8977
+ "notNull": false,
8978
+ "unique": false
8979
+ },
8980
+ "name": {
8981
+ "type": "TEXT",
8982
+ "notNull": false,
8983
+ "unique": false
8984
+ },
8985
+ "mime_type": {
8986
+ "type": "TEXT",
8987
+ "notNull": false,
8988
+ "unique": false
8989
+ },
8990
+ "sha256": {
8991
+ "type": "TEXT",
8992
+ "notNull": false,
8993
+ "unique": false
8994
+ },
8995
+ "position": {
8996
+ "type": "INTEGER",
8997
+ "notNull": true,
8998
+ "unique": false,
8999
+ "default": 0
9000
+ }
9001
+ },
9002
+ "indexes": [
9003
+ {
9004
+ "name": "family_intake_assets_tenant_id_intake_id_idx",
9005
+ "columns": [
9006
+ "tenant_id",
9007
+ "intake_id",
9008
+ "asset_id"
9009
+ ],
9010
+ "unique": true,
9011
+ "nullsNotDistinct": true
9012
+ },
9013
+ {
9014
+ "name": "family_intake_assets_slug_context_idx",
9015
+ "columns": [
9016
+ "slug",
9017
+ "context"
9018
+ ]
9019
+ },
9020
+ {
9021
+ "name": "family_intake_assets_tenant_id_created_at_idx",
9022
+ "columns": [
9023
+ "tenant_id",
9024
+ "created_at"
9025
+ ]
9026
+ },
9027
+ {
9028
+ "name": "family_intake_assets_intake_id_idx",
9029
+ "columns": [
9030
+ "intake_id"
9031
+ ]
9032
+ },
9033
+ {
9034
+ "name": "family_intake_assets_asset_id_idx",
9035
+ "columns": [
9036
+ "asset_id"
9037
+ ]
9038
+ }
9039
+ ],
9040
+ "version": "3811d126"
9041
+ },
9042
+ "importPath": "@happyvertical/smrt-education"
9043
+ },
9044
+ "@happyvertical/smrt-education:FamilyIntakeDecision": {
9045
+ "name": "familyintakedecision",
9046
+ "className": "FamilyIntakeDecision",
9047
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntakeDecision",
9048
+ "collection": "familyintakedecisions",
9049
+ "description": "Append-only attribution/adoption audit; no marks or learning outcomes.",
9050
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
9051
+ "packageName": "@happyvertical/smrt-education",
9052
+ "fields": {
9053
+ "tenantId": {
9054
+ "type": "text",
9055
+ "required": true,
9056
+ "_meta": {
9057
+ "sqlType": "UUID",
9058
+ "__tenancy": {
9059
+ "isTenantIdField": true,
9060
+ "autoFilter": true,
9061
+ "required": true,
9062
+ "autoPopulate": true,
9063
+ "nullable": false,
9064
+ "mode": "required",
9065
+ "field": "tenantId",
9066
+ "allowSuperAdminBypass": false
9067
+ }
9068
+ }
9069
+ },
9070
+ "intakeId": {
9071
+ "type": "foreignKey",
9072
+ "required": true,
9073
+ "related": "FamilyIntake",
9074
+ "_meta": {
9075
+ "required": true
9076
+ }
9077
+ },
9078
+ "requestKey": {
9079
+ "type": "text",
9080
+ "required": false
9081
+ },
9082
+ "sequence": {
9083
+ "type": "integer",
9084
+ "required": true,
9085
+ "default": 0
9086
+ },
9087
+ "actorUserId": {
9088
+ "type": "text",
9089
+ "required": false
9090
+ },
9091
+ "bodyJson": {
9092
+ "type": "text",
9093
+ "required": false,
9094
+ "_meta": {}
9095
+ }
9096
+ },
9097
+ "methods": {
9098
+ "save": {
9099
+ "name": "save",
9100
+ "async": true,
9101
+ "parameters": [
9102
+ {
9103
+ "name": "options",
9104
+ "type": "SmrtSaveOptions",
9105
+ "optional": true
9106
+ }
9107
+ ],
9108
+ "returnType": "Promise<this>",
9109
+ "isStatic": false,
9110
+ "isPublic": true
9111
+ },
9112
+ "delete": {
9113
+ "name": "delete",
9114
+ "async": true,
9115
+ "parameters": [],
9116
+ "returnType": "Promise<void>",
9117
+ "isStatic": false,
9118
+ "isPublic": true
9119
+ }
9120
+ },
9121
+ "decoratorConfig": {
9122
+ "tableName": "family_intake_decisions",
9123
+ "conflictColumns": [
9124
+ "tenant_id",
9125
+ "intake_id",
9126
+ "request_key"
9127
+ ],
9128
+ "api": false,
9129
+ "mcp": false,
9130
+ "cli": false,
9131
+ "tenantScoped": {
9132
+ "mode": "required"
9133
+ }
9134
+ },
9135
+ "extends": "SmrtObject",
9136
+ "exportName": "FamilyIntakeDecision",
9137
+ "collectionExportName": "FamilyIntakeDecisionCollection",
9138
+ "validationRules": [
9139
+ {
9140
+ "field": "intakeId",
9141
+ "rule": "required",
9142
+ "fieldType": "foreignKey"
9143
+ },
9144
+ {
9145
+ "field": "sequence",
9146
+ "rule": "required",
9147
+ "fieldType": "integer"
9148
+ }
9149
+ ],
9150
+ "schema": {
9151
+ "tableName": "family_intake_decisions",
9152
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intake_decisions\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"intake_id\" UUID NOT NULL,\n \"request_key\" TEXT,\n \"sequence\" INTEGER NOT NULL DEFAULT 0,\n \"actor_user_id\" TEXT,\n \"body_json\" TEXT\n);",
9153
+ "columns": {
9154
+ "id": {
9155
+ "type": "UUID",
9156
+ "primaryKey": true,
9157
+ "referenceKind": "id",
9158
+ "notNull": true
9159
+ },
9160
+ "slug": {
9161
+ "type": "TEXT",
9162
+ "notNull": true
9163
+ },
9164
+ "context": {
9165
+ "type": "TEXT",
9166
+ "notNull": true,
9167
+ "default": ""
9168
+ },
9169
+ "created_at": {
9170
+ "type": "TIMESTAMP",
9171
+ "notNull": true,
9172
+ "default": "current_timestamp"
9173
+ },
9174
+ "updated_at": {
9175
+ "type": "TIMESTAMP",
9176
+ "notNull": true,
9177
+ "default": "current_timestamp"
9178
+ },
9179
+ "tenant_id": {
9180
+ "type": "UUID",
9181
+ "referenceKind": "tenantId",
9182
+ "notNull": true,
9183
+ "unique": false
9184
+ },
9185
+ "intake_id": {
9186
+ "type": "UUID",
9187
+ "referenceKind": "foreignKey",
9188
+ "notNull": true,
9189
+ "unique": false,
9190
+ "foreignKey": {
9191
+ "table": "family_intakes",
9192
+ "column": "id",
9193
+ "onDelete": "CASCADE",
9194
+ "onUpdate": "CASCADE"
9195
+ }
9196
+ },
9197
+ "request_key": {
9198
+ "type": "TEXT",
9199
+ "notNull": false,
9200
+ "unique": false
9201
+ },
9202
+ "sequence": {
9203
+ "type": "INTEGER",
9204
+ "notNull": true,
9205
+ "unique": false,
9206
+ "default": 0
9207
+ },
9208
+ "actor_user_id": {
9209
+ "type": "TEXT",
9210
+ "notNull": false,
9211
+ "unique": false
9212
+ },
9213
+ "body_json": {
9214
+ "type": "TEXT",
9215
+ "notNull": false,
9216
+ "unique": false
9217
+ }
9218
+ },
9219
+ "indexes": [
9220
+ {
9221
+ "name": "family_intake_decisions_tenant_id_intake_id_idx",
9222
+ "columns": [
9223
+ "tenant_id",
9224
+ "intake_id",
9225
+ "request_key"
9226
+ ],
9227
+ "unique": true,
9228
+ "nullsNotDistinct": true
9229
+ },
9230
+ {
9231
+ "name": "family_intake_decisions_slug_context_idx",
9232
+ "columns": [
9233
+ "slug",
9234
+ "context"
9235
+ ]
9236
+ },
9237
+ {
9238
+ "name": "family_intake_decisions_tenant_id_created_at_idx",
9239
+ "columns": [
9240
+ "tenant_id",
9241
+ "created_at"
9242
+ ]
9243
+ },
9244
+ {
9245
+ "name": "family_intake_decisions_intake_id_idx",
9246
+ "columns": [
9247
+ "intake_id"
9248
+ ]
9249
+ }
9250
+ ],
9251
+ "version": "08875c81"
9252
+ },
9253
+ "importPath": "@happyvertical/smrt-education"
9254
+ },
9255
+ "@happyvertical/smrt-education:FamilyIntakeDecisionCollection": {
9256
+ "name": "familyintakedecisioncollection",
9257
+ "className": "FamilyIntakeDecisionCollection",
9258
+ "qualifiedName": "@happyvertical/smrt-education:FamilyIntakeDecisionCollection",
9259
+ "collection": "familyintakedecisions",
9260
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/family-intake-models.ts",
9261
+ "packageName": "@happyvertical/smrt-education",
9262
+ "fields": {},
9263
+ "methods": {},
9264
+ "decoratorConfig": {
9265
+ "tableName": "family_intake_decisions",
9266
+ "api": false,
9267
+ "mcp": false,
9268
+ "cli": false
9269
+ },
9270
+ "extends": "SmrtCollection",
9271
+ "extendsTypeArg": "FamilyIntakeDecision",
9272
+ "exportName": "FamilyIntakeDecisionCollection",
9273
+ "collectionExportName": "FamilyIntakeDecisionCollectionCollection",
9274
+ "schema": {
9275
+ "tableName": "family_intake_decisions",
9276
+ "ddl": "CREATE TABLE IF NOT EXISTS \"family_intake_decisions\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"intake_id\" UUID NOT NULL,\n \"request_key\" TEXT,\n \"sequence\" INTEGER NOT NULL DEFAULT 0,\n \"actor_user_id\" TEXT,\n \"body_json\" TEXT\n);",
9277
+ "columns": {
9278
+ "id": {
9279
+ "type": "UUID",
9280
+ "primaryKey": true,
9281
+ "referenceKind": "id",
9282
+ "notNull": true
9283
+ },
9284
+ "slug": {
9285
+ "type": "TEXT",
9286
+ "notNull": true
9287
+ },
9288
+ "context": {
9289
+ "type": "TEXT",
9290
+ "notNull": true,
9291
+ "default": ""
9292
+ },
9293
+ "created_at": {
9294
+ "type": "TIMESTAMP",
9295
+ "notNull": true,
9296
+ "default": "current_timestamp"
9297
+ },
9298
+ "updated_at": {
9299
+ "type": "TIMESTAMP",
9300
+ "notNull": true,
9301
+ "default": "current_timestamp"
9302
+ },
9303
+ "tenant_id": {
9304
+ "type": "UUID",
9305
+ "referenceKind": "tenantId",
9306
+ "notNull": true,
9307
+ "unique": false
9308
+ },
9309
+ "intake_id": {
9310
+ "type": "UUID",
9311
+ "referenceKind": "foreignKey",
9312
+ "notNull": true,
9313
+ "unique": false,
9314
+ "foreignKey": {
9315
+ "table": "family_intakes",
9316
+ "column": "id",
9317
+ "onDelete": "CASCADE",
9318
+ "onUpdate": "CASCADE"
9319
+ }
9320
+ },
9321
+ "request_key": {
9322
+ "type": "TEXT",
9323
+ "notNull": false,
9324
+ "unique": false
9325
+ },
9326
+ "sequence": {
9327
+ "type": "INTEGER",
9328
+ "notNull": true,
9329
+ "unique": false,
9330
+ "default": 0
9331
+ },
9332
+ "actor_user_id": {
9333
+ "type": "TEXT",
9334
+ "notNull": false,
9335
+ "unique": false
9336
+ },
9337
+ "body_json": {
9338
+ "type": "TEXT",
9339
+ "notNull": false,
9340
+ "unique": false
9341
+ }
9342
+ },
9343
+ "indexes": [
9344
+ {
9345
+ "name": "family_intake_decisions_tenant_id_intake_id_idx",
9346
+ "columns": [
9347
+ "tenant_id",
9348
+ "intake_id",
9349
+ "request_key"
9350
+ ],
9351
+ "unique": true,
9352
+ "nullsNotDistinct": true
9353
+ },
9354
+ {
9355
+ "name": "family_intake_decisions_slug_context_idx",
9356
+ "columns": [
9357
+ "slug",
9358
+ "context"
9359
+ ]
9360
+ },
9361
+ {
9362
+ "name": "family_intake_decisions_tenant_id_created_at_idx",
9363
+ "columns": [
9364
+ "tenant_id",
9365
+ "created_at"
9366
+ ]
9367
+ },
9368
+ {
9369
+ "name": "family_intake_decisions_intake_id_idx",
9370
+ "columns": [
9371
+ "intake_id"
9372
+ ]
9373
+ }
9374
+ ],
9375
+ "version": "08875c81"
9376
+ },
9377
+ "importPath": "@happyvertical/smrt-education"
9378
+ },
9379
+ "@happyvertical/smrt-education:Learner": {
9380
+ "name": "learner",
9381
+ "className": "Learner",
9382
+ "qualifiedName": "@happyvertical/smrt-education:Learner",
9383
+ "collection": "learners",
9384
+ "description": "A learner is a real user/profile identity with active family membership.",
9385
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/learners.ts",
9386
+ "packageName": "@happyvertical/smrt-education",
9387
+ "fields": {
9388
+ "tenantId": {
9389
+ "type": "text",
9390
+ "required": true,
9391
+ "_meta": {
9392
+ "sqlType": "UUID",
9393
+ "__tenancy": {
9394
+ "isTenantIdField": true,
9395
+ "autoFilter": true,
9396
+ "required": true,
9397
+ "autoPopulate": true,
9398
+ "nullable": false,
9399
+ "mode": "required",
9400
+ "field": "tenantId",
9401
+ "allowSuperAdminBypass": false
9402
+ }
9403
+ }
9404
+ },
9405
+ "userId": {
9406
+ "type": "crossPackageRef",
9407
+ "required": true,
9408
+ "related": "@happyvertical/smrt-users:User"
9409
+ },
9410
+ "profileId": {
9411
+ "type": "crossPackageRef",
9412
+ "required": true,
9413
+ "related": "@happyvertical/smrt-profiles:Profile"
9414
+ },
9415
+ "displayName": {
9416
+ "type": "text",
9417
+ "required": false
9418
+ },
9419
+ "birthDate": {
9420
+ "type": "datetime",
9421
+ "required": false
9422
+ },
9423
+ "level": {
9424
+ "type": "integer",
9425
+ "required": true,
9426
+ "default": 0
9427
+ },
9428
+ "settings": {
9429
+ "type": "text",
9430
+ "required": false
9431
+ }
9432
+ },
9433
+ "methods": {
9434
+ "getSettings": {
9435
+ "name": "getSettings",
9436
+ "async": false,
9437
+ "parameters": [],
9438
+ "returnType": "Record<string, unknown>",
9439
+ "isStatic": false,
9440
+ "isPublic": true
9441
+ },
9442
+ "setSettings": {
9443
+ "name": "setSettings",
9444
+ "async": false,
9445
+ "parameters": [
9446
+ {
9447
+ "name": "value",
9448
+ "type": "Record<string, unknown>",
9449
+ "optional": false
9450
+ }
9451
+ ],
9452
+ "returnType": "void",
9453
+ "isStatic": false,
9454
+ "isPublic": true
9455
+ },
9456
+ "save": {
9457
+ "name": "save",
9458
+ "async": true,
9459
+ "parameters": [
9460
+ {
9461
+ "name": "options",
9462
+ "type": "SmrtSaveOptions",
9463
+ "optional": true
9464
+ }
9465
+ ],
9466
+ "returnType": "Promise<this>",
9467
+ "isStatic": false,
9468
+ "isPublic": true
9469
+ }
9470
+ },
9471
+ "decoratorConfig": {
9472
+ "api": false,
9473
+ "mcp": false,
9474
+ "cli": false,
9475
+ "tenantScoped": {
9476
+ "mode": "required"
9477
+ },
9478
+ "conflictColumns": [
9479
+ "tenant_id",
9480
+ "slug",
9481
+ "context"
9482
+ ]
9483
+ },
9484
+ "extends": "SmrtObject",
9485
+ "exportName": "Learner",
9486
+ "collectionExportName": "LearnerCollection",
9487
+ "validationRules": [
9488
+ {
9489
+ "field": "userId",
9490
+ "rule": "required",
9491
+ "fieldType": "crossPackageRef"
9492
+ },
9493
+ {
9494
+ "field": "profileId",
9495
+ "rule": "required",
9496
+ "fieldType": "crossPackageRef"
9497
+ },
9498
+ {
9499
+ "field": "level",
9500
+ "rule": "required",
9501
+ "fieldType": "integer"
9502
+ }
9503
+ ],
9504
+ "schema": {
9505
+ "tableName": "learners",
9506
+ "ddl": "CREATE TABLE IF NOT EXISTS \"learners\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"user_id\" UUID NOT NULL,\n \"profile_id\" UUID NOT NULL,\n \"display_name\" TEXT,\n \"birth_date\" TIMESTAMP,\n \"level\" INTEGER NOT NULL DEFAULT 0,\n \"settings\" TEXT\n);",
9507
+ "columns": {
9508
+ "id": {
9509
+ "type": "UUID",
9510
+ "primaryKey": true,
9511
+ "referenceKind": "id",
9512
+ "notNull": true
9513
+ },
9514
+ "slug": {
9515
+ "type": "TEXT",
9516
+ "notNull": true
9517
+ },
9518
+ "context": {
9519
+ "type": "TEXT",
9520
+ "notNull": true,
9521
+ "default": ""
9522
+ },
9523
+ "created_at": {
9524
+ "type": "TIMESTAMP",
9525
+ "notNull": true,
9526
+ "default": "current_timestamp"
9527
+ },
9528
+ "updated_at": {
9529
+ "type": "TIMESTAMP",
9530
+ "notNull": true,
9531
+ "default": "current_timestamp"
9532
+ },
9533
+ "tenant_id": {
9534
+ "type": "UUID",
9535
+ "referenceKind": "tenantId",
9536
+ "notNull": true,
9537
+ "unique": false
9538
+ },
9539
+ "user_id": {
9540
+ "type": "UUID",
9541
+ "referenceKind": "crossPackageRef",
9542
+ "notNull": true,
9543
+ "unique": false
9544
+ },
9545
+ "profile_id": {
9546
+ "type": "UUID",
9547
+ "referenceKind": "crossPackageRef",
9548
+ "notNull": true,
9549
+ "unique": false
9550
+ },
9551
+ "display_name": {
9552
+ "type": "TEXT",
9553
+ "notNull": false,
9554
+ "unique": false
9555
+ },
9556
+ "birth_date": {
9557
+ "type": "TIMESTAMP",
9558
+ "notNull": false,
9559
+ "unique": false
9560
+ },
9561
+ "level": {
9562
+ "type": "INTEGER",
9563
+ "notNull": true,
9564
+ "unique": false,
9565
+ "default": 0
9566
+ },
9567
+ "settings": {
9568
+ "type": "TEXT",
9569
+ "notNull": false,
9570
+ "unique": false
9571
+ }
9572
+ },
9573
+ "indexes": [
9574
+ {
9575
+ "name": "learners_slug_context_idx",
9576
+ "columns": [
9577
+ "tenant_id",
9578
+ "slug",
9579
+ "context"
9580
+ ],
9581
+ "unique": true
9582
+ },
9583
+ {
9584
+ "name": "learners_tenant_id_created_at_idx",
9585
+ "columns": [
9586
+ "tenant_id",
9587
+ "created_at"
9588
+ ]
9589
+ },
9590
+ {
9591
+ "name": "learners_user_id_idx",
9592
+ "columns": [
9593
+ "user_id"
9594
+ ]
9595
+ },
9596
+ {
9597
+ "name": "learners_profile_id_idx",
9598
+ "columns": [
9599
+ "profile_id"
9600
+ ]
9601
+ }
9602
+ ],
9603
+ "version": "ca9907b5"
9604
+ },
9605
+ "importPath": "@happyvertical/smrt-education"
9606
+ },
9607
+ "@happyvertical/smrt-education:Curriculum": {
9608
+ "name": "curriculum",
9609
+ "className": "Curriculum",
9610
+ "qualifiedName": "@happyvertical/smrt-education:Curriculum",
9611
+ "collection": "curriculums",
9612
+ "description": "A distinct plan retains its own enrollment history.",
9613
+ "filePath": "/home/runner/work/smrt/smrt/packages/education/src/learners.ts",
9614
+ "packageName": "@happyvertical/smrt-education",
9615
+ "fields": {
9616
+ "tenantId": {
9617
+ "type": "text",
9618
+ "required": true,
9619
+ "_meta": {
9620
+ "sqlType": "UUID",
9621
+ "__tenancy": {
9622
+ "isTenantIdField": true,
9623
+ "autoFilter": true,
9624
+ "required": true,
9625
+ "autoPopulate": true,
9626
+ "nullable": false,
9627
+ "mode": "required",
8516
9628
  "field": "tenantId",
8517
9629
  "allowSuperAdminBypass": false
8518
9630
  }
@@ -8557,7 +9669,13 @@
8557
9669
  "save": {
8558
9670
  "name": "save",
8559
9671
  "async": true,
8560
- "parameters": [],
9672
+ "parameters": [
9673
+ {
9674
+ "name": "options",
9675
+ "type": "SmrtSaveOptions",
9676
+ "optional": true
9677
+ }
9678
+ ],
8561
9679
  "returnType": "Promise<this>",
8562
9680
  "isStatic": false,
8563
9681
  "isPublic": true
@@ -8775,7 +9893,13 @@
8775
9893
  "save": {
8776
9894
  "name": "save",
8777
9895
  "async": true,
8778
- "parameters": [],
9896
+ "parameters": [
9897
+ {
9898
+ "name": "options",
9899
+ "type": "SmrtSaveOptions",
9900
+ "optional": true
9901
+ }
9902
+ ],
8779
9903
  "returnType": "Promise<this>",
8780
9904
  "isStatic": false,
8781
9905
  "isPublic": true
@@ -9064,7 +10188,13 @@
9064
10188
  "save": {
9065
10189
  "name": "save",
9066
10190
  "async": true,
9067
- "parameters": [],
10191
+ "parameters": [
10192
+ {
10193
+ "name": "options",
10194
+ "type": "SmrtSaveOptions",
10195
+ "optional": true
10196
+ }
10197
+ ],
9068
10198
  "returnType": "Promise<this>",
9069
10199
  "isStatic": false,
9070
10200
  "isPublic": true
@@ -9329,7 +10459,13 @@
9329
10459
  "save": {
9330
10460
  "name": "save",
9331
10461
  "async": true,
9332
- "parameters": [],
10462
+ "parameters": [
10463
+ {
10464
+ "name": "options",
10465
+ "type": "SmrtSaveOptions",
10466
+ "optional": true
10467
+ }
10468
+ ],
9333
10469
  "returnType": "Promise<this>",
9334
10470
  "isStatic": false,
9335
10471
  "isPublic": true
@@ -9602,7 +10738,13 @@
9602
10738
  "save": {
9603
10739
  "name": "save",
9604
10740
  "async": true,
9605
- "parameters": [],
10741
+ "parameters": [
10742
+ {
10743
+ "name": "options",
10744
+ "type": "SmrtSaveOptions",
10745
+ "optional": true
10746
+ }
10747
+ ],
9606
10748
  "returnType": "Promise<this>",
9607
10749
  "isStatic": false,
9608
10750
  "isPublic": true
@@ -9891,7 +11033,13 @@
9891
11033
  "save": {
9892
11034
  "name": "save",
9893
11035
  "async": true,
9894
- "parameters": [],
11036
+ "parameters": [
11037
+ {
11038
+ "name": "options",
11039
+ "type": "SmrtSaveOptions",
11040
+ "optional": true
11041
+ }
11042
+ ],
9895
11043
  "returnType": "Promise<this>",
9896
11044
  "isStatic": false,
9897
11045
  "isPublic": true
@@ -10140,7 +11288,13 @@
10140
11288
  "save": {
10141
11289
  "name": "save",
10142
11290
  "async": true,
10143
- "parameters": [],
11291
+ "parameters": [
11292
+ {
11293
+ "name": "options",
11294
+ "type": "SmrtSaveOptions",
11295
+ "optional": true
11296
+ }
11297
+ ],
10144
11298
  "returnType": "Promise<this>",
10145
11299
  "isStatic": false,
10146
11300
  "isPublic": true
@@ -10536,7 +11690,13 @@
10536
11690
  "save": {
10537
11691
  "name": "save",
10538
11692
  "async": true,
10539
- "parameters": [],
11693
+ "parameters": [
11694
+ {
11695
+ "name": "options",
11696
+ "type": "SmrtSaveOptions",
11697
+ "optional": true
11698
+ }
11699
+ ],
10540
11700
  "returnType": "Promise<this>",
10541
11701
  "isStatic": false,
10542
11702
  "isPublic": true
@@ -10886,7 +12046,13 @@
10886
12046
  "save": {
10887
12047
  "name": "save",
10888
12048
  "async": true,
10889
- "parameters": [],
12049
+ "parameters": [
12050
+ {
12051
+ "name": "options",
12052
+ "type": "SmrtSaveOptions",
12053
+ "optional": true
12054
+ }
12055
+ ],
10890
12056
  "returnType": "Promise<this>",
10891
12057
  "isStatic": false,
10892
12058
  "isPublic": true
@@ -11182,7 +12348,13 @@
11182
12348
  "save": {
11183
12349
  "name": "save",
11184
12350
  "async": true,
11185
- "parameters": [],
12351
+ "parameters": [
12352
+ {
12353
+ "name": "options",
12354
+ "type": "SmrtSaveOptions",
12355
+ "optional": true
12356
+ }
12357
+ ],
11186
12358
  "returnType": "Promise<this>",
11187
12359
  "isStatic": false,
11188
12360
  "isPublic": true
@@ -11452,7 +12624,13 @@
11452
12624
  "save": {
11453
12625
  "name": "save",
11454
12626
  "async": true,
11455
- "parameters": [],
12627
+ "parameters": [
12628
+ {
12629
+ "name": "options",
12630
+ "type": "SmrtSaveOptions",
12631
+ "optional": true
12632
+ }
12633
+ ],
11456
12634
  "returnType": "Promise<this>",
11457
12635
  "isStatic": false,
11458
12636
  "isPublic": true
@@ -11671,7 +12849,13 @@
11671
12849
  "save": {
11672
12850
  "name": "save",
11673
12851
  "async": true,
11674
- "parameters": [],
12852
+ "parameters": [
12853
+ {
12854
+ "name": "options",
12855
+ "type": "SmrtSaveOptions",
12856
+ "optional": true
12857
+ }
12858
+ ],
11675
12859
  "returnType": "Promise<this>",
11676
12860
  "isStatic": false,
11677
12861
  "isPublic": true
@@ -12049,7 +13233,13 @@
12049
13233
  "save": {
12050
13234
  "name": "save",
12051
13235
  "async": true,
12052
- "parameters": [],
13236
+ "parameters": [
13237
+ {
13238
+ "name": "options",
13239
+ "type": "SmrtSaveOptions",
13240
+ "optional": true
13241
+ }
13242
+ ],
12053
13243
  "returnType": "Promise<this>",
12054
13244
  "isStatic": false,
12055
13245
  "isPublic": true
@@ -12552,7 +13742,13 @@
12552
13742
  "save": {
12553
13743
  "name": "save",
12554
13744
  "async": true,
12555
- "parameters": [],
13745
+ "parameters": [
13746
+ {
13747
+ "name": "options",
13748
+ "type": "SmrtSaveOptions",
13749
+ "optional": true
13750
+ }
13751
+ ],
12556
13752
  "returnType": "Promise<this>",
12557
13753
  "isStatic": false,
12558
13754
  "isPublic": true
@@ -13065,7 +14261,13 @@
13065
14261
  "save": {
13066
14262
  "name": "save",
13067
14263
  "async": true,
13068
- "parameters": [],
14264
+ "parameters": [
14265
+ {
14266
+ "name": "options",
14267
+ "type": "SmrtSaveOptions",
14268
+ "optional": true
14269
+ }
14270
+ ],
13069
14271
  "returnType": "Promise<this>",
13070
14272
  "isStatic": false,
13071
14273
  "isPublic": true
@@ -13579,7 +14781,13 @@
13579
14781
  "save": {
13580
14782
  "name": "save",
13581
14783
  "async": true,
13582
- "parameters": [],
14784
+ "parameters": [
14785
+ {
14786
+ "name": "options",
14787
+ "type": "SmrtSaveOptions",
14788
+ "optional": true
14789
+ }
14790
+ ],
13583
14791
  "returnType": "Promise<this>",
13584
14792
  "isStatic": false,
13585
14793
  "isPublic": true
@@ -14062,7 +15270,13 @@
14062
15270
  "save": {
14063
15271
  "name": "save",
14064
15272
  "async": true,
14065
- "parameters": [],
15273
+ "parameters": [
15274
+ {
15275
+ "name": "options",
15276
+ "type": "SmrtSaveOptions",
15277
+ "optional": true
15278
+ }
15279
+ ],
14066
15280
  "returnType": "Promise<this>",
14067
15281
  "isStatic": false,
14068
15282
  "isPublic": true
@@ -14494,7 +15708,13 @@
14494
15708
  "save": {
14495
15709
  "name": "save",
14496
15710
  "async": true,
14497
- "parameters": [],
15711
+ "parameters": [
15712
+ {
15713
+ "name": "options",
15714
+ "type": "SmrtSaveOptions",
15715
+ "optional": true
15716
+ }
15717
+ ],
14498
15718
  "returnType": "Promise<this>",
14499
15719
  "isStatic": false,
14500
15720
  "isPublic": true
@@ -14868,6 +16088,11 @@
14868
16088
  "required": true
14869
16089
  }
14870
16090
  },
16091
+ "familyIntakeId": {
16092
+ "type": "foreignKey",
16093
+ "required": false,
16094
+ "related": "FamilyIntake"
16095
+ },
14871
16096
  "itemId": {
14872
16097
  "type": "text",
14873
16098
  "required": false
@@ -14893,7 +16118,13 @@
14893
16118
  "save": {
14894
16119
  "name": "save",
14895
16120
  "async": true,
14896
- "parameters": [],
16121
+ "parameters": [
16122
+ {
16123
+ "name": "options",
16124
+ "type": "SmrtSaveOptions",
16125
+ "optional": true
16126
+ }
16127
+ ],
14897
16128
  "returnType": "Promise<this>",
14898
16129
  "isStatic": false,
14899
16130
  "isPublic": true
@@ -14924,7 +16155,7 @@
14924
16155
  ],
14925
16156
  "schema": {
14926
16157
  "tableName": "workbook_photo_intakes",
14927
- "ddl": "CREATE TABLE IF NOT EXISTS \"workbook_photo_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"learner_id\" UUID NOT NULL,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"content_digest\" TEXT\n);",
16158
+ "ddl": "CREATE TABLE IF NOT EXISTS \"workbook_photo_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"learner_id\" UUID NOT NULL,\n \"family_intake_id\" UUID,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"content_digest\" TEXT\n);",
14928
16159
  "columns": {
14929
16160
  "id": {
14930
16161
  "type": "UUID",
@@ -14969,6 +16200,18 @@
14969
16200
  "onUpdate": "CASCADE"
14970
16201
  }
14971
16202
  },
16203
+ "family_intake_id": {
16204
+ "type": "UUID",
16205
+ "referenceKind": "foreignKey",
16206
+ "notNull": false,
16207
+ "unique": false,
16208
+ "foreignKey": {
16209
+ "table": "family_intakes",
16210
+ "column": "id",
16211
+ "onDelete": "NO ACTION",
16212
+ "onUpdate": "CASCADE"
16213
+ }
16214
+ },
14972
16215
  "item_id": {
14973
16216
  "type": "TEXT",
14974
16217
  "notNull": false,
@@ -15014,9 +16257,15 @@
15014
16257
  "columns": [
15015
16258
  "learner_id"
15016
16259
  ]
16260
+ },
16261
+ {
16262
+ "name": "workbook_photo_intakes_family_intake_id_idx",
16263
+ "columns": [
16264
+ "family_intake_id"
16265
+ ]
15017
16266
  }
15018
16267
  ],
15019
- "version": "fafc1daf"
16268
+ "version": "288020f4"
15020
16269
  },
15021
16270
  "importPath": "@happyvertical/smrt-education"
15022
16271
  },
@@ -15041,7 +16290,7 @@
15041
16290
  "collectionExportName": "WorkbookPhotoIntakeCollectionCollection",
15042
16291
  "schema": {
15043
16292
  "tableName": "workbook_photo_intakes",
15044
- "ddl": "CREATE TABLE IF NOT EXISTS \"workbook_photo_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"learner_id\" UUID NOT NULL,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"content_digest\" TEXT\n);",
16293
+ "ddl": "CREATE TABLE IF NOT EXISTS \"workbook_photo_intakes\" (\n \"id\" UUID PRIMARY KEY NOT NULL,\n \"slug\" TEXT NOT NULL,\n \"context\" TEXT NOT NULL DEFAULT '',\n \"created_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"updated_at\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\n \"tenant_id\" UUID NOT NULL,\n \"learner_id\" UUID NOT NULL,\n \"family_intake_id\" UUID,\n \"item_id\" TEXT,\n \"actor_user_id\" TEXT,\n \"content_digest\" TEXT\n);",
15045
16294
  "columns": {
15046
16295
  "id": {
15047
16296
  "type": "UUID",
@@ -15086,6 +16335,18 @@
15086
16335
  "onUpdate": "CASCADE"
15087
16336
  }
15088
16337
  },
16338
+ "family_intake_id": {
16339
+ "type": "UUID",
16340
+ "referenceKind": "foreignKey",
16341
+ "notNull": false,
16342
+ "unique": false,
16343
+ "foreignKey": {
16344
+ "table": "family_intakes",
16345
+ "column": "id",
16346
+ "onDelete": "NO ACTION",
16347
+ "onUpdate": "CASCADE"
16348
+ }
16349
+ },
15089
16350
  "item_id": {
15090
16351
  "type": "TEXT",
15091
16352
  "notNull": false,
@@ -15131,9 +16392,15 @@
15131
16392
  "columns": [
15132
16393
  "learner_id"
15133
16394
  ]
16395
+ },
16396
+ {
16397
+ "name": "workbook_photo_intakes_family_intake_id_idx",
16398
+ "columns": [
16399
+ "family_intake_id"
16400
+ ]
15134
16401
  }
15135
16402
  ],
15136
- "version": "fafc1daf"
16403
+ "version": "288020f4"
15137
16404
  },
15138
16405
  "importPath": "@happyvertical/smrt-education"
15139
16406
  },
@@ -15214,7 +16481,13 @@
15214
16481
  "save": {
15215
16482
  "name": "save",
15216
16483
  "async": true,
15217
- "parameters": [],
16484
+ "parameters": [
16485
+ {
16486
+ "name": "options",
16487
+ "type": "SmrtSaveOptions",
16488
+ "optional": true
16489
+ }
16490
+ ],
15218
16491
  "returnType": "Promise<this>",
15219
16492
  "isStatic": false,
15220
16493
  "isPublic": true
@@ -15617,7 +16890,13 @@
15617
16890
  "save": {
15618
16891
  "name": "save",
15619
16892
  "async": true,
15620
- "parameters": [],
16893
+ "parameters": [
16894
+ {
16895
+ "name": "options",
16896
+ "type": "SmrtSaveOptions",
16897
+ "optional": true
16898
+ }
16899
+ ],
15621
16900
  "returnType": "Promise<this>",
15622
16901
  "isStatic": false,
15623
16902
  "isPublic": true
@@ -15990,7 +17269,13 @@
15990
17269
  "save": {
15991
17270
  "name": "save",
15992
17271
  "async": true,
15993
- "parameters": [],
17272
+ "parameters": [
17273
+ {
17274
+ "name": "options",
17275
+ "type": "SmrtSaveOptions",
17276
+ "optional": true
17277
+ }
17278
+ ],
15994
17279
  "returnType": "Promise<this>",
15995
17280
  "isStatic": false,
15996
17281
  "isPublic": true