@rippling/rippling-sdk 0.2.0-alpha.35 → 0.2.0-alpha.37

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 (149) hide show
  1. package/client.d.mts +13 -1
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +13 -1
  4. package/client.d.ts.map +1 -1
  5. package/client.js +13 -1
  6. package/client.js.map +1 -1
  7. package/client.mjs +13 -1
  8. package/client.mjs.map +1 -1
  9. package/examples/.keep +4 -0
  10. package/examples/manifest/dental-practice-management/dental-practice-management.ts +638 -0
  11. package/examples/manifest/dental-practice-management/manifest.json +1870 -0
  12. package/examples/manifest/gym-membership-management/gym-membership-management.ts +746 -0
  13. package/examples/manifest/gym-membership-management/manifest.json +1975 -0
  14. package/examples/sdui/sdui-crud-todo/rippling-function.ts +367 -0
  15. package/examples/sdui/sdui-crud-todo/sdui-crud-todo.ts +282 -0
  16. package/examples/sdui/sdui-showcase/rippling-function.ts +381 -0
  17. package/examples/sdui/sdui-showcase/sdui-showcase.ts +351 -0
  18. package/examples/sdui/sdui-tab-multi-view/rippling-function.ts +1061 -0
  19. package/examples/sdui/sdui-tab-multi-view/sdui-tab-multi-view.ts +924 -0
  20. package/examples/sdui/vote/rippling-function.ts +330 -0
  21. package/examples/sdui/vote/vote.ts +298 -0
  22. package/internal/utils/log.d.mts.map +1 -1
  23. package/internal/utils/log.d.ts.map +1 -1
  24. package/internal/utils/log.js +2 -0
  25. package/internal/utils/log.js.map +1 -1
  26. package/internal/utils/log.mjs +2 -0
  27. package/internal/utils/log.mjs.map +1 -1
  28. package/lib/manifest/custom-object-field-section.d.mts +4 -0
  29. package/lib/manifest/custom-object-field-section.d.mts.map +1 -1
  30. package/lib/manifest/custom-object-field-section.d.ts +4 -0
  31. package/lib/manifest/custom-object-field-section.d.ts.map +1 -1
  32. package/lib/manifest/custom-object-field-section.js +6 -0
  33. package/lib/manifest/custom-object-field-section.js.map +1 -1
  34. package/lib/manifest/custom-object-field-section.mjs +6 -0
  35. package/lib/manifest/custom-object-field-section.mjs.map +1 -1
  36. package/lib/manifest/custom-object-page-layout.d.mts +21 -13
  37. package/lib/manifest/custom-object-page-layout.d.mts.map +1 -1
  38. package/lib/manifest/custom-object-page-layout.d.ts +21 -13
  39. package/lib/manifest/custom-object-page-layout.d.ts.map +1 -1
  40. package/lib/manifest/custom-object-page-layout.js +119 -9
  41. package/lib/manifest/custom-object-page-layout.js.map +1 -1
  42. package/lib/manifest/custom-object-page-layout.mjs +119 -9
  43. package/lib/manifest/custom-object-page-layout.mjs.map +1 -1
  44. package/lib/manifest/field.d.mts +5 -1
  45. package/lib/manifest/field.d.mts.map +1 -1
  46. package/lib/manifest/field.d.ts +5 -1
  47. package/lib/manifest/field.d.ts.map +1 -1
  48. package/lib/manifest/field.js +8 -0
  49. package/lib/manifest/field.js.map +1 -1
  50. package/lib/manifest/field.mjs +8 -0
  51. package/lib/manifest/field.mjs.map +1 -1
  52. package/lib/manifest/index.d.mts +1 -1
  53. package/lib/manifest/index.d.mts.map +1 -1
  54. package/lib/manifest/index.d.ts +1 -1
  55. package/lib/manifest/index.d.ts.map +1 -1
  56. package/lib/manifest/index.js.map +1 -1
  57. package/lib/manifest/index.mjs.map +1 -1
  58. package/package.json +11 -1
  59. package/resources/company-legal-entities.d.mts +180 -0
  60. package/resources/company-legal-entities.d.mts.map +1 -0
  61. package/resources/company-legal-entities.d.ts +180 -0
  62. package/resources/company-legal-entities.d.ts.map +1 -0
  63. package/resources/company-legal-entities.js +30 -0
  64. package/resources/company-legal-entities.js.map +1 -0
  65. package/resources/company-legal-entities.mjs +26 -0
  66. package/resources/company-legal-entities.mjs.map +1 -0
  67. package/resources/company-legal-entity-workers.d.mts +79 -0
  68. package/resources/company-legal-entity-workers.d.mts.map +1 -0
  69. package/resources/company-legal-entity-workers.d.ts +79 -0
  70. package/resources/company-legal-entity-workers.d.ts.map +1 -0
  71. package/resources/company-legal-entity-workers.js +30 -0
  72. package/resources/company-legal-entity-workers.js.map +1 -0
  73. package/resources/company-legal-entity-workers.mjs +26 -0
  74. package/resources/company-legal-entity-workers.mjs.map +1 -0
  75. package/resources/earning-types.d.mts +1 -6
  76. package/resources/earning-types.d.mts.map +1 -1
  77. package/resources/earning-types.d.ts +1 -6
  78. package/resources/earning-types.d.ts.map +1 -1
  79. package/resources/earning-types.js +1 -1
  80. package/resources/earning-types.mjs +1 -1
  81. package/resources/earnings-inputs.d.mts +1 -1
  82. package/resources/earnings-inputs.d.ts +1 -1
  83. package/resources/earnings-inputs.js +1 -1
  84. package/resources/earnings-inputs.mjs +1 -1
  85. package/resources/index.d.mts +3 -1
  86. package/resources/index.d.mts.map +1 -1
  87. package/resources/index.d.ts +3 -1
  88. package/resources/index.d.ts.map +1 -1
  89. package/resources/index.js +7 -3
  90. package/resources/index.js.map +1 -1
  91. package/resources/index.mjs +3 -1
  92. package/resources/index.mjs.map +1 -1
  93. package/resources/legal-entities.d.mts +1 -1
  94. package/resources/legal-entities.d.mts.map +1 -1
  95. package/resources/legal-entities.d.ts +1 -1
  96. package/resources/legal-entities.d.ts.map +1 -1
  97. package/resources/payroll-runs/index.d.mts +3 -0
  98. package/resources/payroll-runs/index.d.mts.map +1 -0
  99. package/resources/payroll-runs/index.d.ts +3 -0
  100. package/resources/payroll-runs/index.d.ts.map +1 -0
  101. package/resources/payroll-runs/index.js +9 -0
  102. package/resources/payroll-runs/index.js.map +1 -0
  103. package/resources/payroll-runs/index.mjs +4 -0
  104. package/resources/payroll-runs/index.mjs.map +1 -0
  105. package/resources/payroll-runs/payroll-runs.d.mts +199 -0
  106. package/resources/payroll-runs/payroll-runs.d.mts.map +1 -0
  107. package/resources/payroll-runs/payroll-runs.d.ts +199 -0
  108. package/resources/payroll-runs/payroll-runs.d.ts.map +1 -0
  109. package/resources/payroll-runs/payroll-runs.js +40 -0
  110. package/resources/payroll-runs/payroll-runs.js.map +1 -0
  111. package/resources/payroll-runs/payroll-runs.mjs +35 -0
  112. package/resources/payroll-runs/payroll-runs.mjs.map +1 -0
  113. package/resources/payroll-runs/worker-payroll-records.d.mts +200 -0
  114. package/resources/payroll-runs/worker-payroll-records.d.mts.map +1 -0
  115. package/resources/payroll-runs/worker-payroll-records.d.ts +200 -0
  116. package/resources/payroll-runs/worker-payroll-records.d.ts.map +1 -0
  117. package/resources/payroll-runs/worker-payroll-records.js +23 -0
  118. package/resources/payroll-runs/worker-payroll-records.js.map +1 -0
  119. package/resources/payroll-runs/worker-payroll-records.mjs +19 -0
  120. package/resources/payroll-runs/worker-payroll-records.mjs.map +1 -0
  121. package/resources/payroll-runs.d.mts +1 -194
  122. package/resources/payroll-runs.d.mts.map +1 -1
  123. package/resources/payroll-runs.d.ts +1 -194
  124. package/resources/payroll-runs.d.ts.map +1 -1
  125. package/resources/payroll-runs.js +2 -28
  126. package/resources/payroll-runs.js.map +1 -1
  127. package/resources/payroll-runs.mjs +1 -26
  128. package/resources/payroll-runs.mjs.map +1 -1
  129. package/src/client.ts +47 -7
  130. package/src/internal/utils/log.ts +2 -0
  131. package/src/lib/manifest/custom-object-field-section.ts +7 -0
  132. package/src/lib/manifest/custom-object-page-layout.ts +220 -18
  133. package/src/lib/manifest/field.ts +9 -1
  134. package/src/lib/manifest/index.ts +2 -0
  135. package/src/resources/company-legal-entities.ts +237 -0
  136. package/src/resources/company-legal-entity-workers.ts +115 -0
  137. package/src/resources/earning-types.ts +1 -7
  138. package/src/resources/earnings-inputs.ts +1 -1
  139. package/src/resources/index.ts +15 -1
  140. package/src/resources/legal-entities.ts +1 -1
  141. package/src/resources/payroll-runs/index.ts +15 -0
  142. package/src/resources/payroll-runs/payroll-runs.ts +270 -0
  143. package/src/resources/payroll-runs/worker-payroll-records.ts +255 -0
  144. package/src/resources/payroll-runs.ts +1 -249
  145. package/src/version.ts +1 -1
  146. package/version.d.mts +1 -1
  147. package/version.d.ts +1 -1
  148. package/version.js +1 -1
  149. package/version.mjs +1 -1
@@ -0,0 +1,1870 @@
1
+ {
2
+ "metadata": {
3
+ "key": "dental_practice_management",
4
+ "name": "Dental Practice Management",
5
+ "description": "Patient charts, chair schedule, appointments with status, and treatment plans for a dental office"
6
+ },
7
+ "components": [
8
+ {
9
+ "type": "CUSTOM_CATEGORY",
10
+ "api_name": "dental__c",
11
+ "name": "Dental",
12
+ "description": "Patients, chairs, visits, and treatment plans"
13
+ },
14
+ {
15
+ "type": "CUSTOM_OBJECT",
16
+ "api_name": "dental_patient__c",
17
+ "name": "Patient",
18
+ "description": "Clinical chart, demographics, and care preferences",
19
+ "category_api_name": "dental__c",
20
+ "icon": {
21
+ "emoji": "🦷"
22
+ },
23
+ "plural_label": "Patients"
24
+ },
25
+ {
26
+ "type": "CUSTOM_OBJECT_FIELD",
27
+ "custom_object_api_name": "dental_patient__c",
28
+ "field_api_name": "id",
29
+ "field_display_name": "ID",
30
+ "data_type": {
31
+ "options_list": [],
32
+ "supported_types": [],
33
+ "field_type": "TEXT"
34
+ },
35
+ "description": "The Rippling ID of a record",
36
+ "is_required": true,
37
+ "is_unique": true,
38
+ "is_indexed": null,
39
+ "rql_formula": null,
40
+ "formula_attr_metas": null,
41
+ "is_standard": true,
42
+ "derived_aggregated_field": null,
43
+ "derived_field_formula": null,
44
+ "section": null
45
+ },
46
+ {
47
+ "type": "CUSTOM_OBJECT_FIELD",
48
+ "custom_object_api_name": "dental_patient__c",
49
+ "field_api_name": "created_at",
50
+ "field_display_name": "Created Date",
51
+ "data_type": {
52
+ "options_list": [],
53
+ "supported_types": [],
54
+ "field_type": "DATETIME"
55
+ },
56
+ "description": "The date and time a record was created",
57
+ "is_required": false,
58
+ "is_unique": false,
59
+ "is_indexed": null,
60
+ "rql_formula": null,
61
+ "formula_attr_metas": null,
62
+ "is_standard": true,
63
+ "derived_aggregated_field": null,
64
+ "derived_field_formula": null,
65
+ "section": null
66
+ },
67
+ {
68
+ "type": "CUSTOM_OBJECT_FIELD",
69
+ "custom_object_api_name": "dental_patient__c",
70
+ "field_api_name": "updated_at",
71
+ "field_display_name": "Last Modified Date",
72
+ "data_type": {
73
+ "options_list": [],
74
+ "supported_types": [],
75
+ "field_type": "DATETIME"
76
+ },
77
+ "description": "The date and time a record was last updated",
78
+ "is_required": false,
79
+ "is_unique": false,
80
+ "is_indexed": null,
81
+ "rql_formula": null,
82
+ "formula_attr_metas": null,
83
+ "is_standard": true,
84
+ "derived_aggregated_field": null,
85
+ "derived_field_formula": null,
86
+ "section": null
87
+ },
88
+ {
89
+ "type": "CUSTOM_OBJECT_FIELD",
90
+ "custom_object_api_name": "dental_patient__c",
91
+ "field_api_name": "system_updated_at",
92
+ "field_display_name": "System Modified At",
93
+ "data_type": {
94
+ "options_list": [],
95
+ "supported_types": [],
96
+ "field_type": "DATETIME"
97
+ },
98
+ "description": "The date and time a record was last updated by the system",
99
+ "is_required": false,
100
+ "is_unique": false,
101
+ "is_indexed": null,
102
+ "rql_formula": null,
103
+ "formula_attr_metas": null,
104
+ "is_standard": true,
105
+ "derived_aggregated_field": null,
106
+ "derived_field_formula": null,
107
+ "section": null
108
+ },
109
+ {
110
+ "type": "CUSTOM_OBJECT_FIELD",
111
+ "custom_object_api_name": "dental_patient__c",
112
+ "field_api_name": "external_id",
113
+ "field_display_name": "External ID",
114
+ "data_type": {
115
+ "options_list": [],
116
+ "supported_types": [],
117
+ "field_type": "TEXT"
118
+ },
119
+ "description": "The external identifier for a record used in third party integrations",
120
+ "is_required": false,
121
+ "is_unique": true,
122
+ "is_indexed": null,
123
+ "rql_formula": null,
124
+ "formula_attr_metas": null,
125
+ "is_standard": true,
126
+ "derived_aggregated_field": null,
127
+ "derived_field_formula": null,
128
+ "section": null
129
+ },
130
+ {
131
+ "type": "CUSTOM_OBJECT_FIELD",
132
+ "custom_object_api_name": "dental_patient__c",
133
+ "field_api_name": "name",
134
+ "field_display_name": "Name",
135
+ "data_type": {
136
+ "options_list": [],
137
+ "supported_types": [],
138
+ "field_type": "TEXT"
139
+ },
140
+ "description": "A string used to describe a record. This is used for display purposes as well as search",
141
+ "is_required": true,
142
+ "is_unique": false,
143
+ "is_indexed": null,
144
+ "rql_formula": null,
145
+ "formula_attr_metas": null,
146
+ "is_standard": true,
147
+ "derived_aggregated_field": null,
148
+ "derived_field_formula": null,
149
+ "section": null
150
+ },
151
+ {
152
+ "type": "CUSTOM_OBJECT_FIELD",
153
+ "custom_object_api_name": "dental_patient__c",
154
+ "field_api_name": "owner_role",
155
+ "field_display_name": "Owner",
156
+ "data_type": {
157
+ "options_list": [],
158
+ "supported_types": [],
159
+ "field_type": "NATIVE_EDGE",
160
+ "og_model_rql_name": "Employee",
161
+ "db_model_name": "RoleWithCompany",
162
+ "reference_column_storage_type": "STRING"
163
+ },
164
+ "description": "The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data",
165
+ "is_required": false,
166
+ "is_unique": false,
167
+ "is_indexed": null,
168
+ "rql_formula": null,
169
+ "formula_attr_metas": null,
170
+ "is_standard": true,
171
+ "derived_aggregated_field": null,
172
+ "derived_field_formula": null,
173
+ "section": null
174
+ },
175
+ {
176
+ "type": "CUSTOM_OBJECT_FIELD",
177
+ "custom_object_api_name": "dental_patient__c",
178
+ "field_api_name": "last_modified_by",
179
+ "field_display_name": "Last Modified by",
180
+ "data_type": {
181
+ "options_list": [],
182
+ "supported_types": [],
183
+ "field_type": "NATIVE_EDGE",
184
+ "og_model_rql_name": "Employee",
185
+ "db_model_name": "RoleWithCompany",
186
+ "reference_column_storage_type": "STRING"
187
+ },
188
+ "description": "The Employee who made the latest change.",
189
+ "is_required": false,
190
+ "is_unique": false,
191
+ "is_indexed": null,
192
+ "rql_formula": null,
193
+ "formula_attr_metas": null,
194
+ "is_standard": true,
195
+ "derived_aggregated_field": null,
196
+ "derived_field_formula": null,
197
+ "section": null
198
+ },
199
+ {
200
+ "type": "CUSTOM_OBJECT_FIELD",
201
+ "custom_object_api_name": "dental_patient__c",
202
+ "field_api_name": "created_by",
203
+ "field_display_name": "Created by",
204
+ "data_type": {
205
+ "options_list": [],
206
+ "supported_types": [],
207
+ "field_type": "NATIVE_EDGE",
208
+ "og_model_rql_name": "Employee",
209
+ "db_model_name": "RoleWithCompany",
210
+ "reference_column_storage_type": "STRING"
211
+ },
212
+ "description": "The Employee who created the record",
213
+ "is_required": false,
214
+ "is_unique": false,
215
+ "is_indexed": null,
216
+ "rql_formula": null,
217
+ "formula_attr_metas": null,
218
+ "is_standard": true,
219
+ "derived_aggregated_field": null,
220
+ "derived_field_formula": null,
221
+ "section": null
222
+ },
223
+ {
224
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
225
+ "section_id": "sec_pt_identity",
226
+ "model_name": "dental_patient__c",
227
+ "name": "Demographics"
228
+ },
229
+ {
230
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
231
+ "section_id": "sec_pt_clinical",
232
+ "model_name": "dental_patient__c",
233
+ "name": "Clinical"
234
+ },
235
+ {
236
+ "type": "CUSTOM_OBJECT_FIELD",
237
+ "custom_object_api_name": "dental_patient__c",
238
+ "field_api_name": "legal_name__c",
239
+ "field_display_name": "Full legal name",
240
+ "data_type": {
241
+ "options_list": [],
242
+ "supported_types": [],
243
+ "field_type": "TEXT",
244
+ "max_length": 160
245
+ },
246
+ "description": null,
247
+ "is_required": true,
248
+ "is_unique": null,
249
+ "is_indexed": null,
250
+ "rql_formula": null,
251
+ "formula_attr_metas": null,
252
+ "is_standard": false,
253
+ "derived_aggregated_field": null,
254
+ "derived_field_formula": null,
255
+ "section": "sec_pt_identity"
256
+ },
257
+ {
258
+ "type": "CUSTOM_OBJECT_FIELD",
259
+ "custom_object_api_name": "dental_patient__c",
260
+ "field_api_name": "date_of_birth__c",
261
+ "field_display_name": "Date of birth",
262
+ "data_type": {
263
+ "options_list": [],
264
+ "supported_types": [],
265
+ "field_type": "DATE"
266
+ },
267
+ "description": null,
268
+ "is_required": null,
269
+ "is_unique": null,
270
+ "is_indexed": null,
271
+ "rql_formula": null,
272
+ "formula_attr_metas": null,
273
+ "is_standard": false,
274
+ "derived_aggregated_field": null,
275
+ "derived_field_formula": null,
276
+ "section": "sec_pt_identity"
277
+ },
278
+ {
279
+ "type": "CUSTOM_OBJECT_FIELD",
280
+ "custom_object_api_name": "dental_patient__c",
281
+ "field_api_name": "phone__c",
282
+ "field_display_name": "Phone",
283
+ "data_type": {
284
+ "options_list": [],
285
+ "supported_types": [],
286
+ "field_type": "PHONE_NUMBER"
287
+ },
288
+ "description": null,
289
+ "is_required": null,
290
+ "is_unique": null,
291
+ "is_indexed": null,
292
+ "rql_formula": null,
293
+ "formula_attr_metas": null,
294
+ "is_standard": false,
295
+ "derived_aggregated_field": null,
296
+ "derived_field_formula": null,
297
+ "section": "sec_pt_identity"
298
+ },
299
+ {
300
+ "type": "CUSTOM_OBJECT_FIELD",
301
+ "custom_object_api_name": "dental_patient__c",
302
+ "field_api_name": "email__c",
303
+ "field_display_name": "Email",
304
+ "data_type": {
305
+ "options_list": [],
306
+ "supported_types": [],
307
+ "field_type": "EMAIL"
308
+ },
309
+ "description": null,
310
+ "is_required": null,
311
+ "is_unique": true,
312
+ "is_indexed": null,
313
+ "rql_formula": null,
314
+ "formula_attr_metas": null,
315
+ "is_standard": false,
316
+ "derived_aggregated_field": null,
317
+ "derived_field_formula": null,
318
+ "section": "sec_pt_identity"
319
+ },
320
+ {
321
+ "type": "CUSTOM_OBJECT_FIELD",
322
+ "custom_object_api_name": "dental_patient__c",
323
+ "field_api_name": "allergies_and_alerts__c",
324
+ "field_display_name": "Allergies & medical alerts",
325
+ "data_type": {
326
+ "options_list": [],
327
+ "supported_types": [],
328
+ "field_type": "LONG_TEXT",
329
+ "max_length": 2000
330
+ },
331
+ "description": "Drug allergies, bisphosphonates, anticoagulants, latex, etc.",
332
+ "is_required": null,
333
+ "is_unique": null,
334
+ "is_indexed": null,
335
+ "rql_formula": null,
336
+ "formula_attr_metas": null,
337
+ "is_standard": false,
338
+ "derived_aggregated_field": null,
339
+ "derived_field_formula": null,
340
+ "section": "sec_pt_clinical"
341
+ },
342
+ {
343
+ "type": "CUSTOM_OBJECT_FIELD",
344
+ "custom_object_api_name": "dental_patient__c",
345
+ "field_api_name": "insurance_plan__c",
346
+ "field_display_name": "Insurance / payer",
347
+ "data_type": {
348
+ "options_list": [],
349
+ "supported_types": [],
350
+ "field_type": "TEXT",
351
+ "max_length": 120
352
+ },
353
+ "description": null,
354
+ "is_required": null,
355
+ "is_unique": null,
356
+ "is_indexed": null,
357
+ "rql_formula": null,
358
+ "formula_attr_metas": null,
359
+ "is_standard": false,
360
+ "derived_aggregated_field": null,
361
+ "derived_field_formula": null,
362
+ "section": "sec_pt_clinical"
363
+ },
364
+ {
365
+ "type": "CUSTOM_OBJECT_FIELD",
366
+ "custom_object_api_name": "dental_patient__c",
367
+ "field_api_name": "chart_summary__c",
368
+ "field_display_name": "Chart summary & preferences",
369
+ "data_type": {
370
+ "options_list": [],
371
+ "supported_types": [],
372
+ "field_type": "LONG_TEXT",
373
+ "max_length": 4000
374
+ },
375
+ "description": "Narrative, anxiety notes, perio class, last prophy, family history",
376
+ "is_required": null,
377
+ "is_unique": null,
378
+ "is_indexed": null,
379
+ "rql_formula": null,
380
+ "formula_attr_metas": null,
381
+ "is_standard": false,
382
+ "derived_aggregated_field": null,
383
+ "derived_field_formula": null,
384
+ "section": "sec_pt_clinical"
385
+ },
386
+ {
387
+ "type": "CUSTOM_OBJECT_FIELD",
388
+ "custom_object_api_name": "dental_patient__c",
389
+ "field_api_name": "patient_label__c",
390
+ "field_display_name": "Chart label",
391
+ "data_type": {
392
+ "options_list": [],
393
+ "supported_types": [],
394
+ "field_type": "TEXT",
395
+ "max_length": 220
396
+ },
397
+ "description": "Quick list label (name and birth year)",
398
+ "is_required": null,
399
+ "is_unique": null,
400
+ "is_indexed": null,
401
+ "rql_formula": null,
402
+ "formula_attr_metas": null,
403
+ "is_standard": false,
404
+ "derived_aggregated_field": null,
405
+ "derived_field_formula": "CONCATENATE(legal_name__c, ' (b. ', YEAR(date_of_birth__c), ')')",
406
+ "section": "sec_pt_identity"
407
+ },
408
+ {
409
+ "type": "CUSTOM_OBJECT",
410
+ "api_name": "dental_operatory__c",
411
+ "name": "Operatory",
412
+ "description": "A chair, bay, or room you book on the daily board",
413
+ "category_api_name": "dental__c",
414
+ "icon": {
415
+ "emoji": "🪥"
416
+ },
417
+ "plural_label": "Operatories"
418
+ },
419
+ {
420
+ "type": "CUSTOM_OBJECT_FIELD",
421
+ "custom_object_api_name": "dental_operatory__c",
422
+ "field_api_name": "id",
423
+ "field_display_name": "ID",
424
+ "data_type": {
425
+ "options_list": [],
426
+ "supported_types": [],
427
+ "field_type": "TEXT"
428
+ },
429
+ "description": "The Rippling ID of a record",
430
+ "is_required": true,
431
+ "is_unique": true,
432
+ "is_indexed": null,
433
+ "rql_formula": null,
434
+ "formula_attr_metas": null,
435
+ "is_standard": true,
436
+ "derived_aggregated_field": null,
437
+ "derived_field_formula": null,
438
+ "section": null
439
+ },
440
+ {
441
+ "type": "CUSTOM_OBJECT_FIELD",
442
+ "custom_object_api_name": "dental_operatory__c",
443
+ "field_api_name": "created_at",
444
+ "field_display_name": "Created Date",
445
+ "data_type": {
446
+ "options_list": [],
447
+ "supported_types": [],
448
+ "field_type": "DATETIME"
449
+ },
450
+ "description": "The date and time a record was created",
451
+ "is_required": false,
452
+ "is_unique": false,
453
+ "is_indexed": null,
454
+ "rql_formula": null,
455
+ "formula_attr_metas": null,
456
+ "is_standard": true,
457
+ "derived_aggregated_field": null,
458
+ "derived_field_formula": null,
459
+ "section": null
460
+ },
461
+ {
462
+ "type": "CUSTOM_OBJECT_FIELD",
463
+ "custom_object_api_name": "dental_operatory__c",
464
+ "field_api_name": "updated_at",
465
+ "field_display_name": "Last Modified Date",
466
+ "data_type": {
467
+ "options_list": [],
468
+ "supported_types": [],
469
+ "field_type": "DATETIME"
470
+ },
471
+ "description": "The date and time a record was last updated",
472
+ "is_required": false,
473
+ "is_unique": false,
474
+ "is_indexed": null,
475
+ "rql_formula": null,
476
+ "formula_attr_metas": null,
477
+ "is_standard": true,
478
+ "derived_aggregated_field": null,
479
+ "derived_field_formula": null,
480
+ "section": null
481
+ },
482
+ {
483
+ "type": "CUSTOM_OBJECT_FIELD",
484
+ "custom_object_api_name": "dental_operatory__c",
485
+ "field_api_name": "system_updated_at",
486
+ "field_display_name": "System Modified At",
487
+ "data_type": {
488
+ "options_list": [],
489
+ "supported_types": [],
490
+ "field_type": "DATETIME"
491
+ },
492
+ "description": "The date and time a record was last updated by the system",
493
+ "is_required": false,
494
+ "is_unique": false,
495
+ "is_indexed": null,
496
+ "rql_formula": null,
497
+ "formula_attr_metas": null,
498
+ "is_standard": true,
499
+ "derived_aggregated_field": null,
500
+ "derived_field_formula": null,
501
+ "section": null
502
+ },
503
+ {
504
+ "type": "CUSTOM_OBJECT_FIELD",
505
+ "custom_object_api_name": "dental_operatory__c",
506
+ "field_api_name": "external_id",
507
+ "field_display_name": "External ID",
508
+ "data_type": {
509
+ "options_list": [],
510
+ "supported_types": [],
511
+ "field_type": "TEXT"
512
+ },
513
+ "description": "The external identifier for a record used in third party integrations",
514
+ "is_required": false,
515
+ "is_unique": true,
516
+ "is_indexed": null,
517
+ "rql_formula": null,
518
+ "formula_attr_metas": null,
519
+ "is_standard": true,
520
+ "derived_aggregated_field": null,
521
+ "derived_field_formula": null,
522
+ "section": null
523
+ },
524
+ {
525
+ "type": "CUSTOM_OBJECT_FIELD",
526
+ "custom_object_api_name": "dental_operatory__c",
527
+ "field_api_name": "name",
528
+ "field_display_name": "Name",
529
+ "data_type": {
530
+ "options_list": [],
531
+ "supported_types": [],
532
+ "field_type": "TEXT"
533
+ },
534
+ "description": "A string used to describe a record. This is used for display purposes as well as search",
535
+ "is_required": true,
536
+ "is_unique": false,
537
+ "is_indexed": null,
538
+ "rql_formula": null,
539
+ "formula_attr_metas": null,
540
+ "is_standard": true,
541
+ "derived_aggregated_field": null,
542
+ "derived_field_formula": null,
543
+ "section": null
544
+ },
545
+ {
546
+ "type": "CUSTOM_OBJECT_FIELD",
547
+ "custom_object_api_name": "dental_operatory__c",
548
+ "field_api_name": "owner_role",
549
+ "field_display_name": "Owner",
550
+ "data_type": {
551
+ "options_list": [],
552
+ "supported_types": [],
553
+ "field_type": "NATIVE_EDGE",
554
+ "og_model_rql_name": "Employee",
555
+ "db_model_name": "RoleWithCompany",
556
+ "reference_column_storage_type": "STRING"
557
+ },
558
+ "description": "The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data",
559
+ "is_required": false,
560
+ "is_unique": false,
561
+ "is_indexed": null,
562
+ "rql_formula": null,
563
+ "formula_attr_metas": null,
564
+ "is_standard": true,
565
+ "derived_aggregated_field": null,
566
+ "derived_field_formula": null,
567
+ "section": null
568
+ },
569
+ {
570
+ "type": "CUSTOM_OBJECT_FIELD",
571
+ "custom_object_api_name": "dental_operatory__c",
572
+ "field_api_name": "last_modified_by",
573
+ "field_display_name": "Last Modified by",
574
+ "data_type": {
575
+ "options_list": [],
576
+ "supported_types": [],
577
+ "field_type": "NATIVE_EDGE",
578
+ "og_model_rql_name": "Employee",
579
+ "db_model_name": "RoleWithCompany",
580
+ "reference_column_storage_type": "STRING"
581
+ },
582
+ "description": "The Employee who made the latest change.",
583
+ "is_required": false,
584
+ "is_unique": false,
585
+ "is_indexed": null,
586
+ "rql_formula": null,
587
+ "formula_attr_metas": null,
588
+ "is_standard": true,
589
+ "derived_aggregated_field": null,
590
+ "derived_field_formula": null,
591
+ "section": null
592
+ },
593
+ {
594
+ "type": "CUSTOM_OBJECT_FIELD",
595
+ "custom_object_api_name": "dental_operatory__c",
596
+ "field_api_name": "created_by",
597
+ "field_display_name": "Created by",
598
+ "data_type": {
599
+ "options_list": [],
600
+ "supported_types": [],
601
+ "field_type": "NATIVE_EDGE",
602
+ "og_model_rql_name": "Employee",
603
+ "db_model_name": "RoleWithCompany",
604
+ "reference_column_storage_type": "STRING"
605
+ },
606
+ "description": "The Employee who created the record",
607
+ "is_required": false,
608
+ "is_unique": false,
609
+ "is_indexed": null,
610
+ "rql_formula": null,
611
+ "formula_attr_metas": null,
612
+ "is_standard": true,
613
+ "derived_aggregated_field": null,
614
+ "derived_field_formula": null,
615
+ "section": null
616
+ },
617
+ {
618
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
619
+ "section_id": "sec_op_info",
620
+ "model_name": "dental_operatory__c",
621
+ "name": "Operatory"
622
+ },
623
+ {
624
+ "type": "CUSTOM_OBJECT_FIELD",
625
+ "custom_object_api_name": "dental_operatory__c",
626
+ "field_api_name": "operatory_name__c",
627
+ "field_display_name": "Name / label",
628
+ "data_type": {
629
+ "options_list": [],
630
+ "supported_types": [],
631
+ "field_type": "TEXT",
632
+ "max_length": 80
633
+ },
634
+ "description": "E.g. \"Hyg 1\", \"DDS-2\", \"Surg A\"",
635
+ "is_required": true,
636
+ "is_unique": null,
637
+ "is_indexed": null,
638
+ "rql_formula": null,
639
+ "formula_attr_metas": null,
640
+ "is_standard": false,
641
+ "derived_aggregated_field": null,
642
+ "derived_field_formula": null,
643
+ "section": "sec_op_info"
644
+ },
645
+ {
646
+ "type": "CUSTOM_OBJECT_FIELD",
647
+ "custom_object_api_name": "dental_operatory__c",
648
+ "field_api_name": "room_code__c",
649
+ "field_display_name": "Room code",
650
+ "data_type": {
651
+ "options_list": [],
652
+ "supported_types": [],
653
+ "field_type": "TEXT",
654
+ "max_length": 20
655
+ },
656
+ "description": "Short code for whiteboards and schedules",
657
+ "is_required": null,
658
+ "is_unique": null,
659
+ "is_indexed": null,
660
+ "rql_formula": null,
661
+ "formula_attr_metas": null,
662
+ "is_standard": false,
663
+ "derived_aggregated_field": null,
664
+ "derived_field_formula": null,
665
+ "section": "sec_op_info"
666
+ },
667
+ {
668
+ "type": "CUSTOM_OBJECT",
669
+ "api_name": "dental_appointment__c",
670
+ "name": "Appointment",
671
+ "description": "Chair booking with visit type and real-time visit status",
672
+ "category_api_name": "dental__c",
673
+ "icon": {
674
+ "emoji": "📅"
675
+ },
676
+ "plural_label": "Appointments"
677
+ },
678
+ {
679
+ "type": "CUSTOM_OBJECT_FIELD",
680
+ "custom_object_api_name": "dental_appointment__c",
681
+ "field_api_name": "id",
682
+ "field_display_name": "ID",
683
+ "data_type": {
684
+ "options_list": [],
685
+ "supported_types": [],
686
+ "field_type": "TEXT"
687
+ },
688
+ "description": "The Rippling ID of a record",
689
+ "is_required": true,
690
+ "is_unique": true,
691
+ "is_indexed": null,
692
+ "rql_formula": null,
693
+ "formula_attr_metas": null,
694
+ "is_standard": true,
695
+ "derived_aggregated_field": null,
696
+ "derived_field_formula": null,
697
+ "section": null
698
+ },
699
+ {
700
+ "type": "CUSTOM_OBJECT_FIELD",
701
+ "custom_object_api_name": "dental_appointment__c",
702
+ "field_api_name": "created_at",
703
+ "field_display_name": "Created Date",
704
+ "data_type": {
705
+ "options_list": [],
706
+ "supported_types": [],
707
+ "field_type": "DATETIME"
708
+ },
709
+ "description": "The date and time a record was created",
710
+ "is_required": false,
711
+ "is_unique": false,
712
+ "is_indexed": null,
713
+ "rql_formula": null,
714
+ "formula_attr_metas": null,
715
+ "is_standard": true,
716
+ "derived_aggregated_field": null,
717
+ "derived_field_formula": null,
718
+ "section": null
719
+ },
720
+ {
721
+ "type": "CUSTOM_OBJECT_FIELD",
722
+ "custom_object_api_name": "dental_appointment__c",
723
+ "field_api_name": "updated_at",
724
+ "field_display_name": "Last Modified Date",
725
+ "data_type": {
726
+ "options_list": [],
727
+ "supported_types": [],
728
+ "field_type": "DATETIME"
729
+ },
730
+ "description": "The date and time a record was last updated",
731
+ "is_required": false,
732
+ "is_unique": false,
733
+ "is_indexed": null,
734
+ "rql_formula": null,
735
+ "formula_attr_metas": null,
736
+ "is_standard": true,
737
+ "derived_aggregated_field": null,
738
+ "derived_field_formula": null,
739
+ "section": null
740
+ },
741
+ {
742
+ "type": "CUSTOM_OBJECT_FIELD",
743
+ "custom_object_api_name": "dental_appointment__c",
744
+ "field_api_name": "system_updated_at",
745
+ "field_display_name": "System Modified At",
746
+ "data_type": {
747
+ "options_list": [],
748
+ "supported_types": [],
749
+ "field_type": "DATETIME"
750
+ },
751
+ "description": "The date and time a record was last updated by the system",
752
+ "is_required": false,
753
+ "is_unique": false,
754
+ "is_indexed": null,
755
+ "rql_formula": null,
756
+ "formula_attr_metas": null,
757
+ "is_standard": true,
758
+ "derived_aggregated_field": null,
759
+ "derived_field_formula": null,
760
+ "section": null
761
+ },
762
+ {
763
+ "type": "CUSTOM_OBJECT_FIELD",
764
+ "custom_object_api_name": "dental_appointment__c",
765
+ "field_api_name": "external_id",
766
+ "field_display_name": "External ID",
767
+ "data_type": {
768
+ "options_list": [],
769
+ "supported_types": [],
770
+ "field_type": "TEXT"
771
+ },
772
+ "description": "The external identifier for a record used in third party integrations",
773
+ "is_required": false,
774
+ "is_unique": true,
775
+ "is_indexed": null,
776
+ "rql_formula": null,
777
+ "formula_attr_metas": null,
778
+ "is_standard": true,
779
+ "derived_aggregated_field": null,
780
+ "derived_field_formula": null,
781
+ "section": null
782
+ },
783
+ {
784
+ "type": "CUSTOM_OBJECT_FIELD",
785
+ "custom_object_api_name": "dental_appointment__c",
786
+ "field_api_name": "name",
787
+ "field_display_name": "Name",
788
+ "data_type": {
789
+ "options_list": [],
790
+ "supported_types": [],
791
+ "field_type": "TEXT"
792
+ },
793
+ "description": "A string used to describe a record. This is used for display purposes as well as search",
794
+ "is_required": true,
795
+ "is_unique": false,
796
+ "is_indexed": null,
797
+ "rql_formula": null,
798
+ "formula_attr_metas": null,
799
+ "is_standard": true,
800
+ "derived_aggregated_field": null,
801
+ "derived_field_formula": null,
802
+ "section": null
803
+ },
804
+ {
805
+ "type": "CUSTOM_OBJECT_FIELD",
806
+ "custom_object_api_name": "dental_appointment__c",
807
+ "field_api_name": "owner_role",
808
+ "field_display_name": "Owner",
809
+ "data_type": {
810
+ "options_list": [],
811
+ "supported_types": [],
812
+ "field_type": "NATIVE_EDGE",
813
+ "og_model_rql_name": "Employee",
814
+ "db_model_name": "RoleWithCompany",
815
+ "reference_column_storage_type": "STRING"
816
+ },
817
+ "description": "The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data",
818
+ "is_required": false,
819
+ "is_unique": false,
820
+ "is_indexed": null,
821
+ "rql_formula": null,
822
+ "formula_attr_metas": null,
823
+ "is_standard": true,
824
+ "derived_aggregated_field": null,
825
+ "derived_field_formula": null,
826
+ "section": null
827
+ },
828
+ {
829
+ "type": "CUSTOM_OBJECT_FIELD",
830
+ "custom_object_api_name": "dental_appointment__c",
831
+ "field_api_name": "last_modified_by",
832
+ "field_display_name": "Last Modified by",
833
+ "data_type": {
834
+ "options_list": [],
835
+ "supported_types": [],
836
+ "field_type": "NATIVE_EDGE",
837
+ "og_model_rql_name": "Employee",
838
+ "db_model_name": "RoleWithCompany",
839
+ "reference_column_storage_type": "STRING"
840
+ },
841
+ "description": "The Employee who made the latest change.",
842
+ "is_required": false,
843
+ "is_unique": false,
844
+ "is_indexed": null,
845
+ "rql_formula": null,
846
+ "formula_attr_metas": null,
847
+ "is_standard": true,
848
+ "derived_aggregated_field": null,
849
+ "derived_field_formula": null,
850
+ "section": null
851
+ },
852
+ {
853
+ "type": "CUSTOM_OBJECT_FIELD",
854
+ "custom_object_api_name": "dental_appointment__c",
855
+ "field_api_name": "created_by",
856
+ "field_display_name": "Created by",
857
+ "data_type": {
858
+ "options_list": [],
859
+ "supported_types": [],
860
+ "field_type": "NATIVE_EDGE",
861
+ "og_model_rql_name": "Employee",
862
+ "db_model_name": "RoleWithCompany",
863
+ "reference_column_storage_type": "STRING"
864
+ },
865
+ "description": "The Employee who created the record",
866
+ "is_required": false,
867
+ "is_unique": false,
868
+ "is_indexed": null,
869
+ "rql_formula": null,
870
+ "formula_attr_metas": null,
871
+ "is_standard": true,
872
+ "derived_aggregated_field": null,
873
+ "derived_field_formula": null,
874
+ "section": null
875
+ },
876
+ {
877
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
878
+ "section_id": "sec_appt_op",
879
+ "model_name": "dental_appointment__c",
880
+ "name": "Operatory & time"
881
+ },
882
+ {
883
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
884
+ "section_id": "sec_appt_patient",
885
+ "model_name": "dental_appointment__c",
886
+ "name": "Patient & visit"
887
+ },
888
+ {
889
+ "type": "CUSTOM_OBJECT_FIELD",
890
+ "custom_object_api_name": "dental_appointment__c",
891
+ "field_api_name": "operatory_ref__c",
892
+ "field_display_name": "Operatory (chair)",
893
+ "data_type": {
894
+ "options_list": [],
895
+ "supported_types": [],
896
+ "field_type": "OG_REFERENCE_FIELD",
897
+ "og_model_rql_name": "dental_operatory__c",
898
+ "edge_type": "PARENT_CHILD",
899
+ "related_data_label": "Appointments",
900
+ "parent_child_type": "PRIMARY",
901
+ "enable_parent_owner_inheritance": false
902
+ },
903
+ "description": "Which chair or bay this visit is booked on",
904
+ "is_required": true,
905
+ "is_unique": null,
906
+ "is_indexed": null,
907
+ "rql_formula": null,
908
+ "formula_attr_metas": null,
909
+ "is_standard": false,
910
+ "derived_aggregated_field": null,
911
+ "derived_field_formula": null,
912
+ "section": "sec_appt_op"
913
+ },
914
+ {
915
+ "type": "CUSTOM_OBJECT_FIELD",
916
+ "custom_object_api_name": "dental_appointment__c",
917
+ "field_api_name": "start_time__c",
918
+ "field_display_name": "Start (local)",
919
+ "data_type": {
920
+ "options_list": [],
921
+ "supported_types": [],
922
+ "field_type": "DATETIME"
923
+ },
924
+ "description": "Planned or actual start; board sorts by this",
925
+ "is_required": true,
926
+ "is_unique": null,
927
+ "is_indexed": null,
928
+ "rql_formula": null,
929
+ "formula_attr_metas": null,
930
+ "is_standard": false,
931
+ "derived_aggregated_field": null,
932
+ "derived_field_formula": null,
933
+ "section": "sec_appt_op"
934
+ },
935
+ {
936
+ "type": "CUSTOM_OBJECT_FIELD",
937
+ "custom_object_api_name": "dental_appointment__c",
938
+ "field_api_name": "duration_minutes__c",
939
+ "field_display_name": "Duration (minutes)",
940
+ "data_type": {
941
+ "options_list": [],
942
+ "supported_types": [],
943
+ "field_type": "NUMBER",
944
+ "num_of_decimal_places": 0
945
+ },
946
+ "description": "Expected chair time for the procedure block",
947
+ "is_required": true,
948
+ "is_unique": null,
949
+ "is_indexed": null,
950
+ "rql_formula": null,
951
+ "formula_attr_metas": null,
952
+ "is_standard": false,
953
+ "derived_aggregated_field": null,
954
+ "derived_field_formula": null,
955
+ "section": "sec_appt_op"
956
+ },
957
+ {
958
+ "type": "CUSTOM_OBJECT_FIELD",
959
+ "custom_object_api_name": "dental_appointment__c",
960
+ "field_api_name": "patient_ref__c",
961
+ "field_display_name": "Patient",
962
+ "data_type": {
963
+ "options_list": [],
964
+ "supported_types": [],
965
+ "field_type": "OG_REFERENCE_FIELD",
966
+ "og_model_rql_name": "dental_patient__c",
967
+ "edge_type": "LOOKUP",
968
+ "related_data_label": "Appointments"
969
+ },
970
+ "description": "Chart to open for this visit",
971
+ "is_required": true,
972
+ "is_unique": null,
973
+ "is_indexed": null,
974
+ "rql_formula": null,
975
+ "formula_attr_metas": null,
976
+ "is_standard": false,
977
+ "derived_aggregated_field": null,
978
+ "derived_field_formula": null,
979
+ "section": "sec_appt_patient"
980
+ },
981
+ {
982
+ "type": "CUSTOM_OBJECT_FIELD",
983
+ "custom_object_api_name": "dental_appointment__c",
984
+ "field_api_name": "visit_type__c",
985
+ "field_display_name": "Visit type",
986
+ "data_type": {
987
+ "options_list": [
988
+ "New patient exam",
989
+ "Periodic / recall exam",
990
+ "Prophy / cleaning",
991
+ "Restorative",
992
+ "Endodontic",
993
+ "Perio / SRP",
994
+ "Oral surgery / extraction",
995
+ "Orthodontic",
996
+ "Emergency / pain",
997
+ "Other"
998
+ ],
999
+ "supported_types": [],
1000
+ "field_type": "SELECT"
1001
+ },
1002
+ "description": null,
1003
+ "is_required": true,
1004
+ "is_unique": null,
1005
+ "is_indexed": null,
1006
+ "rql_formula": null,
1007
+ "formula_attr_metas": null,
1008
+ "is_standard": false,
1009
+ "derived_aggregated_field": null,
1010
+ "derived_field_formula": null,
1011
+ "section": "sec_appt_patient"
1012
+ },
1013
+ {
1014
+ "type": "CUSTOM_OBJECT_FIELD",
1015
+ "custom_object_api_name": "dental_appointment__c",
1016
+ "field_api_name": "appointment_status__c",
1017
+ "field_display_name": "Visit status",
1018
+ "data_type": {
1019
+ "options_list": ["Scheduled", "Checked in", "In treatment", "Completed", "Cancelled", "No-show"],
1020
+ "supported_types": [],
1021
+ "field_type": "SELECT"
1022
+ },
1023
+ "description": "Front-desk and clinical workflow status",
1024
+ "is_required": true,
1025
+ "is_unique": null,
1026
+ "is_indexed": null,
1027
+ "rql_formula": null,
1028
+ "formula_attr_metas": null,
1029
+ "is_standard": false,
1030
+ "derived_aggregated_field": null,
1031
+ "derived_field_formula": null,
1032
+ "section": "sec_appt_patient"
1033
+ },
1034
+ {
1035
+ "type": "CUSTOM_OBJECT_FIELD",
1036
+ "custom_object_api_name": "dental_appointment__c",
1037
+ "field_api_name": "visit_notes__c",
1038
+ "field_display_name": "Visit notes",
1039
+ "data_type": {
1040
+ "options_list": [],
1041
+ "supported_types": [],
1042
+ "field_type": "LONG_TEXT",
1043
+ "max_length": 4000
1044
+ },
1045
+ "description": "Chairside notes for this block (sync with EDR as needed)",
1046
+ "is_required": null,
1047
+ "is_unique": null,
1048
+ "is_indexed": null,
1049
+ "rql_formula": null,
1050
+ "formula_attr_metas": null,
1051
+ "is_standard": false,
1052
+ "derived_aggregated_field": null,
1053
+ "derived_field_formula": null,
1054
+ "section": "sec_appt_patient"
1055
+ },
1056
+ {
1057
+ "type": "CUSTOM_OBJECT_FIELD",
1058
+ "custom_object_api_name": "dental_appointment__c",
1059
+ "field_api_name": "board_label__c",
1060
+ "field_display_name": "Board label",
1061
+ "data_type": {
1062
+ "options_list": [],
1063
+ "supported_types": [],
1064
+ "field_type": "TEXT",
1065
+ "max_length": 260
1066
+ },
1067
+ "description": null,
1068
+ "is_required": null,
1069
+ "is_unique": null,
1070
+ "is_indexed": null,
1071
+ "rql_formula": null,
1072
+ "formula_attr_metas": null,
1073
+ "is_standard": false,
1074
+ "derived_aggregated_field": null,
1075
+ "derived_field_formula": "CONCATENATE(visit_type__c, ' · ', appointment_status__c)",
1076
+ "section": "sec_appt_patient"
1077
+ },
1078
+ {
1079
+ "type": "CUSTOM_OBJECT",
1080
+ "api_name": "dental_treatment_plan__c",
1081
+ "name": "Treatment plan",
1082
+ "description": "Staged work sequenced for a patient",
1083
+ "category_api_name": "dental__c",
1084
+ "icon": {
1085
+ "emoji": "📋"
1086
+ },
1087
+ "plural_label": "Treatment plans"
1088
+ },
1089
+ {
1090
+ "type": "CUSTOM_OBJECT_FIELD",
1091
+ "custom_object_api_name": "dental_treatment_plan__c",
1092
+ "field_api_name": "id",
1093
+ "field_display_name": "ID",
1094
+ "data_type": {
1095
+ "options_list": [],
1096
+ "supported_types": [],
1097
+ "field_type": "TEXT"
1098
+ },
1099
+ "description": "The Rippling ID of a record",
1100
+ "is_required": true,
1101
+ "is_unique": true,
1102
+ "is_indexed": null,
1103
+ "rql_formula": null,
1104
+ "formula_attr_metas": null,
1105
+ "is_standard": true,
1106
+ "derived_aggregated_field": null,
1107
+ "derived_field_formula": null,
1108
+ "section": null
1109
+ },
1110
+ {
1111
+ "type": "CUSTOM_OBJECT_FIELD",
1112
+ "custom_object_api_name": "dental_treatment_plan__c",
1113
+ "field_api_name": "created_at",
1114
+ "field_display_name": "Created Date",
1115
+ "data_type": {
1116
+ "options_list": [],
1117
+ "supported_types": [],
1118
+ "field_type": "DATETIME"
1119
+ },
1120
+ "description": "The date and time a record was created",
1121
+ "is_required": false,
1122
+ "is_unique": false,
1123
+ "is_indexed": null,
1124
+ "rql_formula": null,
1125
+ "formula_attr_metas": null,
1126
+ "is_standard": true,
1127
+ "derived_aggregated_field": null,
1128
+ "derived_field_formula": null,
1129
+ "section": null
1130
+ },
1131
+ {
1132
+ "type": "CUSTOM_OBJECT_FIELD",
1133
+ "custom_object_api_name": "dental_treatment_plan__c",
1134
+ "field_api_name": "updated_at",
1135
+ "field_display_name": "Last Modified Date",
1136
+ "data_type": {
1137
+ "options_list": [],
1138
+ "supported_types": [],
1139
+ "field_type": "DATETIME"
1140
+ },
1141
+ "description": "The date and time a record was last updated",
1142
+ "is_required": false,
1143
+ "is_unique": false,
1144
+ "is_indexed": null,
1145
+ "rql_formula": null,
1146
+ "formula_attr_metas": null,
1147
+ "is_standard": true,
1148
+ "derived_aggregated_field": null,
1149
+ "derived_field_formula": null,
1150
+ "section": null
1151
+ },
1152
+ {
1153
+ "type": "CUSTOM_OBJECT_FIELD",
1154
+ "custom_object_api_name": "dental_treatment_plan__c",
1155
+ "field_api_name": "system_updated_at",
1156
+ "field_display_name": "System Modified At",
1157
+ "data_type": {
1158
+ "options_list": [],
1159
+ "supported_types": [],
1160
+ "field_type": "DATETIME"
1161
+ },
1162
+ "description": "The date and time a record was last updated by the system",
1163
+ "is_required": false,
1164
+ "is_unique": false,
1165
+ "is_indexed": null,
1166
+ "rql_formula": null,
1167
+ "formula_attr_metas": null,
1168
+ "is_standard": true,
1169
+ "derived_aggregated_field": null,
1170
+ "derived_field_formula": null,
1171
+ "section": null
1172
+ },
1173
+ {
1174
+ "type": "CUSTOM_OBJECT_FIELD",
1175
+ "custom_object_api_name": "dental_treatment_plan__c",
1176
+ "field_api_name": "external_id",
1177
+ "field_display_name": "External ID",
1178
+ "data_type": {
1179
+ "options_list": [],
1180
+ "supported_types": [],
1181
+ "field_type": "TEXT"
1182
+ },
1183
+ "description": "The external identifier for a record used in third party integrations",
1184
+ "is_required": false,
1185
+ "is_unique": true,
1186
+ "is_indexed": null,
1187
+ "rql_formula": null,
1188
+ "formula_attr_metas": null,
1189
+ "is_standard": true,
1190
+ "derived_aggregated_field": null,
1191
+ "derived_field_formula": null,
1192
+ "section": null
1193
+ },
1194
+ {
1195
+ "type": "CUSTOM_OBJECT_FIELD",
1196
+ "custom_object_api_name": "dental_treatment_plan__c",
1197
+ "field_api_name": "name",
1198
+ "field_display_name": "Name",
1199
+ "data_type": {
1200
+ "options_list": [],
1201
+ "supported_types": [],
1202
+ "field_type": "TEXT"
1203
+ },
1204
+ "description": "A string used to describe a record. This is used for display purposes as well as search",
1205
+ "is_required": true,
1206
+ "is_unique": false,
1207
+ "is_indexed": null,
1208
+ "rql_formula": null,
1209
+ "formula_attr_metas": null,
1210
+ "is_standard": true,
1211
+ "derived_aggregated_field": null,
1212
+ "derived_field_formula": null,
1213
+ "section": null
1214
+ },
1215
+ {
1216
+ "type": "CUSTOM_OBJECT_FIELD",
1217
+ "custom_object_api_name": "dental_treatment_plan__c",
1218
+ "field_api_name": "owner_role",
1219
+ "field_display_name": "Owner",
1220
+ "data_type": {
1221
+ "options_list": [],
1222
+ "supported_types": [],
1223
+ "field_type": "NATIVE_EDGE",
1224
+ "og_model_rql_name": "Employee",
1225
+ "db_model_name": "RoleWithCompany",
1226
+ "reference_column_storage_type": "STRING"
1227
+ },
1228
+ "description": "The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data",
1229
+ "is_required": false,
1230
+ "is_unique": false,
1231
+ "is_indexed": null,
1232
+ "rql_formula": null,
1233
+ "formula_attr_metas": null,
1234
+ "is_standard": true,
1235
+ "derived_aggregated_field": null,
1236
+ "derived_field_formula": null,
1237
+ "section": null
1238
+ },
1239
+ {
1240
+ "type": "CUSTOM_OBJECT_FIELD",
1241
+ "custom_object_api_name": "dental_treatment_plan__c",
1242
+ "field_api_name": "last_modified_by",
1243
+ "field_display_name": "Last Modified by",
1244
+ "data_type": {
1245
+ "options_list": [],
1246
+ "supported_types": [],
1247
+ "field_type": "NATIVE_EDGE",
1248
+ "og_model_rql_name": "Employee",
1249
+ "db_model_name": "RoleWithCompany",
1250
+ "reference_column_storage_type": "STRING"
1251
+ },
1252
+ "description": "The Employee who made the latest change.",
1253
+ "is_required": false,
1254
+ "is_unique": false,
1255
+ "is_indexed": null,
1256
+ "rql_formula": null,
1257
+ "formula_attr_metas": null,
1258
+ "is_standard": true,
1259
+ "derived_aggregated_field": null,
1260
+ "derived_field_formula": null,
1261
+ "section": null
1262
+ },
1263
+ {
1264
+ "type": "CUSTOM_OBJECT_FIELD",
1265
+ "custom_object_api_name": "dental_treatment_plan__c",
1266
+ "field_api_name": "created_by",
1267
+ "field_display_name": "Created by",
1268
+ "data_type": {
1269
+ "options_list": [],
1270
+ "supported_types": [],
1271
+ "field_type": "NATIVE_EDGE",
1272
+ "og_model_rql_name": "Employee",
1273
+ "db_model_name": "RoleWithCompany",
1274
+ "reference_column_storage_type": "STRING"
1275
+ },
1276
+ "description": "The Employee who created the record",
1277
+ "is_required": false,
1278
+ "is_unique": false,
1279
+ "is_indexed": null,
1280
+ "rql_formula": null,
1281
+ "formula_attr_metas": null,
1282
+ "is_standard": true,
1283
+ "derived_aggregated_field": null,
1284
+ "derived_field_formula": null,
1285
+ "section": null
1286
+ },
1287
+ {
1288
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
1289
+ "section_id": "sec_plan_link",
1290
+ "model_name": "dental_treatment_plan__c",
1291
+ "name": "Link"
1292
+ },
1293
+ {
1294
+ "type": "CUSTOM_OBJECT_FIELD_SECTION",
1295
+ "section_id": "sec_plan_body",
1296
+ "model_name": "dental_treatment_plan__c",
1297
+ "name": "Plan"
1298
+ },
1299
+ {
1300
+ "type": "CUSTOM_OBJECT_FIELD",
1301
+ "custom_object_api_name": "dental_treatment_plan__c",
1302
+ "field_api_name": "plan_patient_ref__c",
1303
+ "field_display_name": "Patient",
1304
+ "data_type": {
1305
+ "options_list": [],
1306
+ "supported_types": [],
1307
+ "field_type": "OG_REFERENCE_FIELD",
1308
+ "og_model_rql_name": "dental_patient__c",
1309
+ "edge_type": "PARENT_CHILD",
1310
+ "related_data_label": "Treatment plans",
1311
+ "parent_child_type": "PRIMARY",
1312
+ "enable_parent_owner_inheritance": false
1313
+ },
1314
+ "description": "Which chart owns this plan",
1315
+ "is_required": true,
1316
+ "is_unique": null,
1317
+ "is_indexed": null,
1318
+ "rql_formula": null,
1319
+ "formula_attr_metas": null,
1320
+ "is_standard": false,
1321
+ "derived_aggregated_field": null,
1322
+ "derived_field_formula": null,
1323
+ "section": "sec_plan_link"
1324
+ },
1325
+ {
1326
+ "type": "CUSTOM_OBJECT_FIELD",
1327
+ "custom_object_api_name": "dental_treatment_plan__c",
1328
+ "field_api_name": "plan_name__c",
1329
+ "field_display_name": "Plan name",
1330
+ "data_type": {
1331
+ "options_list": [],
1332
+ "supported_types": [],
1333
+ "field_type": "TEXT",
1334
+ "max_length": 200
1335
+ },
1336
+ "description": "E.g. \"Full mouth rehab - phase 1\", \"Crown 14 DO\"",
1337
+ "is_required": true,
1338
+ "is_unique": null,
1339
+ "is_indexed": null,
1340
+ "rql_formula": null,
1341
+ "formula_attr_metas": null,
1342
+ "is_standard": false,
1343
+ "derived_aggregated_field": null,
1344
+ "derived_field_formula": null,
1345
+ "section": "sec_plan_body"
1346
+ },
1347
+ {
1348
+ "type": "CUSTOM_OBJECT_FIELD",
1349
+ "custom_object_api_name": "dental_treatment_plan__c",
1350
+ "field_api_name": "plan_status__c",
1351
+ "field_display_name": "Status",
1352
+ "data_type": {
1353
+ "options_list": ["Draft", "Presented", "Accepted", "In progress", "Completed", "Declined / on hold"],
1354
+ "supported_types": [],
1355
+ "field_type": "SELECT"
1356
+ },
1357
+ "description": null,
1358
+ "is_required": true,
1359
+ "is_unique": null,
1360
+ "is_indexed": null,
1361
+ "rql_formula": null,
1362
+ "formula_attr_metas": null,
1363
+ "is_standard": false,
1364
+ "derived_aggregated_field": null,
1365
+ "derived_field_formula": null,
1366
+ "section": "sec_plan_body"
1367
+ },
1368
+ {
1369
+ "type": "CUSTOM_OBJECT_FIELD",
1370
+ "custom_object_api_name": "dental_treatment_plan__c",
1371
+ "field_api_name": "target_completion__c",
1372
+ "field_display_name": "Target completion",
1373
+ "data_type": {
1374
+ "options_list": [],
1375
+ "supported_types": [],
1376
+ "field_type": "DATE"
1377
+ },
1378
+ "description": "Goal to finish or next review",
1379
+ "is_required": null,
1380
+ "is_unique": null,
1381
+ "is_indexed": null,
1382
+ "rql_formula": null,
1383
+ "formula_attr_metas": null,
1384
+ "is_standard": false,
1385
+ "derived_aggregated_field": null,
1386
+ "derived_field_formula": null,
1387
+ "section": "sec_plan_body"
1388
+ },
1389
+ {
1390
+ "type": "CUSTOM_OBJECT_FIELD",
1391
+ "custom_object_api_name": "dental_treatment_plan__c",
1392
+ "field_api_name": "procedures_summary__c",
1393
+ "field_display_name": "Procedures & sequence",
1394
+ "data_type": {
1395
+ "options_list": [],
1396
+ "supported_types": [],
1397
+ "field_type": "LONG_TEXT",
1398
+ "max_length": 8000
1399
+ },
1400
+ "description": "Tooth numbers, codes, and staging",
1401
+ "is_required": null,
1402
+ "is_unique": null,
1403
+ "is_indexed": null,
1404
+ "rql_formula": null,
1405
+ "formula_attr_metas": null,
1406
+ "is_standard": false,
1407
+ "derived_aggregated_field": null,
1408
+ "derived_field_formula": null,
1409
+ "section": "sec_plan_body"
1410
+ },
1411
+ {
1412
+ "type": "CUSTOM_OBJECT_FIELD",
1413
+ "custom_object_api_name": "dental_treatment_plan__c",
1414
+ "field_api_name": "fee_estimate_cents__c",
1415
+ "field_display_name": "Fee estimate (cents)",
1416
+ "data_type": {
1417
+ "options_list": [],
1418
+ "supported_types": [],
1419
+ "field_type": "NUMBER",
1420
+ "num_of_decimal_places": 0
1421
+ },
1422
+ "description": "Rough office fee total for planning; adjust per office policy",
1423
+ "is_required": null,
1424
+ "is_unique": null,
1425
+ "is_indexed": null,
1426
+ "rql_formula": null,
1427
+ "formula_attr_metas": null,
1428
+ "is_standard": false,
1429
+ "derived_aggregated_field": null,
1430
+ "derived_field_formula": null,
1431
+ "section": "sec_plan_body"
1432
+ },
1433
+ {
1434
+ "type": "CUSTOM_OBJECT_FIELD",
1435
+ "custom_object_api_name": "dental_operatory__c",
1436
+ "field_api_name": "appointment_count__c",
1437
+ "field_display_name": "Appointments (count)",
1438
+ "data_type": {
1439
+ "options_list": [],
1440
+ "supported_types": [],
1441
+ "field_type": "NUMBER"
1442
+ },
1443
+ "description": "Rows in this operatory (filter by day in the chair board function)",
1444
+ "is_required": null,
1445
+ "is_unique": null,
1446
+ "is_indexed": null,
1447
+ "rql_formula": null,
1448
+ "formula_attr_metas": null,
1449
+ "is_standard": false,
1450
+ "derived_aggregated_field": {
1451
+ "aggregation_function": "COUNT",
1452
+ "child_model_name": "dental_appointment__c",
1453
+ "currency_code": null,
1454
+ "field_to_aggregate": "patient_ref__c",
1455
+ "filters": [],
1456
+ "lookup_field_api_name": "operatory_ref__c"
1457
+ },
1458
+ "derived_field_formula": null,
1459
+ "section": "sec_op_info"
1460
+ },
1461
+ {
1462
+ "type": "CUSTOM_OBJECT_FIELD",
1463
+ "custom_object_api_name": "dental_patient__c",
1464
+ "field_api_name": "treatment_plan_count__c",
1465
+ "field_display_name": "Treatment plans",
1466
+ "data_type": {
1467
+ "options_list": [],
1468
+ "supported_types": [],
1469
+ "field_type": "NUMBER"
1470
+ },
1471
+ "description": "Active plans tied to the chart",
1472
+ "is_required": null,
1473
+ "is_unique": null,
1474
+ "is_indexed": null,
1475
+ "rql_formula": null,
1476
+ "formula_attr_metas": null,
1477
+ "is_standard": false,
1478
+ "derived_aggregated_field": {
1479
+ "aggregation_function": "COUNT",
1480
+ "child_model_name": "dental_treatment_plan__c",
1481
+ "currency_code": null,
1482
+ "field_to_aggregate": "plan_name__c",
1483
+ "filters": [],
1484
+ "lookup_field_api_name": "plan_patient_ref__c"
1485
+ },
1486
+ "derived_field_formula": null,
1487
+ "section": "sec_pt_clinical"
1488
+ },
1489
+ {
1490
+ "type": "CUSTOM_OBJECT_VALIDATION_RULE",
1491
+ "model_rql_name": "dental_appointment__c",
1492
+ "rule_id": "dental_appt_duration_positive",
1493
+ "state": "ACTIVE",
1494
+ "level": "FIELD",
1495
+ "display_name": "Duration must be positive",
1496
+ "rule_description": "Blocks empty or zero chair blocks",
1497
+ "custom_error_message": "Duration must be at least 1 minute.",
1498
+ "rql_formula": "(duration_minutes__c <= 0)",
1499
+ "field_rql_name": "duration_minutes__c"
1500
+ },
1501
+ {
1502
+ "type": "CUSTOM_OBJECT_RECORD_TRIGGERED_FLOW",
1503
+ "model_rql_name": "dental_appointment__c",
1504
+ "flow_id": "dental_default_appt_status",
1505
+ "flow_name": "Default visit status to Scheduled",
1506
+ "trigger_type": "CREATE",
1507
+ "description": "New bookings start as Scheduled unless the team changes it",
1508
+ "actions": [
1509
+ {
1510
+ "target_field": "appointment_status__c",
1511
+ "fixed_value": ["Scheduled"]
1512
+ }
1513
+ ]
1514
+ },
1515
+ {
1516
+ "type": "CUSTOM_OBJECT_LIST_VIEW",
1517
+ "object_rql_name": "dental_patient__c",
1518
+ "view_id": "view_dental_all_patients",
1519
+ "name": "All patients",
1520
+ "public": true,
1521
+ "fields": [
1522
+ "legal_name__c",
1523
+ "date_of_birth__c",
1524
+ "phone__c",
1525
+ "patient_label__c",
1526
+ "treatment_plan_count__c"
1527
+ ],
1528
+ "description": "Full chart list with plan counts",
1529
+ "object_scope": "all",
1530
+ "sort_order": "ASC",
1531
+ "order_by": "legal_name__c"
1532
+ },
1533
+ {
1534
+ "type": "CUSTOM_OBJECT_LIST_VIEW",
1535
+ "object_rql_name": "dental_operatory__c",
1536
+ "view_id": "view_dental_all_operatories",
1537
+ "name": "All operatories",
1538
+ "public": true,
1539
+ "fields": ["operatory_name__c", "room_code__c", "appointment_count__c"],
1540
+ "description": "Chairs and daily volume rollups",
1541
+ "object_scope": "all",
1542
+ "sort_order": "ASC",
1543
+ "order_by": "operatory_name__c"
1544
+ },
1545
+ {
1546
+ "type": "CUSTOM_OBJECT_LIST_VIEW",
1547
+ "object_rql_name": "dental_appointment__c",
1548
+ "view_id": "view_dental_appointments_all",
1549
+ "name": "All appointments",
1550
+ "public": true,
1551
+ "fields": [
1552
+ "operatory_ref__c",
1553
+ "start_time__c",
1554
+ "duration_minutes__c",
1555
+ "patient_ref__c",
1556
+ "visit_type__c",
1557
+ "appointment_status__c",
1558
+ "board_label__c"
1559
+ ],
1560
+ "description": "Chronological board with chair and status",
1561
+ "object_scope": "all",
1562
+ "sort_order": "ASC",
1563
+ "order_by": "start_time__c"
1564
+ },
1565
+ {
1566
+ "type": "CUSTOM_OBJECT_LIST_VIEW",
1567
+ "object_rql_name": "dental_treatment_plan__c",
1568
+ "view_id": "view_dental_treatment_plans",
1569
+ "name": "All treatment plans",
1570
+ "public": true,
1571
+ "fields": [
1572
+ "plan_patient_ref__c",
1573
+ "plan_name__c",
1574
+ "plan_status__c",
1575
+ "target_completion__c",
1576
+ "fee_estimate_cents__c"
1577
+ ],
1578
+ "description": "Case tracking by status",
1579
+ "object_scope": "all",
1580
+ "sort_order": "ASC",
1581
+ "order_by": "target_completion__c"
1582
+ },
1583
+ {
1584
+ "type": "CUSTOM_OBJECT_PAGE_LAYOUT",
1585
+ "layout_id": "layout_dental_patient",
1586
+ "api_name": "default",
1587
+ "object_rql_name": "dental_patient__c",
1588
+ "name": "Patient chart",
1589
+ "system_created": false,
1590
+ "tab_edits": {
1591
+ "newTabs": [
1592
+ {
1593
+ "key": "chart",
1594
+ "name": "Chart",
1595
+ "type": "tab_with_sections",
1596
+ "sections": [
1597
+ {
1598
+ "key": "id",
1599
+ "name": "Profile",
1600
+ "type": "fields_section",
1601
+ "fields": [
1602
+ {
1603
+ "fieldRqlName": "legal_name__c"
1604
+ },
1605
+ {
1606
+ "fieldRqlName": "date_of_birth__c"
1607
+ },
1608
+ {
1609
+ "fieldRqlName": "phone__c"
1610
+ },
1611
+ {
1612
+ "fieldRqlName": "email__c"
1613
+ },
1614
+ {
1615
+ "fieldRqlName": "patient_label__c"
1616
+ }
1617
+ ]
1618
+ },
1619
+ {
1620
+ "key": "clinical",
1621
+ "name": "Clinical & billing",
1622
+ "type": "fields_section",
1623
+ "fields": [
1624
+ {
1625
+ "fieldRqlName": "allergies_and_alerts__c"
1626
+ },
1627
+ {
1628
+ "fieldRqlName": "insurance_plan__c"
1629
+ },
1630
+ {
1631
+ "fieldRqlName": "chart_summary__c"
1632
+ },
1633
+ {
1634
+ "fieldRqlName": "treatment_plan_count__c"
1635
+ }
1636
+ ]
1637
+ }
1638
+ ]
1639
+ }
1640
+ ],
1641
+ "systemTabEdits": {},
1642
+ "tabsOrder": ["chart"]
1643
+ },
1644
+ "header_edits": {
1645
+ "newTitleField": "legal_name__c"
1646
+ },
1647
+ "visibility_conditions": {},
1648
+ "blueprint_key": "dental_patient__c"
1649
+ },
1650
+ {
1651
+ "type": "CUSTOM_OBJECT_PAGE_LAYOUT",
1652
+ "layout_id": "layout_dental_operatory",
1653
+ "api_name": "default",
1654
+ "object_rql_name": "dental_operatory__c",
1655
+ "name": "Operatory",
1656
+ "system_created": false,
1657
+ "tab_edits": {
1658
+ "newTabs": [
1659
+ {
1660
+ "key": "overview",
1661
+ "name": "Overview",
1662
+ "type": "tab_with_sections",
1663
+ "sections": [
1664
+ {
1665
+ "key": "room",
1666
+ "name": "Room",
1667
+ "type": "fields_section",
1668
+ "fields": [
1669
+ {
1670
+ "fieldRqlName": "operatory_name__c"
1671
+ },
1672
+ {
1673
+ "fieldRqlName": "room_code__c"
1674
+ },
1675
+ {
1676
+ "fieldRqlName": "appointment_count__c"
1677
+ }
1678
+ ]
1679
+ }
1680
+ ]
1681
+ }
1682
+ ],
1683
+ "systemTabEdits": {},
1684
+ "tabsOrder": ["overview"]
1685
+ },
1686
+ "header_edits": {
1687
+ "newTitleField": "operatory_name__c"
1688
+ },
1689
+ "visibility_conditions": {},
1690
+ "blueprint_key": "dental_operatory__c"
1691
+ },
1692
+ {
1693
+ "type": "CUSTOM_OBJECT_PAGE_LAYOUT",
1694
+ "layout_id": "layout_dental_appointment",
1695
+ "api_name": "default",
1696
+ "object_rql_name": "dental_appointment__c",
1697
+ "name": "Appointment",
1698
+ "system_created": false,
1699
+ "tab_edits": {
1700
+ "newTabs": [
1701
+ {
1702
+ "key": "visit",
1703
+ "name": "Visit",
1704
+ "type": "tab_with_sections",
1705
+ "sections": [
1706
+ {
1707
+ "key": "chair",
1708
+ "name": "Chair & schedule",
1709
+ "type": "fields_section",
1710
+ "fields": [
1711
+ {
1712
+ "fieldRqlName": "operatory_ref__c"
1713
+ },
1714
+ {
1715
+ "fieldRqlName": "start_time__c"
1716
+ },
1717
+ {
1718
+ "fieldRqlName": "duration_minutes__c"
1719
+ }
1720
+ ]
1721
+ },
1722
+ {
1723
+ "key": "patient",
1724
+ "name": "Patient & status",
1725
+ "type": "fields_section",
1726
+ "fields": [
1727
+ {
1728
+ "fieldRqlName": "patient_ref__c"
1729
+ },
1730
+ {
1731
+ "fieldRqlName": "visit_type__c"
1732
+ },
1733
+ {
1734
+ "fieldRqlName": "appointment_status__c"
1735
+ },
1736
+ {
1737
+ "fieldRqlName": "board_label__c"
1738
+ },
1739
+ {
1740
+ "fieldRqlName": "visit_notes__c"
1741
+ }
1742
+ ]
1743
+ }
1744
+ ]
1745
+ }
1746
+ ],
1747
+ "systemTabEdits": {},
1748
+ "tabsOrder": ["visit"]
1749
+ },
1750
+ "header_edits": {
1751
+ "newTitleField": "board_label__c"
1752
+ },
1753
+ "visibility_conditions": {},
1754
+ "blueprint_key": "dental_appointment__c"
1755
+ },
1756
+ {
1757
+ "type": "CUSTOM_OBJECT_PAGE_LAYOUT",
1758
+ "layout_id": "layout_dental_treatment_plan",
1759
+ "api_name": "default",
1760
+ "object_rql_name": "dental_treatment_plan__c",
1761
+ "name": "Treatment plan",
1762
+ "system_created": false,
1763
+ "tab_edits": {
1764
+ "newTabs": [
1765
+ {
1766
+ "key": "plan",
1767
+ "name": "Plan",
1768
+ "type": "tab_with_sections",
1769
+ "sections": [
1770
+ {
1771
+ "key": "link",
1772
+ "name": "Patient",
1773
+ "type": "fields_section",
1774
+ "fields": [
1775
+ {
1776
+ "fieldRqlName": "plan_patient_ref__c"
1777
+ }
1778
+ ]
1779
+ },
1780
+ {
1781
+ "key": "content",
1782
+ "name": "Planned work",
1783
+ "type": "fields_section",
1784
+ "fields": [
1785
+ {
1786
+ "fieldRqlName": "plan_name__c"
1787
+ },
1788
+ {
1789
+ "fieldRqlName": "plan_status__c"
1790
+ },
1791
+ {
1792
+ "fieldRqlName": "target_completion__c"
1793
+ },
1794
+ {
1795
+ "fieldRqlName": "procedures_summary__c"
1796
+ },
1797
+ {
1798
+ "fieldRqlName": "fee_estimate_cents__c"
1799
+ }
1800
+ ]
1801
+ }
1802
+ ]
1803
+ }
1804
+ ],
1805
+ "systemTabEdits": {},
1806
+ "tabsOrder": ["plan"]
1807
+ },
1808
+ "header_edits": {
1809
+ "newTitleField": "plan_name__c"
1810
+ },
1811
+ "visibility_conditions": {},
1812
+ "blueprint_key": "dental_treatment_plan__c"
1813
+ },
1814
+ {
1815
+ "type": "FUNCTION",
1816
+ "name": "Daily chair board (SDUI)",
1817
+ "api_name": "dental_chair_schedule_fn",
1818
+ "description": "SDUI ObjectListView for appointments (init + spec render)",
1819
+ "code_draft": "import { FunctionContext, FunctionEvent, FunctionResponse } from '@rippling/rippling-sdk';\nimport SDUI from '@rippling/sdui-builder';\n\nconst OBJECT = 'dental_appointment__c';\n\nexport async function onRipplingEvent(\n event: FunctionEvent,\n context: FunctionContext,\n): Promise<FunctionResponse> {\n const action = event.parameters?.action;\n\n if (!action || action === 'init') {\n const s = SDUI.createState({});\n const root = SDUI.components.VStack({\n children: [\n SDUI.components.ObjectListView({\n objectApiName: OBJECT,\n canSearchInGrid: true,\n }),\n ],\n });\n return new FunctionResponse({\n body: { spec: JSON.stringify(SDUI.render(s, root)) },\n statusCode: 200,\n headers: {},\n message: '',\n });\n }\n\n return new FunctionResponse({ body: {}, statusCode: 200, headers: {}, message: '' });\n}",
1820
+ "dependencies": {
1821
+ "@rippling/rippling-sdk": "^0.2.0-alpha.33",
1822
+ "@rippling/sdui-builder": "^0.1.0"
1823
+ },
1824
+ "deployment_options": {
1825
+ "runtime": "lambda-deno"
1826
+ }
1827
+ },
1828
+ {
1829
+ "type": "SDUI_PAGE",
1830
+ "name": "Chair schedule",
1831
+ "sdui_page_id": "dental_chair_schedule",
1832
+ "function_api_name": "dental_chair_schedule_fn",
1833
+ "description": "SDUI list of appointments (searchable grid); use object records for status edits"
1834
+ },
1835
+ {
1836
+ "type": "CUSTOM_APP",
1837
+ "api_name": "dental_practice_management_app",
1838
+ "name": "Dental Practice Management",
1839
+ "description": "Patient charts, operatories, treatment plans, and an SDUI appointment list tab",
1840
+ "app_type": "custom",
1841
+ "pages": [
1842
+ {
1843
+ "api_name": "dental_patient__c",
1844
+ "page_type": "object_page",
1845
+ "object_rql_name": "dental_patient__c"
1846
+ },
1847
+ {
1848
+ "api_name": "dental_operatory__c",
1849
+ "page_type": "object_page",
1850
+ "object_rql_name": "dental_operatory__c"
1851
+ },
1852
+ {
1853
+ "api_name": "dental_appointment__c",
1854
+ "page_type": "object_page",
1855
+ "object_rql_name": "dental_appointment__c"
1856
+ },
1857
+ {
1858
+ "api_name": "dental_treatment_plan__c",
1859
+ "page_type": "object_page",
1860
+ "object_rql_name": "dental_treatment_plan__c"
1861
+ },
1862
+ {
1863
+ "api_name": "dental_chair_schedule",
1864
+ "page_type": "sdui_page",
1865
+ "sdui_page_id": "dental_chair_schedule"
1866
+ }
1867
+ ]
1868
+ }
1869
+ ]
1870
+ }