@nyrra/prismantix-oac-pharma 0.0.1
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.
- package/README.md +30 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +1 -0
- package/dist/lib/prismantix/externalObjects.d.mts +3 -0
- package/dist/lib/prismantix/externalObjects.mjs +16 -0
- package/dist/lib/prismantix/index.d.mts +20 -0
- package/dist/lib/prismantix/index.mjs +29 -0
- package/dist/lib/prismantix/links.d.mts +27 -0
- package/dist/lib/prismantix/links.mjs +456 -0
- package/dist/lib/prismantix/objects/index.d.mts +2 -0
- package/dist/lib/prismantix/objects/index.mjs +2 -0
- package/dist/lib/prismantix/objects/masterData/Batch.d.mts +1 -0
- package/dist/lib/prismantix/objects/masterData/Batch.mjs +263 -0
- package/dist/lib/prismantix/objects/masterData/Equipment.d.mts +1 -0
- package/dist/lib/prismantix/objects/masterData/Equipment.mjs +126 -0
- package/dist/lib/prismantix/objects/masterData/Product.d.mts +1 -0
- package/dist/lib/prismantix/objects/masterData/Product.mjs +155 -0
- package/dist/lib/prismantix/objects/masterData/Site.d.mts +1 -0
- package/dist/lib/prismantix/objects/masterData/Site.mjs +182 -0
- package/dist/lib/prismantix/objects/masterData/Supplier.d.mts +1 -0
- package/dist/lib/prismantix/objects/masterData/Supplier.mjs +202 -0
- package/dist/lib/prismantix/objects/masterData/index.d.mts +6 -0
- package/dist/lib/prismantix/objects/masterData/index.mjs +17 -0
- package/dist/lib/prismantix/objects/quality/ActionItem.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/ActionItem.mjs +144 -0
- package/dist/lib/prismantix/objects/quality/Capa.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/Capa.mjs +286 -0
- package/dist/lib/prismantix/objects/quality/ChangeControl.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/ChangeControl.mjs +212 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlApproval.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlApproval.mjs +122 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlEffectiveness.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlEffectiveness.mjs +130 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlImpact.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/ChangeControlImpact.mjs +150 -0
- package/dist/lib/prismantix/objects/quality/Complaint.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/Complaint.mjs +206 -0
- package/dist/lib/prismantix/objects/quality/Deviation.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/Deviation.mjs +212 -0
- package/dist/lib/prismantix/objects/quality/Investigation.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/Investigation.mjs +235 -0
- package/dist/lib/prismantix/objects/quality/RcaFactor.d.mts +1 -0
- package/dist/lib/prismantix/objects/quality/RcaFactor.mjs +89 -0
- package/dist/lib/prismantix/objects/quality/index.d.mts +11 -0
- package/dist/lib/prismantix/objects/quality/index.mjs +32 -0
- package/dist/lib/prismantix/valueTypes.d.mts +46 -0
- package/dist/lib/prismantix/valueTypes.mjs +586 -0
- package/package.json +49 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { defineObject } from "@nyrra/maker";
|
|
2
|
+
import { Client } from "../../externalObjects.mjs";
|
|
3
|
+
import { CapaCategoryValueType, CapaPriorityValueType, CapaSourceTypeValueType, CapaStatusValueType, CapaTypeValueType, EpochMillisValueType, IsoTimestampStringValueType, } from "../../valueTypes.mjs";
|
|
4
|
+
import { Investigation } from "./Investigation.mjs";
|
|
5
|
+
export const Capa = defineObject({
|
|
6
|
+
apiName: "Capa",
|
|
7
|
+
displayName: "CAPA",
|
|
8
|
+
pluralDisplayName: "CAPAs",
|
|
9
|
+
primaryKeyPropertyApiName: "capaCode",
|
|
10
|
+
titlePropertyApiName: "title",
|
|
11
|
+
description: "Generate realistic pharmaceutical CAPA (Corrective and Preventive Action) records. Each CAPA should represent a comprehensive response to quality issues with: - Clear problem statements that identify the specific quality concern - Root cause analysis that identifies systematic causes - Detailed action plans with both corrective and preventive components - Specific assignments to qualified personnel - Realistic timelines for implementation and verification - Measurable success criteria and effectiveness verification plans - Professional quality management terminology throughout",
|
|
12
|
+
properties: {
|
|
13
|
+
approvedBy: {
|
|
14
|
+
displayName: "Approved By",
|
|
15
|
+
description: "Name of quality manager or authority who approved the CAPA plan and closure",
|
|
16
|
+
type: "string",
|
|
17
|
+
optional: true,
|
|
18
|
+
exampleValues: ["Michael Torres"],
|
|
19
|
+
},
|
|
20
|
+
assignedTo: {
|
|
21
|
+
displayName: "Assigned To",
|
|
22
|
+
description: "Name of person responsible for CAPA implementation and coordination",
|
|
23
|
+
type: "string",
|
|
24
|
+
exampleValues: [
|
|
25
|
+
"James Chen",
|
|
26
|
+
"Sarah Wilson",
|
|
27
|
+
"Lisa Park",
|
|
28
|
+
"Dr. Amanda Foster",
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
category: {
|
|
32
|
+
displayName: "Category",
|
|
33
|
+
description: "Primary category of the CAPA actions",
|
|
34
|
+
type: CapaCategoryValueType,
|
|
35
|
+
exampleValues: ["System", "Process", "Equipment"],
|
|
36
|
+
},
|
|
37
|
+
changeControlId: {
|
|
38
|
+
displayName: "Change Control ID",
|
|
39
|
+
description: "Reference to change control.",
|
|
40
|
+
type: "string",
|
|
41
|
+
optional: true,
|
|
42
|
+
reference: "ChangeControl",
|
|
43
|
+
},
|
|
44
|
+
clientId: {
|
|
45
|
+
displayName: "Client ID",
|
|
46
|
+
description: "Reference to client.",
|
|
47
|
+
type: "string",
|
|
48
|
+
reference: Client,
|
|
49
|
+
},
|
|
50
|
+
closureDate: {
|
|
51
|
+
displayName: "Closure Date",
|
|
52
|
+
description: "Date when CAPA was formally closed after effectiveness verification (if status is Closed)",
|
|
53
|
+
type: IsoTimestampStringValueType,
|
|
54
|
+
optional: true,
|
|
55
|
+
exampleValues: ["2024-10-08T00:00:00Z"],
|
|
56
|
+
},
|
|
57
|
+
capaCode: {
|
|
58
|
+
displayName: "CAPA Code",
|
|
59
|
+
description: "Unique CAPA tracking identifier with year and sequence number",
|
|
60
|
+
type: "string",
|
|
61
|
+
exampleValues: [
|
|
62
|
+
"CAPA-2024-001",
|
|
63
|
+
"CAPA-2024-002",
|
|
64
|
+
"CAPA-2024-003",
|
|
65
|
+
"CAPA-2024-004",
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
createdAt: {
|
|
69
|
+
displayName: "Created At",
|
|
70
|
+
description: "Created At for the capa record.",
|
|
71
|
+
type: EpochMillisValueType,
|
|
72
|
+
optional: true,
|
|
73
|
+
},
|
|
74
|
+
effectivenessCheckDate: {
|
|
75
|
+
displayName: "Effectiveness Check Date",
|
|
76
|
+
description: "Scheduled date for effectiveness verification, typically 30-90 days after implementation",
|
|
77
|
+
type: IsoTimestampStringValueType,
|
|
78
|
+
optional: true,
|
|
79
|
+
exampleValues: [
|
|
80
|
+
"2024-11-15T00:00:00Z",
|
|
81
|
+
"2024-10-25T00:00:00Z",
|
|
82
|
+
"2024-10-05T00:00:00Z",
|
|
83
|
+
"2024-12-15T00:00:00Z",
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
effectivenessCriteria: {
|
|
87
|
+
displayName: "Effectiveness Criteria",
|
|
88
|
+
description: "Effectiveness Criteria for the capa record.",
|
|
89
|
+
type: "string",
|
|
90
|
+
optional: true,
|
|
91
|
+
},
|
|
92
|
+
effectivenessNotes: {
|
|
93
|
+
displayName: "Effectiveness Notes",
|
|
94
|
+
description: "Effectiveness Notes for the capa record.",
|
|
95
|
+
type: "string",
|
|
96
|
+
optional: true,
|
|
97
|
+
},
|
|
98
|
+
effectivenessVerified: {
|
|
99
|
+
displayName: "Effectiveness Verified",
|
|
100
|
+
description: "Whether effectiveness of actions has been verified",
|
|
101
|
+
type: "boolean",
|
|
102
|
+
optional: true,
|
|
103
|
+
exampleValues: [false, true],
|
|
104
|
+
},
|
|
105
|
+
implementationDate: {
|
|
106
|
+
displayName: "Implementation Date",
|
|
107
|
+
description: "Actual date when actions were implemented (if status is Verification or Closed)",
|
|
108
|
+
type: IsoTimestampStringValueType,
|
|
109
|
+
optional: true,
|
|
110
|
+
exampleValues: ["2024-08-25T00:00:00Z", "2024-08-05T00:00:00Z"],
|
|
111
|
+
},
|
|
112
|
+
investigationId: {
|
|
113
|
+
displayName: "Investigation ID",
|
|
114
|
+
description: "Reference to investigation.",
|
|
115
|
+
type: "string",
|
|
116
|
+
optional: true,
|
|
117
|
+
reference: Investigation,
|
|
118
|
+
},
|
|
119
|
+
priority: {
|
|
120
|
+
displayName: "Priority",
|
|
121
|
+
description: "Priority level based on risk assessment and business impact",
|
|
122
|
+
type: CapaPriorityValueType,
|
|
123
|
+
exampleValues: ["High", "Critical", "Medium"],
|
|
124
|
+
},
|
|
125
|
+
problemStatement: {
|
|
126
|
+
displayName: "Problem Statement",
|
|
127
|
+
description: "Clear, specific problem description that identifies the quality concern and its impact",
|
|
128
|
+
type: "string",
|
|
129
|
+
exampleValues: [
|
|
130
|
+
"Temperature excursion in API storage area exceeded specification limits for 4 hours due to HVAC malfunction during maintenance, with delayed alarm notification compromising product integrity.",
|
|
131
|
+
"Out-of-specification tablet hardness results due to granulation moisture content below target specification, resulting in batch rejection and potential bioavailability impact.",
|
|
132
|
+
"Sterile filling line contamination due to compromised HEPA filter gasket that allowed unfiltered air bypass into sterile environment.",
|
|
133
|
+
"Multiple patient reports of poor glycemic control with insulin products from same batch lot indicate potential potency or stability concerns requiring systematic investigation.",
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
proposedActions: {
|
|
137
|
+
displayName: "Proposed Actions",
|
|
138
|
+
description: "Detailed action plan with specific corrective and preventive measures, including responsibilities and timelines",
|
|
139
|
+
type: "string",
|
|
140
|
+
exampleValues: [
|
|
141
|
+
"Install redundant temperature monitoring system with independent alarm capability. Develop detailed maintenance protocols with backup monitoring requirements. Train facility staff on emergency response procedures. Implement 24/7 monitoring service during critical maintenance windows.",
|
|
142
|
+
"Implement calibration verification schedule for dryer temperature probes. Increase moisture testing frequency during granulation. Install continuous moisture monitoring system. Retrain operators on moisture control parameters and troubleshooting. Update batch record with enhanced monitoring checkpoints.",
|
|
143
|
+
"Implement cycle-based HEPA filter replacement schedule tracking sterilization cycles. Develop pre-use integrity testing protocol for filter systems. Train maintenance staff on gasket inspection techniques. Install pressure differential monitoring for early detection of filter compromise. Update preventive maintenance procedures.",
|
|
144
|
+
"Implement automated complaint trending system for pattern detection. Establish proactive batch monitoring with efficacy indicators. Develop enhanced investigation protocols for efficacy complaints. Train complaint handling staff on advanced trending techniques. Create early warning system for unusual complaint patterns.",
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
rootCause: {
|
|
148
|
+
displayName: "Root Cause",
|
|
149
|
+
description: "Systematic root cause analysis identifying underlying causes using quality tools and methodologies",
|
|
150
|
+
type: "string",
|
|
151
|
+
exampleValues: [
|
|
152
|
+
"HVAC monitoring system lacks redundancy during maintenance windows. Alarm notification delay caused by single-point-of-failure in monitoring configuration. Inadequate backup monitoring procedures.",
|
|
153
|
+
"Fluid bed dryer temperature probe calibration drift caused over-drying of granulation. Current moisture monitoring frequency insufficient to detect gradual process drift. Operator training inadequate for recognizing early warning signs.",
|
|
154
|
+
"HEPA filter gasket degradation due to repeated sterilization cycles exceeding manufacturer recommendations. Current replacement schedule based on time rather than actual usage cycles. Lack of predictive indicators for gasket integrity.",
|
|
155
|
+
"Current complaint trending system insufficient to detect patterns across multiple reports. Batch surveillance lacks proactive monitoring for subtle efficacy indicators. Investigation protocols need enhancement for complex efficacy complaints.",
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
sourceReference: {
|
|
159
|
+
displayName: "Source Reference",
|
|
160
|
+
description: "Reference ID of the triggering event (e.g., DEV-2024-001, COMP-2024-005)",
|
|
161
|
+
type: "string",
|
|
162
|
+
exampleValues: [
|
|
163
|
+
"DEV-2024-001",
|
|
164
|
+
"DEV-2024-002",
|
|
165
|
+
"DEV-2024-003",
|
|
166
|
+
"COMP-2024-004",
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
sourceType: {
|
|
170
|
+
displayName: "Source Type",
|
|
171
|
+
description: "Type of quality event that triggered the CAPA",
|
|
172
|
+
type: CapaSourceTypeValueType,
|
|
173
|
+
exampleValues: ["Deviation", "Complaint"],
|
|
174
|
+
},
|
|
175
|
+
status: {
|
|
176
|
+
displayName: "Status",
|
|
177
|
+
description: "Current status in CAPA lifecycle management",
|
|
178
|
+
type: CapaStatusValueType,
|
|
179
|
+
exampleValues: ["In Progress", "Verification", "Closed", "Open"],
|
|
180
|
+
},
|
|
181
|
+
targetDate: {
|
|
182
|
+
displayName: "Target Date",
|
|
183
|
+
description: "Target completion date for all CAPA actions, typically 30-180 days from initiation",
|
|
184
|
+
type: IsoTimestampStringValueType,
|
|
185
|
+
exampleValues: [
|
|
186
|
+
"2024-09-15T00:00:00Z",
|
|
187
|
+
"2024-08-30T00:00:00Z",
|
|
188
|
+
"2024-08-10T00:00:00Z",
|
|
189
|
+
"2024-10-15T00:00:00Z",
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
title: {
|
|
193
|
+
displayName: "Title",
|
|
194
|
+
description: "Comprehensive CAPA title that includes both corrective and preventive action elements, using specific actionable language",
|
|
195
|
+
type: "string",
|
|
196
|
+
exampleValues: [
|
|
197
|
+
"Implement Enhanced HVAC Monitoring System and Develop Emergency Response Procedures for Temperature Excursions",
|
|
198
|
+
"Revise Granulation Process Controls and Implement Enhanced Moisture Monitoring for Tablet Manufacturing",
|
|
199
|
+
"Upgrade HEPA Filter Management Program and Establish Predictive Maintenance Schedule",
|
|
200
|
+
"Enhance Product Complaint Investigation Process and Implement Proactive Batch Surveillance",
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
type: {
|
|
204
|
+
displayName: "Type",
|
|
205
|
+
description: 'Classification of action type (most should be "Both" for comprehensive approach)',
|
|
206
|
+
type: CapaTypeValueType,
|
|
207
|
+
exampleValues: ["Both"],
|
|
208
|
+
},
|
|
209
|
+
updatedAt: {
|
|
210
|
+
displayName: "Updated At",
|
|
211
|
+
description: "Updated At for the capa record.",
|
|
212
|
+
type: EpochMillisValueType,
|
|
213
|
+
optional: true,
|
|
214
|
+
},
|
|
215
|
+
verificationDate: {
|
|
216
|
+
displayName: "Verification Date",
|
|
217
|
+
description: "Verification Date for the capa record.",
|
|
218
|
+
type: IsoTimestampStringValueType,
|
|
219
|
+
optional: true,
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
prismantix: {
|
|
223
|
+
category: "quality-events",
|
|
224
|
+
convex: {
|
|
225
|
+
componentName: "ontology",
|
|
226
|
+
indexes: [
|
|
227
|
+
{
|
|
228
|
+
fields: ["capaCode"],
|
|
229
|
+
name: "by_capa_code",
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
fields: ["assignedTo"],
|
|
233
|
+
name: "by_owner",
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
fields: ["investigationId"],
|
|
237
|
+
name: "by_investigation",
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
fields: ["changeControlId"],
|
|
241
|
+
name: "by_change_control",
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
fields: ["status"],
|
|
245
|
+
name: "by_status",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
fields: ["priority"],
|
|
249
|
+
name: "by_priority",
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
fields: ["category"],
|
|
253
|
+
name: "by_category",
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
fields: ["sourceType"],
|
|
257
|
+
name: "by_source_type",
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
fields: ["clientId"],
|
|
261
|
+
name: "by_client",
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
materialized: true,
|
|
265
|
+
tableName: "datastudio_capas",
|
|
266
|
+
},
|
|
267
|
+
defaults: {
|
|
268
|
+
fabricationCount: 20,
|
|
269
|
+
},
|
|
270
|
+
domain: "pharmaQualityOps",
|
|
271
|
+
guidance: [
|
|
272
|
+
"Generate actionable CAPA records following pharmaceutical quality standards",
|
|
273
|
+
"Ensure both corrective AND preventive elements are addressed",
|
|
274
|
+
"Use professional quality management language",
|
|
275
|
+
"Focus on measurable, time-bound outcomes",
|
|
276
|
+
"Address root causes with systematic approaches",
|
|
277
|
+
],
|
|
278
|
+
notes: "corrective and preventive actions",
|
|
279
|
+
requiresClient: true,
|
|
280
|
+
seeding: {
|
|
281
|
+
order: 9,
|
|
282
|
+
requires: ["datastudio_clients", "datastudio_investigations"],
|
|
283
|
+
},
|
|
284
|
+
showInNavigation: true,
|
|
285
|
+
},
|
|
286
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ChangeControl: import("@nyrra/maker").PrismantixObjectDefinition;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { defineObject } from "@nyrra/maker";
|
|
2
|
+
import { AppUser, Client } from "../../externalObjects.mjs";
|
|
3
|
+
import { ChangeControlChangeCategoryValueType, ChangeControlGxPImpactValueType, ChangeControlRiskAfterValueType, ChangeControlRiskBeforeValueType, ChangeControlStatusValueType, EpochMillisValueType, IsoTimestampStringValueType, } from "../../valueTypes.mjs";
|
|
4
|
+
import { Capa } from "./Capa.mjs";
|
|
5
|
+
export const ChangeControl = defineObject({
|
|
6
|
+
apiName: "ChangeControl",
|
|
7
|
+
displayName: "Change Control",
|
|
8
|
+
pluralDisplayName: "Change Controls",
|
|
9
|
+
primaryKeyPropertyApiName: "changeCode",
|
|
10
|
+
titlePropertyApiName: "title",
|
|
11
|
+
description: "Generate realistic Change Control (CC) records. Each record includes identifying code, title, risk, and lifecycle status. Ensure fields are coherent and professional.",
|
|
12
|
+
properties: {
|
|
13
|
+
actualImplementationDate: {
|
|
14
|
+
displayName: "Actual Implementation Date",
|
|
15
|
+
description: "Actual Implementation Date for the change control record.",
|
|
16
|
+
type: IsoTimestampStringValueType,
|
|
17
|
+
optional: true,
|
|
18
|
+
},
|
|
19
|
+
assessmentPlan: {
|
|
20
|
+
displayName: "Assessment Plan",
|
|
21
|
+
description: "Optional summary of assessment plan",
|
|
22
|
+
type: "string",
|
|
23
|
+
optional: true,
|
|
24
|
+
exampleValues: ["QA to assess training impact and revision approvals"],
|
|
25
|
+
},
|
|
26
|
+
changeCategory: {
|
|
27
|
+
displayName: "Change Category",
|
|
28
|
+
description: "Primary category of the change",
|
|
29
|
+
type: ChangeControlChangeCategoryValueType,
|
|
30
|
+
exampleValues: ["Document", "Equipment"],
|
|
31
|
+
},
|
|
32
|
+
changeCode: {
|
|
33
|
+
displayName: "Change Code",
|
|
34
|
+
description: "Unique change control identifier CC###",
|
|
35
|
+
type: "string",
|
|
36
|
+
exampleValues: ["CC001", "CC002"],
|
|
37
|
+
},
|
|
38
|
+
clientId: {
|
|
39
|
+
displayName: "Client ID",
|
|
40
|
+
description: "Reference to client.",
|
|
41
|
+
type: "string",
|
|
42
|
+
reference: Client,
|
|
43
|
+
},
|
|
44
|
+
closureDate: {
|
|
45
|
+
displayName: "Closure Date",
|
|
46
|
+
description: "Closure Date for the change control record.",
|
|
47
|
+
type: IsoTimestampStringValueType,
|
|
48
|
+
optional: true,
|
|
49
|
+
},
|
|
50
|
+
createdAt: {
|
|
51
|
+
displayName: "Created At",
|
|
52
|
+
description: "Created At for the change control record.",
|
|
53
|
+
type: EpochMillisValueType,
|
|
54
|
+
optional: true,
|
|
55
|
+
},
|
|
56
|
+
description: {
|
|
57
|
+
displayName: "Description",
|
|
58
|
+
description: "Concise rationale and summary of the change scope",
|
|
59
|
+
type: "string",
|
|
60
|
+
exampleValues: [
|
|
61
|
+
"Revise sampling frequency and method per CAPA and audit observation",
|
|
62
|
+
"Upgrade impeller to improved design to reduce blend time and heat",
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
effectivenessSummary: {
|
|
66
|
+
displayName: "Effectiveness Summary",
|
|
67
|
+
description: "Effectiveness Summary for the change control record.",
|
|
68
|
+
type: "string",
|
|
69
|
+
optional: true,
|
|
70
|
+
},
|
|
71
|
+
gxpImpact: {
|
|
72
|
+
displayName: "GxP Impact",
|
|
73
|
+
description: "Whether this is GxP impacting",
|
|
74
|
+
type: ChangeControlGxPImpactValueType,
|
|
75
|
+
exampleValues: ["GxP"],
|
|
76
|
+
},
|
|
77
|
+
implementationPlan: {
|
|
78
|
+
displayName: "Implementation Plan",
|
|
79
|
+
description: "Optional summary of implementation plan",
|
|
80
|
+
type: "string",
|
|
81
|
+
optional: true,
|
|
82
|
+
exampleValues: ["Schedule maintenance window; re-qualify post-install"],
|
|
83
|
+
},
|
|
84
|
+
linkedCapaId: {
|
|
85
|
+
displayName: "Linked CAPA ID",
|
|
86
|
+
description: "Reference to capa.",
|
|
87
|
+
type: "string",
|
|
88
|
+
optional: true,
|
|
89
|
+
reference: Capa,
|
|
90
|
+
},
|
|
91
|
+
ownerUserId: {
|
|
92
|
+
displayName: "Owner User ID",
|
|
93
|
+
description: "Reference to app user.",
|
|
94
|
+
type: "string",
|
|
95
|
+
optional: true,
|
|
96
|
+
reference: AppUser,
|
|
97
|
+
},
|
|
98
|
+
proposedImplementationDate: {
|
|
99
|
+
displayName: "Proposed Implementation Date",
|
|
100
|
+
description: "Proposed Implementation Date for the change control record.",
|
|
101
|
+
type: IsoTimestampStringValueType,
|
|
102
|
+
optional: true,
|
|
103
|
+
},
|
|
104
|
+
proposedStartDate: {
|
|
105
|
+
displayName: "Proposed Start Date",
|
|
106
|
+
description: "Proposed Start Date for the change control record.",
|
|
107
|
+
type: IsoTimestampStringValueType,
|
|
108
|
+
optional: true,
|
|
109
|
+
},
|
|
110
|
+
requesterUserId: {
|
|
111
|
+
displayName: "Requester User ID",
|
|
112
|
+
description: "Reference to app user.",
|
|
113
|
+
type: "string",
|
|
114
|
+
optional: true,
|
|
115
|
+
reference: AppUser,
|
|
116
|
+
},
|
|
117
|
+
riskAfter: {
|
|
118
|
+
displayName: "Risk After",
|
|
119
|
+
description: "Risk After for the change control record.",
|
|
120
|
+
type: ChangeControlRiskAfterValueType,
|
|
121
|
+
optional: true,
|
|
122
|
+
},
|
|
123
|
+
riskBefore: {
|
|
124
|
+
displayName: "Risk Before",
|
|
125
|
+
description: "Risk level prior to change",
|
|
126
|
+
type: ChangeControlRiskBeforeValueType,
|
|
127
|
+
exampleValues: ["Medium", "High"],
|
|
128
|
+
},
|
|
129
|
+
status: {
|
|
130
|
+
displayName: "Status",
|
|
131
|
+
description: "Current lifecycle status",
|
|
132
|
+
type: ChangeControlStatusValueType,
|
|
133
|
+
exampleValues: ["ImpactAssessment", "ApprovalPending"],
|
|
134
|
+
},
|
|
135
|
+
summaryOfChanges: {
|
|
136
|
+
displayName: "Summary Of Changes",
|
|
137
|
+
description: "Summary Of Changes for the change control record.",
|
|
138
|
+
type: "string",
|
|
139
|
+
optional: true,
|
|
140
|
+
},
|
|
141
|
+
targetClosureDate: {
|
|
142
|
+
displayName: "Target Closure Date",
|
|
143
|
+
description: "Target Closure Date for the change control record.",
|
|
144
|
+
type: IsoTimestampStringValueType,
|
|
145
|
+
optional: true,
|
|
146
|
+
},
|
|
147
|
+
title: {
|
|
148
|
+
displayName: "Title",
|
|
149
|
+
description: "Short descriptive title of the proposed change",
|
|
150
|
+
type: "string",
|
|
151
|
+
exampleValues: [
|
|
152
|
+
"Update SOP-123 to include revised sampling procedure",
|
|
153
|
+
"Replace blending equipment impeller for Lotster-200",
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
updatedAt: {
|
|
157
|
+
displayName: "Updated At",
|
|
158
|
+
description: "Updated At for the change control record.",
|
|
159
|
+
type: EpochMillisValueType,
|
|
160
|
+
optional: true,
|
|
161
|
+
},
|
|
162
|
+
verificationPlan: {
|
|
163
|
+
displayName: "Verification Plan",
|
|
164
|
+
description: "Optional summary of verification/monitoring plan",
|
|
165
|
+
type: "string",
|
|
166
|
+
optional: true,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
prismantix: {
|
|
170
|
+
category: "quality-events",
|
|
171
|
+
convex: {
|
|
172
|
+
componentName: "ontology",
|
|
173
|
+
indexes: [
|
|
174
|
+
{
|
|
175
|
+
fields: ["changeCode"],
|
|
176
|
+
name: "by_code",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
fields: ["status"],
|
|
180
|
+
name: "by_status",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
fields: ["ownerUserId"],
|
|
184
|
+
name: "by_owner",
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
fields: ["clientId"],
|
|
188
|
+
name: "by_client",
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
materialized: true,
|
|
192
|
+
tableName: "datastudio_changeControls",
|
|
193
|
+
},
|
|
194
|
+
defaults: {
|
|
195
|
+
fabricationCount: 10,
|
|
196
|
+
seedCount: 3,
|
|
197
|
+
},
|
|
198
|
+
domain: "pharmaQualityOps",
|
|
199
|
+
guidance: [
|
|
200
|
+
"Follow typical pharma quality change control processes and terminology",
|
|
201
|
+
"Titles should be concise but descriptive of the change",
|
|
202
|
+
"Risk levels should be plausible based on category and description",
|
|
203
|
+
],
|
|
204
|
+
notes: "change control records covering assessment, approvals, and implementation",
|
|
205
|
+
requiresClient: true,
|
|
206
|
+
seeding: {
|
|
207
|
+
order: 9,
|
|
208
|
+
requires: ["datastudio_clients", "datastudio_appUsers"],
|
|
209
|
+
},
|
|
210
|
+
showInNavigation: true,
|
|
211
|
+
},
|
|
212
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ChangeControlApproval: import("@nyrra/maker").PrismantixObjectDefinition;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { defineObject } from "@nyrra/maker";
|
|
2
|
+
import { AppUser, Client } from "../../externalObjects.mjs";
|
|
3
|
+
import { ChangeControlApprovalDecisionValueType, ChangeControlApprovalRoleValueType, EpochMillisValueType, IsoTimestampStringValueType, } from "../../valueTypes.mjs";
|
|
4
|
+
import { ChangeControl } from "./ChangeControl.mjs";
|
|
5
|
+
export const ChangeControlApproval = defineObject({
|
|
6
|
+
apiName: "ChangeControlApproval",
|
|
7
|
+
displayName: "Change Control Approval",
|
|
8
|
+
pluralDisplayName: "Change Control Approvals",
|
|
9
|
+
primaryKeyPropertyApiName: "changeControlApprovalId",
|
|
10
|
+
titlePropertyApiName: "role",
|
|
11
|
+
description: "Generate realistic approval routing entries for pharmaceutical change controls. Each approval row should feel like part of a believable quality workflow with: - A role that fits the change category and GxP impact - A decision state that matches a normal review progression - A decisionDate only when the decision is Approved or Rejected - Short professional reviewer comments when they add useful signal",
|
|
12
|
+
properties: {
|
|
13
|
+
approverUserId: {
|
|
14
|
+
displayName: "Approver User ID",
|
|
15
|
+
description: "Reference to app user.",
|
|
16
|
+
type: "string",
|
|
17
|
+
optional: true,
|
|
18
|
+
reference: AppUser,
|
|
19
|
+
},
|
|
20
|
+
changeControlId: {
|
|
21
|
+
displayName: "Change Control ID",
|
|
22
|
+
description: "Reference to change control.",
|
|
23
|
+
type: "string",
|
|
24
|
+
reference: ChangeControl,
|
|
25
|
+
},
|
|
26
|
+
changeControlApprovalId: {
|
|
27
|
+
displayName: "Change Control Approval ID",
|
|
28
|
+
description: "Unique change control approval identifier",
|
|
29
|
+
type: "string",
|
|
30
|
+
exampleValues: ["CCA-2025-001", "CCA-2025-002"],
|
|
31
|
+
},
|
|
32
|
+
clientId: {
|
|
33
|
+
displayName: "Client ID",
|
|
34
|
+
description: "Reference to client.",
|
|
35
|
+
type: "string",
|
|
36
|
+
reference: Client,
|
|
37
|
+
},
|
|
38
|
+
comments: {
|
|
39
|
+
displayName: "Comments",
|
|
40
|
+
description: "Optional reviewer comments using concise professional quality-system language; omit for routine pending approvals",
|
|
41
|
+
type: "string",
|
|
42
|
+
optional: true,
|
|
43
|
+
exampleValues: [
|
|
44
|
+
"Validation impact assessment completed. Requalification protocol approved as written.",
|
|
45
|
+
"Submission impact not fully assessed. Update implementation plan and resubmit.",
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
createdAt: {
|
|
49
|
+
displayName: "Created At",
|
|
50
|
+
description: "Created At for the change control approval record.",
|
|
51
|
+
type: EpochMillisValueType,
|
|
52
|
+
optional: true,
|
|
53
|
+
},
|
|
54
|
+
decision: {
|
|
55
|
+
displayName: "Decision",
|
|
56
|
+
description: "Approval decision",
|
|
57
|
+
type: ChangeControlApprovalDecisionValueType,
|
|
58
|
+
exampleValues: ["Pending", "Approved", "Rejected"],
|
|
59
|
+
},
|
|
60
|
+
decisionDate: {
|
|
61
|
+
displayName: "Decision Date",
|
|
62
|
+
description: "ISO 8601 decision date only when decision is Approved or Rejected; omit for Pending",
|
|
63
|
+
type: IsoTimestampStringValueType,
|
|
64
|
+
optional: true,
|
|
65
|
+
exampleValues: ["2025-01-14T15:30:00Z", "2025-02-03T11:00:00Z"],
|
|
66
|
+
},
|
|
67
|
+
role: {
|
|
68
|
+
displayName: "Role",
|
|
69
|
+
description: "Approver role",
|
|
70
|
+
type: ChangeControlApprovalRoleValueType,
|
|
71
|
+
exampleValues: ["QA", "Validation", "Regulatory"],
|
|
72
|
+
},
|
|
73
|
+
updatedAt: {
|
|
74
|
+
displayName: "Updated At",
|
|
75
|
+
description: "Updated At for the change control approval record.",
|
|
76
|
+
type: EpochMillisValueType,
|
|
77
|
+
optional: true,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
prismantix: {
|
|
81
|
+
category: "quality-events",
|
|
82
|
+
convex: {
|
|
83
|
+
componentName: "ontology",
|
|
84
|
+
indexes: [
|
|
85
|
+
{
|
|
86
|
+
fields: ["changeControlApprovalId"],
|
|
87
|
+
name: "by_change_control_approval_id",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
fields: ["changeControlId"],
|
|
91
|
+
name: "by_change",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
fields: ["clientId"],
|
|
95
|
+
name: "by_client",
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
materialized: true,
|
|
99
|
+
tableName: "datastudio_changeControlApprovals",
|
|
100
|
+
},
|
|
101
|
+
defaults: {
|
|
102
|
+
fabricationCount: 20,
|
|
103
|
+
},
|
|
104
|
+
domain: "pharmaQualityOps",
|
|
105
|
+
guidance: [
|
|
106
|
+
"Use realistic pharma change-control approval routing across QA, Manufacturing, Validation, IT, Supply Chain, and Regulatory functions",
|
|
107
|
+
"Approved or Rejected decisions should include a decisionDate and concise professional comments",
|
|
108
|
+
"Pending approvals should not include a decisionDate and should usually omit comments unless escalation context is helpful",
|
|
109
|
+
],
|
|
110
|
+
notes: "change control approval routing entries",
|
|
111
|
+
requiresClient: true,
|
|
112
|
+
seeding: {
|
|
113
|
+
order: 11,
|
|
114
|
+
requires: [
|
|
115
|
+
"datastudio_clients",
|
|
116
|
+
"datastudio_changeControls",
|
|
117
|
+
"datastudio_appUsers",
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
showInNavigation: true,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ChangeControlEffectiveness: import("@nyrra/maker").PrismantixObjectDefinition;
|