circuitdata 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +25 -122
  3. data/Rakefile +4 -6
  4. data/lib/circuitdata.rb +32 -120
  5. data/lib/circuitdata/bury/bury.rb +61 -0
  6. data/lib/circuitdata/dereferencer.rb +49 -17
  7. data/lib/circuitdata/exposed_area.rb +84 -0
  8. data/lib/circuitdata/json_schema.rb +14 -0
  9. data/lib/circuitdata/json_validator.rb +56 -0
  10. data/lib/circuitdata/json_validator/json_schema_error_parser.rb +57 -0
  11. data/lib/circuitdata/material_validator.rb +40 -0
  12. data/lib/circuitdata/product.rb +125 -0
  13. data/lib/circuitdata/product_id_validator.rb +81 -0
  14. data/lib/circuitdata/profile.rb +31 -69
  15. data/lib/circuitdata/schema.rb +145 -0
  16. data/lib/circuitdata/schema_files/schema_v1_dereferenced.json +107155 -0
  17. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema.json +68 -5307
  18. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_generics.json +23 -0
  19. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_materials.json +99 -0
  20. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_products.json +779 -0
  21. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_profiles_and_capabilities.json +323 -0
  22. data/lib/circuitdata/summary.rb +96 -0
  23. data/lib/circuitdata/validator.rb +28 -0
  24. data/lib/circuitdata/version.rb +2 -1
  25. metadata +113 -20
  26. data/lib/circuitdata/bk_comparer.rb +0 -106
  27. data/lib/circuitdata/compatibility_checker.rb +0 -160
  28. data/lib/circuitdata/file_comparer.rb +0 -276
  29. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_schema_definitions.json +0 -1249
  30. data/lib/circuitdata/schema_files/v1/ottp_circuitdata_skeleton_schema.json +0 -94
  31. data/lib/circuitdata/schema_files/v1/ottp_schema_definitions.json +0 -102
  32. data/lib/circuitdata/tools.rb +0 -207
@@ -0,0 +1,23 @@
1
+ {
2
+ "version": {
3
+ "type": "number",
4
+ "minimum": 1,
5
+ "maximum": 2
6
+ },
7
+ "profile_capability_layer_subelement": {
8
+ "type": "object",
9
+ "required": ["value_type", "value"],
10
+ "properties": {
11
+ "reverse": {
12
+ "type": "boolean"
13
+ },
14
+ "value_type": {
15
+ "type": "string",
16
+ "enum": ["boolean", "range_of_integers", "range_of_numbers", "list_of_strings", "string"]
17
+ },
18
+ "value": {
19
+ "type": "string"
20
+ }
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,99 @@
1
+ {
2
+ "materials": {
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "version": { "$ref": "ottp_circuitdata_schema_generics.json#/version" },
7
+ "circuitdata_material_db_id": {
8
+ "type": "string"
9
+ },
10
+ "function": {
11
+ "type": "string",
12
+ "enum": ["conductive", "dielectric", "soldermask", "stiffener", "final_finish"]
13
+ },
14
+ "group": {
15
+ "type": "string",
16
+ "enum": ["FR1", "FR2", "FR3", "FR4", "FR5", "G-10", "G-11", "CEM-1", "CEM-2", "CEM-3", "CEM-4", "CEM-5", "ceramic", "polyimide", "aramid", "acrylic", "LCP", "PEN", "PET", "LPISM", "DFISM", "LDISM", "stainless_steel", "copper", "aluminum", "silver", "gold", "carbon", "silver_platinum", "silver_paladium", "gold_platinum", "platinum", "c_bare_copper", "isn", "iag", "enig", "enepig", "osp", "ht_osp", "g", "GS", "t_fused", "tlu_unfused", "dig", "gwb-1_ultrasonic", "gwb-2-thermosonic", "s_hasl", "b1_lfhasl", "IMS"]
17
+ },
18
+ "manufacturer": { "type": "string" },
19
+ "name": { "type": "string" },
20
+ "flexible": { "type": "boolean" },
21
+ "link": { "type": "string" },
22
+ "remark": { "type": "string" },
23
+ "additional": { "type": "string" },
24
+ "verified": { "type": "boolean" },
25
+ "accept_equivalent": { "type": "boolean" },
26
+ "ul94": {
27
+ "type": "string",
28
+ "enum": ["v-0", "v-1", "hb"]
29
+ },
30
+ "attributes": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "properties": {
34
+ "ipc_standard": {
35
+ "type": "integer"
36
+ },
37
+ "ipc_slash_sheet": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "integer"
41
+ }
42
+ },
43
+ "tg_min": { "type": "integer" },
44
+ "td_min": { "type": "integer" },
45
+ "resin": {
46
+ "type": "string",
47
+ "enum": ["epoxy", "bt", "cyanate_ester", "phenolic", "polyester", "polyimide", "ppe", "hydrocarbon", "ptfe", "thermoplastic"]
48
+ },
49
+ "resin_content": { "type": "number" },
50
+ "flame_retardant": {
51
+ "type": "string",
52
+ "enum": ["phosphor", "red_phosphor", "bromine", "chlorine", "antimony_oxide", "rohs_compliant_bromine"]
53
+ },
54
+ "woven_reinforcement": { "type": "boolean" },
55
+ "filler": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "string",
59
+ "enum": ["ceramic", "kaolin", "organic", "inorganic", "glass"]
60
+ }
61
+ },
62
+ "reinforcement": {
63
+ "type": "string",
64
+ "enum": ["e-glass", "s-glass", "ne-glass", "l-glass", "quartz", "aramid", "paper"]
65
+ },
66
+ "thickness": { "type": "number" },
67
+ "dk": { "type": "number" },
68
+ "cti": { "type": "number" },
69
+ "frequency": { "type": "number" },
70
+ "df": { "type": "number" },
71
+ "t260": { "type": "number" },
72
+ "t280": { "type": "number" },
73
+ "t300": { "type": "number" },
74
+ "mot": { "type": "number" },
75
+ "z_cte": { "type": "number" },
76
+ "z_cte_before_tg": { "type": "number" },
77
+ "z_cte_after_tg": { "type": "number" },
78
+ "dielectric_breakdown": { "type": "number" },
79
+ "water_absorption": { "type": "number" },
80
+ "thermal_conductivity": { "type": "number" },
81
+ "volume_resistivity": { "type": "number" },
82
+ "electric_strength": { "type": "number" },
83
+ "foil_roughness": {
84
+ "type": "string",
85
+ "enum": ["L", "S", "V"]
86
+ },
87
+ "ipc_sm_840_class": {
88
+ "type": "string",
89
+ "enum": ["T", "H", "TF", "HF"]
90
+ },
91
+ "finish": {
92
+ "type": "string",
93
+ "enum": ["matte", "glossy", "semi_glossy"]
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
@@ -0,0 +1,779 @@
1
+ {
2
+ "sections": {
3
+ "type": "array",
4
+ "items": {
5
+ "type": "object",
6
+ "required": ["name", "in_x", "in_y", "mm2"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "name": { "type": "string" },
10
+ "in_x": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "integer"
14
+ }
15
+ },
16
+ "in_y": {
17
+ "type": "array",
18
+ "items": {
19
+ "type": "integer"
20
+ }
21
+ },
22
+ "mm2": {
23
+ "uom": "mm2",
24
+ "type": "number"
25
+ }
26
+ }
27
+ }
28
+ },
29
+ "layers": {
30
+ "type": "array",
31
+ "items": {
32
+ "oneOf": [
33
+ {
34
+ "type": "object",
35
+ "required": [
36
+ "order",
37
+ "name",
38
+ "uuid",
39
+ "function",
40
+ "sections"
41
+ ],
42
+ "additionalProperties": false,
43
+ "properties": {
44
+ "order": { "type": "integer" },
45
+ "uuid": { "$ref": "#/definitions/uuid" },
46
+ "name": { "type": "string" },
47
+ "function": { "type": "string", "enum": ["none"] },
48
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } }
49
+ }
50
+ },
51
+ {
52
+ "type": "object",
53
+ "required": [
54
+ "order",
55
+ "name",
56
+ "uuid",
57
+ "function",
58
+ "sections",
59
+ "materials"
60
+ ],
61
+ "additionalProperties": false,
62
+ "properties": {
63
+ "order": { "type": "integer" },
64
+ "uuid": { "$ref": "#/definitions/uuid" },
65
+ "name": { "type": "string" },
66
+ "function": { "type": "string", "enum": ["conductive"] },
67
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
68
+ "flexible": { "type": "boolean" },
69
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
70
+ "thickness": { "type": "number", "uom": "μm" },
71
+ "tolerance_minus": { "type": "number", "uom": "μm" },
72
+ "tolerance_plus": { "type": "number", "uom": "μm" },
73
+ "coverage": { "type": "number" },
74
+ "layer_attributes": {
75
+ "type": "object",
76
+ "additionalProperties": false,
77
+ "properties": {
78
+ "minimum_track_width": { "type": "number", "uom": "μm" },
79
+ "minimum_spacing_width": { "type": "number", "uom": "μm" },
80
+ "conductive_function": {
81
+ "type": "string",
82
+ "enum": ["signal", "plane", "mixed"]
83
+ },
84
+ "polarity": {
85
+ "type": "string",
86
+ "enum": ["positive", "negative"]
87
+ }
88
+ }
89
+ }
90
+ }
91
+ },
92
+ {
93
+ "type": "object",
94
+ "required": [
95
+ "order",
96
+ "name",
97
+ "uuid",
98
+ "function",
99
+ "sections",
100
+ "materials"
101
+ ],
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "order": { "type": "integer" },
105
+ "uuid": { "$ref": "#/definitions/uuid" },
106
+ "name": { "type": "string" },
107
+ "function": { "type": "string", "enum": ["dielectric"] },
108
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
109
+ "flexible": { "type": "boolean" },
110
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
111
+ "thickness": { "type": "number", "uom": "μm" },
112
+ "tolerance_minus": { "type": "number", "uom": "μm" },
113
+ "tolerance_plus": { "type": "number", "uom": "μm" },
114
+ "coverage": { "type": "number" }
115
+ }
116
+ },
117
+ {
118
+ "type": "object",
119
+ "required": [
120
+ "order",
121
+ "name",
122
+ "uuid",
123
+ "function",
124
+ "sections",
125
+ "materials"
126
+ ],
127
+ "additionalProperties": false,
128
+ "properties": {
129
+ "order": { "type": "integer" },
130
+ "uuid": { "$ref": "#/definitions/uuid" },
131
+ "name": { "type": "string" },
132
+ "function": { "type": "string", "enum": ["soldermask"] },
133
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
134
+ "flexible": { "type": "boolean" },
135
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
136
+ "thickness": { "type": "number", "uom": "μm" },
137
+ "tolerance_minus": { "type": "number", "uom": "μm" },
138
+ "tolerance_plus": { "type": "number", "uom": "μm" },
139
+ "coverage": { "type": "number" },
140
+ "layer_attributes": {
141
+ "type": "object",
142
+ "additionalProperties": false,
143
+ "properties": {
144
+ "color": { "type": "string" },
145
+ "allow_touchups": { "type": "boolean" }
146
+ }
147
+ }
148
+ }
149
+ },
150
+ {
151
+ "type": "object",
152
+ "required": [
153
+ "order",
154
+ "name",
155
+ "uuid",
156
+ "function",
157
+ "sections",
158
+ "materials"
159
+ ],
160
+ "additionalProperties": false,
161
+ "properties": {
162
+ "order": { "type": "integer" },
163
+ "uuid": { "$ref": "#/definitions/uuid" },
164
+ "name": { "type": "string" },
165
+ "function": { "type": "string", "enum": ["stiffener"] },
166
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
167
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
168
+ "thickness": { "type": "number", "uom": "μm" },
169
+ "tolerance_minus": { "type": "number", "uom": "μm" },
170
+ "tolerance_plus": { "type": "number", "uom": "μm" },
171
+ "coverage": { "type": "number" }
172
+ }
173
+ },
174
+ {
175
+ "type": "object",
176
+ "required": [
177
+ "order",
178
+ "name",
179
+ "uuid",
180
+ "function",
181
+ "sections",
182
+ "materials"
183
+ ],
184
+ "additionalProperties": false,
185
+ "properties": {
186
+ "order": { "type": "integer" },
187
+ "uuid": { "$ref": "#/definitions/uuid" },
188
+ "name": { "type": "string" },
189
+ "function": { "type": "string", "enum": ["plating"] },
190
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
191
+ "flexible": { "type": "boolean" },
192
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
193
+ "thickness": { "type": "number", "uom": "μm" },
194
+ "tolerance_minus": { "type": "number", "uom": "μm" },
195
+ "tolerance_plus": { "type": "number", "uom": "μm" },
196
+ "coverage": { "type": "number" }
197
+ }
198
+ },
199
+ {
200
+ "type": "object",
201
+ "required": [
202
+ "order",
203
+ "name",
204
+ "uuid",
205
+ "function",
206
+ "sections",
207
+ "materials"
208
+ ],
209
+ "additionalProperties": false,
210
+ "properties": {
211
+ "order": { "type": "integer" },
212
+ "uuid": { "$ref": "#/definitions/uuid" },
213
+ "name": { "type": "string" },
214
+ "function": { "type": "string", "enum": ["adhesive"] },
215
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
216
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
217
+ "thickness": { "type": "number", "uom": "μm" },
218
+ "tolerance_minus": { "type": "number", "uom": "μm" },
219
+ "tolerance_plus": { "type": "number", "uom": "μm" },
220
+ "coverage": { "type": "number" }
221
+ }
222
+ },
223
+ {
224
+ "type": "object",
225
+ "required": [
226
+ "order",
227
+ "name",
228
+ "uuid",
229
+ "function",
230
+ "sections",
231
+ "materials"
232
+ ],
233
+ "additionalProperties": false,
234
+ "properties": {
235
+ "order": { "type": "integer" },
236
+ "uuid": { "$ref": "#/definitions/uuid" },
237
+ "name": { "type": "string" },
238
+ "function": { "type": "string", "enum": ["thermal"] },
239
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
240
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
241
+ "thickness": { "type": "number", "uom": "μm" },
242
+ "tolerance_minus": { "type": "number", "uom": "μm" },
243
+ "tolerance_plus": { "type": "number", "uom": "μm" },
244
+ "coverage": { "type": "number" }
245
+ }
246
+ },
247
+ {
248
+ "type": "object",
249
+ "required": [
250
+ "order",
251
+ "name",
252
+ "uuid",
253
+ "function",
254
+ "sections",
255
+ "materials"
256
+ ],
257
+ "additionalProperties": false,
258
+ "properties": {
259
+ "order": { "type": "integer" },
260
+ "uuid": { "$ref": "#/definitions/uuid" },
261
+ "name": { "type": "string" },
262
+ "function": { "type": "string", "enum": ["legend"] },
263
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
264
+ "flexible": { "type": "boolean" },
265
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
266
+ "thickness": { "type": "number", "uom": "μm" },
267
+ "tolerance_minus": { "type": "number", "uom": "μm" },
268
+ "tolerance_plus": { "type": "number", "uom": "μm" },
269
+ "coverage": { "type": "number" },
270
+ "layer_attributes": {
271
+ "type": "object",
272
+ "additionalProperties": false,
273
+ "properties": {
274
+ "color": { "type": "string" }
275
+ }
276
+ }
277
+ }
278
+ },
279
+ {
280
+ "type": "object",
281
+ "required": [
282
+ "order",
283
+ "name",
284
+ "uuid",
285
+ "function",
286
+ "sections",
287
+ "materials"
288
+ ],
289
+ "additionalProperties": false,
290
+ "properties": {
291
+ "order": { "type": "integer" },
292
+ "uuid": { "$ref": "#/definitions/uuid" },
293
+ "name": { "type": "string" },
294
+ "function": { "type": "string", "enum": ["final_finish"] },
295
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
296
+ "flexible": { "type": "boolean" },
297
+ "materials": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
298
+ "thickness": { "type": "number", "uom": "μm" },
299
+ "tolerance_minus": { "type": "number", "uom": "μm" },
300
+ "tolerance_plus": { "type": "number", "uom": "μm" },
301
+ "coverage": { "type": "number" },
302
+ "sub_material_thickness": {
303
+ "type": "object",
304
+ "patternProperties": {
305
+ "^.*": {
306
+ "type": "object",
307
+ "additionalProperties": false,
308
+ "properties": {
309
+ "minimum_thickness": { "type": "number" },
310
+ "maximum_thickness": { "type": "number" }
311
+ }
312
+ }
313
+ }
314
+ }
315
+ }
316
+ },
317
+ {
318
+ "type": "object",
319
+ "required": [
320
+ "order",
321
+ "name",
322
+ "uuid",
323
+ "function",
324
+ "sections",
325
+ "materials"
326
+ ],
327
+ "additionalProperties": false,
328
+ "properties": {
329
+ "order": { "type": "integer" },
330
+ "uuid": { "$ref": "#/definitions/uuid" },
331
+ "name": { "type": "string" },
332
+ "function": { "type": "string", "enum": ["peelable_tape"] },
333
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
334
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
335
+ "thickness": { "type": "number", "uom": "μm" },
336
+ "tolerance_minus": { "type": "number", "uom": "μm" },
337
+ "tolerance_plus": { "type": "number", "uom": "μm" },
338
+ "coverage": { "type": "number" }
339
+ }
340
+ },
341
+ {
342
+ "type": "object",
343
+ "required": [
344
+ "order",
345
+ "name",
346
+ "uuid",
347
+ "function",
348
+ "sections",
349
+ "materials"
350
+ ],
351
+ "additionalProperties": false,
352
+ "properties": {
353
+ "order": { "type": "integer" },
354
+ "uuid": { "$ref": "#/definitions/uuid" },
355
+ "name": { "type": "string" },
356
+ "function": { "type": "string", "enum": ["peelable_mask"] },
357
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
358
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
359
+ "thickness": { "type": "number", "uom": "μm" },
360
+ "tolerance_minus": { "type": "number", "uom": "μm" },
361
+ "tolerance_plus": { "type": "number", "uom": "μm" },
362
+ "coverage": { "type": "number" },
363
+ "layer_attributes": {
364
+ "type": "object",
365
+ "additionalProperties": false,
366
+ "properties": {
367
+ "heating_operations": {
368
+ "type": "integer"
369
+ }
370
+ }
371
+ }
372
+ }
373
+ },
374
+ {
375
+ "type": "object",
376
+ "required": [
377
+ "order",
378
+ "name",
379
+ "uuid",
380
+ "function",
381
+ "sections",
382
+ "materials"
383
+ ],
384
+ "additionalProperties": false,
385
+ "properties": {
386
+ "order": { "type": "integer" },
387
+ "uuid": { "$ref": "#/definitions/uuid" },
388
+ "name": { "type": "string" },
389
+ "function": { "type": "string", "enum": ["hard_gold"] },
390
+ "sections": { "type": "array", "uniqueItems": true, "items": { "type": "string" } },
391
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } },
392
+ "thickness": { "type": "number", "uom": "μm" },
393
+ "tolerance_minus": { "type": "number", "uom": "μm" },
394
+ "tolerance_plus": { "type": "number", "uom": "μm" },
395
+ "coverage": { "type": "number" },
396
+ "layer_attributes": {
397
+ "type": "object",
398
+ "additionalProperties": false,
399
+ "properties": {
400
+ "placement": {
401
+ "type": "string",
402
+ "enum": ["selective_pads", "edge_connectors"]
403
+ }
404
+ }
405
+ }
406
+ }
407
+ },
408
+ {
409
+ "type": "object",
410
+ "required": [
411
+ "order",
412
+ "name",
413
+ "uuid",
414
+ "function",
415
+ "materials"
416
+ ],
417
+ "additionalProperties": false,
418
+ "properties": {
419
+ "order": { "type": "integer" },
420
+ "uuid": { "$ref": "#/definitions/uuid" },
421
+ "name": { "type": "string" },
422
+ "function": { "type": "string", "enum": ["solder_paste"] },
423
+ "materials": { "type": "array", "uniqueItems": true, "maxItems": 1, "items": { "type": "string" } }
424
+ }
425
+ }
426
+ ]
427
+ }
428
+ },
429
+ "processes": {
430
+ "type": "array",
431
+ "items": {
432
+ "oneOf": [
433
+ {
434
+ "type": "object",
435
+ "additionalProperties": false,
436
+ "properties": {
437
+ "uuid": { "$ref": "#/definitions/uuid" },
438
+ "function": {
439
+ "type": "string",
440
+ "enum": ["edge_bevelling"]
441
+ }
442
+ }
443
+ },
444
+ {
445
+ "type": "object",
446
+ "additionalProperties": false,
447
+ "properties": {
448
+ "uuid": { "$ref": "#/definitions/uuid" },
449
+ "function": {
450
+ "type": "string",
451
+ "enum": ["depth_routing"]
452
+ }
453
+ }
454
+ },
455
+ {
456
+ "type": "object",
457
+ "additionalProperties": false,
458
+ "properties": {
459
+ "uuid": { "$ref": "#/definitions/uuid" },
460
+ "function": {
461
+ "type": "string",
462
+ "enum": ["counterboring"]
463
+ }
464
+ }
465
+ },
466
+ {
467
+ "type": "object",
468
+ "additionalProperties": false,
469
+ "properties": {
470
+ "uuid": { "$ref": "#/definitions/uuid" },
471
+ "function": {
472
+ "type": "string",
473
+ "enum": ["countersink"]
474
+ }
475
+ }
476
+ },
477
+ {
478
+ "type": "object",
479
+ "additionalProperties": false,
480
+ "properties": {
481
+ "uuid": { "$ref": "#/definitions/uuid" },
482
+ "function": {
483
+ "type": "string",
484
+ "enum": ["punching"]
485
+ }
486
+ }
487
+ },
488
+ {
489
+ "type": "object",
490
+ "additionalProperties": false,
491
+ "properties": {
492
+ "uuid": { "$ref": "#/definitions/uuid" },
493
+ "function": {
494
+ "type": "string",
495
+ "enum": ["plating"]
496
+ }
497
+ }
498
+ },
499
+ {
500
+ "type": "object",
501
+ "additionalProperties": false,
502
+ "properties": {
503
+ "uuid": { "$ref": "#/definitions/uuid" },
504
+ "function": {
505
+ "type": "string",
506
+ "enum": ["plated_edges"]
507
+ }
508
+ }
509
+ },
510
+ {
511
+ "type": "object",
512
+ "additionalProperties": false,
513
+ "properties": {
514
+ "uuid": { "$ref": "#/definitions/uuid" },
515
+ "function": {
516
+ "type": "string",
517
+ "enum": ["coin_attachment"]
518
+ }
519
+ }
520
+ },
521
+ {
522
+ "type": "object",
523
+ "additionalProperties": false,
524
+ "properties": {
525
+ "uuid": { "$ref": "#/definitions/uuid" },
526
+ "function": {
527
+ "type": "string",
528
+ "enum": ["holes"]
529
+ },
530
+ "function_attributes": {
531
+ "type": "object",
532
+ "additionalProperties": false,
533
+ "properties": {
534
+ "number_of_holes": { "type": "integer" },
535
+ "hole_type": {
536
+ "type": "string",
537
+ "enum": ["through", "blind", "buried", "back_drill", "via"]
538
+ },
539
+ "finished_size": { "type": "number", "uom": "μm"},
540
+ "layer_start": { "$ref": "#/definitions/uuid" },
541
+ "layer_stop": { "$ref": "#/definitions/uuid" },
542
+ "depth": { "type": "number", "uom": "μm"},
543
+ "method": {
544
+ "type": "string",
545
+ "enum": ["routing", "drilling", "laser"]
546
+ },
547
+ "minimum_designed_annular_ring": { "type": "number", "uom": "μm"},
548
+ "press_fit": { "type": "boolean" },
549
+ "plated": { "type": "boolean" },
550
+ "capped": { "type": "boolean" },
551
+ "filled": {
552
+ "type": "string",
553
+ "enum": ["copper", "resin", "soldermask"]
554
+ },
555
+ "covered": { "type": "boolean" },
556
+ "staggered": { "type": "boolean" },
557
+ "stacked": { "type": "boolean" },
558
+ "alivh": { "type": "boolean" },
559
+ "castellated": { "type": "boolean" }
560
+ }
561
+ }
562
+ }
563
+ }
564
+ ]
565
+ }
566
+ },
567
+ "metrics": {
568
+ "type": "object",
569
+ "additionalProperties": false,
570
+ "properties": {
571
+ "board": {
572
+ "type": "object",
573
+ "additionalProperties": false,
574
+ "properties": {
575
+ "size_x": { "type": "number", "uom": "mm" },
576
+ "size_y": { "type": "number", "uom": "mm" },
577
+ "area": { "type": "number", "uom": "mm" },
578
+ "breakaway_method": {
579
+ "type": "string",
580
+ "enum": ["routing", "punching"]
581
+ },
582
+ "thickness": { "type": "number", "uom": "mm" }
583
+ }
584
+ },
585
+ "array": {
586
+ "type": "object",
587
+ "additionalProperties": false,
588
+ "properties": {
589
+ "size_x": { "type": "number", "uom": "mm" },
590
+ "size_y": { "type": "number", "uom": "mm" },
591
+ "boards_x": { "type": "integer" },
592
+ "boards_y": { "type": "integer" },
593
+ "boards_total": { "type": "integer" },
594
+ "border_left": { "type": "number", "uom": "mm" },
595
+ "border_right": { "type": "number", "uom": "mm" },
596
+ "border_top": { "type": "number", "uom": "mm" },
597
+ "border_bottom": { "type": "number", "uom": "mm" },
598
+ "board_spacing_x": { "type": "number", "uom": "mm" },
599
+ "board_spacing_y": { "type": "number", "uom": "mm" },
600
+ "fiducials_number": { "type": "integer" },
601
+ "fiducials_size": { "type": "number", "uom": "mm" },
602
+ "fiducials_shape": {
603
+ "type": "string",
604
+ "enum": ["donut", "circle", "plus", "diamond"]
605
+ },
606
+ "breakaway_method": {
607
+ "type": "array",
608
+ "items": {
609
+ "type": "string",
610
+ "enum": ["routing", "scoring", "punching", "v_cut", "v_grove", "jump_scoring"]
611
+ }
612
+ },
613
+ "mouse_bites": { "type": "boolean" },
614
+ "tooling_holes_number": { "type": "integer" },
615
+ "tooling_holes_size": { "type": "number", "uom": "mm" },
616
+ "x_outs_allowed": { "type": "boolean" },
617
+ "x_outs_max_percentage_on_array": { "type": "number" },
618
+ "transplant_board_allowed": { "type": "boolean" },
619
+ "weight": { "type": "number", "uom": "g" }
620
+ }
621
+ }
622
+ }
623
+ },
624
+ "logistical": {
625
+ "type": "object",
626
+ "additionalProperties": false,
627
+ "properties": {
628
+ "inner_packaging": {
629
+ "type": "object",
630
+ "additionalProperties": false,
631
+ "properties": {
632
+ "ipc_1601_section_4_2_2_type": {
633
+ "type": "string",
634
+ "enum": ["a", "b", "c", "d"]
635
+ },
636
+ "hic": { "type": "boolean" },
637
+ "esd": { "type": "boolean" },
638
+ "desiccant": { "type": "boolean" },
639
+ "vacuum": { "type": "boolean" },
640
+ "maximum_number_of_arrays": { "type": "integer" }
641
+ }
642
+ }
643
+ }
644
+ },
645
+ "configuration": {
646
+ "type": "object",
647
+ "additionalProperties": false,
648
+ "properties": {
649
+ "stackup": {
650
+ "type": "object",
651
+ "additionalProperties": false,
652
+ "properties": {
653
+ "locked": { "type": "boolean" },
654
+ "ordered_outer_layers": { "type": "boolean" },
655
+ "ordered_inner_layers": { "type": "boolean" },
656
+ "file_name": { "type": "string" }
657
+ }
658
+ },
659
+ "markings": {
660
+ "type": "object",
661
+ "additionalProperties": false,
662
+ "properties": {
663
+ "layers": {
664
+ "type": "array",
665
+ "items": {
666
+ "$ref": "#/definitions/uuid"
667
+ }
668
+ },
669
+ "date_code": { "type": "string" },
670
+ "manufacturer_identification": { "type": "boolean" },
671
+ "standards": {
672
+ "type": "array",
673
+ "items": {
674
+ "type": "string"
675
+ }
676
+ },
677
+ "serial_number": { "type": "boolean" },
678
+ "serial_number_format": { "type": "string" },
679
+ "serial_number_start": { "type": "integer" },
680
+ "serial_number_increase_by": { "type": "integer" }
681
+ }
682
+ },
683
+ "standards": {
684
+ "type": "object",
685
+ "additionalProperties": false,
686
+ "properties": {
687
+ "comply_with": {
688
+ "type": "array",
689
+ "items": {
690
+ "type": "string",
691
+ "enum": ["ul", "c_ul", "rohs", "ul94", "iec_61249-2-21", "esa", "itar", "dfars", "mil_prf_55110", "mil_prf_50884", "mil_prf_31032", "as9100", "nadcap", "rw_en45545_2_2013", "rw_nf_f_16_101", "rw_uni_cei_11170_3", "rw_nfpa_130"]
692
+ }
693
+ },
694
+ "ipc_6010_class": {
695
+ "type": "integer",
696
+ "minimum": 1,
697
+ "maximum": 3
698
+ },
699
+ "ipc_6010_compliance_level": {
700
+ "type": "string",
701
+ "enum": ["full", "factory_standard", "aabus"]
702
+ },
703
+ "ipc_6010_copper_plating_thickness_level": {
704
+ "type": "integer",
705
+ "minimum": 2,
706
+ "maximum": 3
707
+ },
708
+ "ipc_6010_annular_ring_level": {
709
+ "type": "integer",
710
+ "minimum": 2,
711
+ "maximum": 3
712
+ },
713
+ "ipc_6010_conductor_spacing_level": {
714
+ "type": "integer",
715
+ "minimum": 2,
716
+ "maximum": 3
717
+ },
718
+ "ipc_6010_conductor_width_level": {
719
+ "type": "integer",
720
+ "minimum": 2,
721
+ "maximum": 3
722
+ },
723
+ "ipc_6012_class": {
724
+ "type": "string",
725
+ "enum": ["1", "2", "3", "3A", "3M", "3S"]
726
+ },
727
+ "ipc_6013_class": {
728
+ "type": "string",
729
+ "enum": ["1", "2", "3"]
730
+ },
731
+ "ipc_6018": { "type": "boolean" }
732
+ }
733
+ },
734
+ "testing": {
735
+ "type": "object",
736
+ "additionalProperties": false,
737
+ "properties": {
738
+ "netlist": { "type": "boolean" },
739
+ "allow_generate_netlist": { "type": "boolean" },
740
+ "hipot": { "type": "boolean" },
741
+ "4_wire": { "type": "boolean" },
742
+ "ist": { "type": "boolean" },
743
+ "impedance": {
744
+ "type": "string",
745
+ "enum": ["controlled", "calculated", "follow_stackup"]
746
+ }
747
+ }
748
+ },
749
+ "country_of_origin": {
750
+ "type": "object",
751
+ "additionalProperties": false,
752
+ "properties": {
753
+ "iso_3166_1_alpha_3": { "type": "string" },
754
+ "iso_3166_1_alpha_2": { "type": "string" },
755
+ "nato_member": { "type": "boolean" },
756
+ "eu_member": { "type": "boolean" }
757
+ }
758
+ },
759
+ "allowed_modifications": {
760
+ "type": "object",
761
+ "additionalProperties": false,
762
+ "properties": {
763
+ "dead_pad_removal": { "type": "boolean" },
764
+ "add_copper_balancing": { "type": "boolean" },
765
+ "add_copper_balancing_on_array": { "type": "boolean" },
766
+ "add_tear_drops": { "type": "boolean" },
767
+ "resize_vias": { "type": "boolean" }
768
+ }
769
+ }
770
+ }
771
+ },
772
+ "definitions": {
773
+ "uuid": {
774
+ "type": "string",
775
+ "format": "uuid",
776
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
777
+ }
778
+ }
779
+ }