Configuration Data

Upload and manage configuration data

Overview

The Configuration Data screen allows you to upload files with data to quickly configure Fynapse. This data can include, for example, Journal Line Definition, Business Event Definition, Dimension Sets, and Node Settings. The screen also allows you to download or delete a current system configuration.

Versioning of the File Structure

The Configuration Data file format supports versioning of the Configuration Data file structure. This means that the system structure governing Fynapse at any given time will be identified by a hardcoded version number. This version number will change with new updates to the governing structure.

Please note that the versioning refers to the system structure, not your configuration of the system. If you e.g., add a new calendar or change a Dimension Set, this will not cause a new version to be created.

Do not remove the version number from the JSON file. If you remove the version number, you will not be able to reupload the file.

When you download the file, it will contain information about the governing version:

1{
2 "version": "v20230211",
3 "downloadTime": "2023-11-03T10:04:05.819900999Z",
4 "downloadedBy": "john.doe@myaddress.com",
5 "configuration": {
6 "businessCalendars": [

We will be supporting older formats for a period of time. If you try to upload an older file which e.g., is missing a mandatory field, Fynapse will add this field to the configuration you are uploading.

When you try to upload a file in an unsupported version with an outdated structure Fynapse will throw an error.

General Information

JSON File Format

The Configuration Data screen allows the upload of files in a JSON format.

Remember to check if the “version” parameter is referring to a version number currently supported by Fynapse. If you are not sure about the current version number, download the JSON file from your Fynapse instance to verify prior to uploading your configuration.

1{
2 "version": "v20230211",
3 "configuration": {
4 "businessCalendars": [
5 {
6 "name": "Test Business Calendar",
7 "status": "ACTIVE",
8 "effectiveFrom": "1900-01-01",
9 "effectiveTo": "2099-12-31"
10 }
11 ],
12 "fiscalCalendars": [
13 {
14 "name": "Test Fiscal Calendar",
15 "type": "gregorian",
16 "active": true,
17 "effectiveFrom": "2023-08-22",
18 "endOfFirstYear": "2019-12-31",
19 "startYear": 2019
20 }
21 ],
22 "journalDefinition": {
23 "active": true,
24 "effectiveFrom": "2023-04-05",
25 "fields": [
26 {
27 "label": "Custom Core Date Label",
28 "name": "customCoreDateName",
29 "type": "date",
30 "role": "coreDate"
31 },
32 {
33 "label": "Custom Accounting Config Label",
34 "name": "customAccountingConfigName",
35 "type": "text",
36 "role": "accountingConfig"
37 },
38 {
39 "label": "Custom Journal Type Label",
40 "name": "customJournalTypeName",
41 "type": "text",
42 "role": "journalType"
43 },
44 {
45 "label": "Custom Account Label",
46 "name": "customAccountName",
47 "type": "text",
48 "role": "account"
49 },
50 {
51 "label": "Custom Transaction Amount Label",
52 "name": "customTransactionAmountName",
53 "type": "amount",
54 "role": "transactionAmount"
55 },
56 {
57 "label": "Custom Transaction Currency Label",
58 "name": "customTransactionCurrencyName",
59 "type": "text",
60 "role": "transactionCurrency"
61 },
62 {
63 "label": "Custom Subledger Node Label",
64 "name": "customSubledgerNodeName",
65 "type": "text",
66 "role": "node"
67 },
68 {
69 "label": "Test field date type",
70 "name": "testFieldDate",
71 "type": "date",
72 "role": "attribute"
73 },
74 {
75 "label": "Test field text type",
76 "name": "testFieldText",
77 "type": "text",
78 "role": "attribute"
79 },
80 {
81 "label": "Test field decimal type",
82 "name": "testFieldDecimal",
83 "type": "decimal",
84 "role": "attribute"
85 },
86 {
87 "label": "Test field posting type",
88 "name": "testPostingType",
89 "type": "text",
90 "role": "attribute"
91 },
92 {
93 "label": "Journal Id",
94 "name": "journalId",
95 "type": "uuid",
96 "role": "journalId"
97 },
98 {
99 "label": "Journal Line Id",
100 "name": "lineId",
101 "type": "uuid",
102 "role": "lineId"
103 },
104 {
105 "label": "Reverses",
106 "name": "reverses",
107 "type": "uuid",
108 "role": "reverses"
109 },
110 {
111 "label": "Reversed By",
112 "name": "reversedBy",
113 "type": "uuid",
114 "role": "reversedBy"
115 },
116 {
117 "label": "Ingestion Id",
118 "name": "ingestionId",
119 "type": "text",
120 "role": "ingestionId"
121 }
122 ],
123 "primaryKeys": [
124 "journalId",
125 "lineId"
126 ]
127 },
128 "businessEventDefinition": {
129 "active": true,
130 "effectiveFrom": "2023-04-05",
131 "attributes": [
132 {
133 "label": "Event Type Label",
134 "name": "eventTypeName",
135 "type": "text",
136 "role": "event_type"
137 },
138 {
139 "label": "Effective Date Label",
140 "name": "effectiveDateName",
141 "type": "date",
142 "role": "effective_date"
143 },
144 {
145 "label": "Amount Type Label",
146 "name": "amountTypeName",
147 "type": "decimal",
148 "role": "attribute"
149 },
150 {
151 "label": "Currency Label",
152 "name": "currencyName",
153 "type": "text",
154 "role": "attribute"
155 },
156 {
157 "label": "Custom Subledger Node Label",
158 "name": "customSubledgerNodeName",
159 "type": "text",
160 "role": "node"
161 }
162 ]
163 },
164 "businessEventTypes": [
165 {
166 "name": "IRSTRADE",
167 "description": "IRSTRADE description"
168 }
169 ],
170 "nodeValues": [
171 {
172 "fieldName": "customSubledgerNodeName",
173 "values": [
174 "Custom Subledger Node Label element 1",
175 "Custom Subledger Node Label element 2"
176 ]
177 }
178 ],
179 "dimensionSets": [
180 {
181 "name": "Test Dimension Set",
182 "description": "Test Dimension Set description",
183 "attributes": [
184 "customAccountingConfigName",
185 "customAccountName",
186 "customTransactionCurrencyName",
187 "customSubledgerNodeName"
188 ]
189 }
190 ],
191 "accountingConfigurations": [
192 {
193 "name": "Test Accounting Base 1",
194 "description": "Test Accounting Base 1 description",
195 "fiscalCalendarName": "Test Fiscal Calendar",
196 "businessCalendarName": "Test Business Calendar",
197 "dimensionSetName": "Test Dimension Set"
198 }
199 ],
200 "nodes": [
201 {
202 "fields": {
203 "customSubledgerNodeName": "Custom Subledger Node Label element 1"
204 },
205 "nodeConfigs": [
206 {
207 "graceDays": 0,
208 "graceHours": 0,
209 "overridePostingDate": "none",
210 "accountingConfigName": "Test Accounting Base 1"
211 }
212 ],
213 "timeZone": "Europe/Warsaw"
214 }
215 ],
216 "postingComponents": [
217 {
218 "code": "PLFEES",
219 "journalType": "Test Permanent Journal Type",
220 "description": "PLFEES description",
221 "accountingConfigName": "Test Accounting Base 1",
222 "postingPatterns": [
223 {
224 "postingCode": "test posting code CR",
225 "amountField": "amountTypeName",
226 "currencyField": "currencyName",
227 "postingDateField": "effectiveDateName",
228 "amountSignage": "AUTO",
229 "debitCredit": "CR"
230 },
231 {
232 "postingCode": "test posting code DR",
233 "amountField": "amountTypeName",
234 "currencyField": "currencyName",
235 "postingDateField": "effectiveDateName",
236 "amountSignage": "AUTO",
237 "debitCredit": "DR"
238 }
239 ]
240 }
241 ],
242 "postingComponentIdentifications": [
243 {
244 "businessEventTypeName": "IRSTRADE",
245 "postingComponents": [
246 {
247 "postingComponentCode": "PLFEES"
248 }
249 ]
250 }
251 ],
252 "accountLookups": [
253 {
254 "postingCode": "test posting code CR",
255 "accountLookupPatterns": [
256 {
257 "account": "111"
258 }
259 ]
260 },
261 {
262 "postingCode": "test posting code DR",
263 "accountLookupPatterns": [
264 {
265 "account": "222"
266 }
267 ]
268 }
269 ],
270 "journalMapping": {
271 "fieldsMapping": [
272 {
273 "journalField": "testFieldDate",
274 "mappingType": "FIELD",
275 "field": "effectiveDateName"
276 },
277 {
278 "journalField": "testFieldText",
279 "mappingType": "VALUE",
280 "value": {
281 "textValue": "Test mapping value"
282 }
283 },
284 {
285 "journalField": "testFieldDecimal",
286 "mappingType": "CONDITIONAL",
287 "conditions": [
288 {
289 "logicalOperator": "ANY",
290 "conditions": [
291 {
292 "operator": "EQ",
293 "left": {
294 "type": "FIELD",
295 "field": "eventTypeName"
296 },
297 "right": {
298 "type": "VALUE",
299 "value": {
300 "textValue": "Test text condition value"
301 }
302 }
303 },
304 {
305 "operator": "EQ",
306 "left": {
307 "type": "FIELD",
308 "field": "amountTypeName"
309 },
310 "right": {
311 "type": "VALUE",
312 "value": {
313 "decimalValue": 12.34
314 }
315 }
316 }
317 ],
318 "then": {
319 "type": "VALUE",
320 "value": {
321 "decimalValue": 0
322 }
323 }
324 }
325 ]
326 },
327 {
328 "journalField": "testPostingType",
329 "mappingType": "DERIVED_ATTRIBUTE",
330 "field": "postingComponentType"
331 }
332 ]
333 },
334 "deferralCalculatorConfig": {
335 "enabled": true,
336 "postingDateAttribute": "effectiveDateName",
337 "initialPostingDateAttribute": "effectiveDateName",
338 "startDateAttribute": "effectiveDateName",
339 "endDateAttribute": "effectiveDateName",
340 "initialDeferralAmountAttribute": "amountTypeName",
341 "transactionAmountAttribute": "amountTypeName",
342 "logicalOperator": "ALL",
343 "attributeFilters": [
344 {
345 "name": "currencyName",
346 "operator": "EQ",
347 "value": {
348 "textValue": "ND~"
349 }
350 }
351 ],
352 "attributeOverrides": [
353 {
354 "name": "currencyName",
355 "value": {
356 "textValue": "DEFERRAL"
357 },
358 "applyTo": "all"
359 }
360 ]
361 },
362 "journalTypes": [
363 {
364 "code": "Test Permanent Journal Type",
365 "description": "Test Permanent Journal Type description",
366 "behavior": "PERMANENT"
367 },
368 {
369 "code": "Test Reversal Journal Type",
370 "description": "Reversing Next day description",
371 "behavior": "REVERSING",
372 "reversingDate": "NEXT_DAY"
373 }
374 ],
375 "entities": [
376 {
377 "namespace": "fynapse",
378 "name": "simpleBusinessEventMandatoryValidation",
379 "temporalityType": "Reference",
380 "description": "Simple Business Event",
381 "type": "DefinedEntity",
382 "primaryKeyAttributeNames": [
383 "eventType"
384 ],
385 "attributes": [
386 {
387 "type": {
388 "typeName": "PrimitiveType",
389 "primitive": "INT"
390 },
391 "name": "glAccount",
392 "label": "GL Account",
393 "mandatory": false
394 },
395 {
396 "type": {
397 "typeName": "PrimitiveType",
398 "primitive": "TEXT"
399 },
400 "name": "eventType",
401 "label": "Event Type",
402 "mandatory": true
403 },
404 {
405 "type": {
406 "typeName": "PrimitiveType",
407 "primitive": "TEXT"
408 },
409 "name": "subEventType",
410 "label": "Event Subtype",
411 "mandatory": false
412 },
413 {
414 "type": {
415 "typeName": "PrimitiveType",
416 "primitive": "DATE"
417 },
418 "name": "eventDate",
419 "label": "Event Date",
420 "mandatory": false
421 },
422 {
423 "type": {
424 "typeName": "PrimitiveType",
425 "primitive": "TEXT"
426 },
427 "name": "company",
428 "label": "Company",
429 "mandatory": false
430 },
431 {
432 "type": {
433 "typeName": "PrimitiveType",
434 "primitive": "TEXT"
435 },
436 "name": "costCentre",
437 "label": "Cost Centre",
438 "mandatory": false
439 },
440 {
441 "type": {
442 "typeName": "PrimitiveType",
443 "primitive": "DATE"
444 },
445 "name": "postingDate",
446 "label": "Posting Date",
447 "mandatory": false
448 },
449 {
450 "type": {
451 "typeName": "PrimitiveType",
452 "primitive": "TEXT"
453 },
454 "name": "currencyCode",
455 "label": "Currency Code",
456 "mandatory": false
457 },
458 {
459 "type": {
460 "typeName": "PrimitiveType",
461 "primitive": "TEXT"
462 },
463 "name": "product",
464 "label": "Product",
465 "mandatory": false
466 },
467 {
468 "type": {
469 "typeName": "PrimitiveType",
470 "primitive": "TEXT"
471 },
472 "name": "partyIdentifier",
473 "label": "Party Identifier",
474 "mandatory": false
475 },
476 {
477 "type": {
478 "typeName": "PrimitiveType",
479 "primitive": "TEXT"
480 },
481 "name": "sourceSystem",
482 "label": "Source System",
483 "mandatory": false
484 }
485 ],
486 "validations": [
487 {
488 "name": "Cost Centre not empty for GL Account 4000",
489 "type": "MANDATORY",
490 "when": {
491 "logicalOperator": "AND",
492 "operands": [
493 {
494 "attributeName": "glAccount",
495 "condition": "inList",
496 "values": [
497 "4000"
498 ]
499 }
500 ]
501 },
502 "attributeName": "costCentre"
503 }
504 ]
505 },
506 {
507 "namespace": "fynapse",
508 "name": "OrganizationUnit",
509 "type": "DefinedEntity",
510 "description": "Organization Unit",
511 "primaryKeyAttributeNames": [
512 "organization"
513 ],
514 "attributes": [
515 {
516 "name": "organization",
517 "label": "organization",
518 "type": {
519 "typeName": "PrimitiveType",
520 "primitive": "TEXT"
521 },
522 "mandatory": true
523 },
524 {
525 "name": "code",
526 "label": "code",
527 "type": {
528 "typeName": "PrimitiveType",
529 "primitive": "TEXT"
530 },
531 "mandatory": true
532 },
533 {
534 "name": "name",
535 "label": "name",
536 "type": {
537 "typeName": "PrimitiveType",
538 "primitive": "TEXT"
539 },
540 "mandatory": true
541 }
542 ],
543 "references": [
544 {
545 "name": "referenceName",
546 "label": "referenceLabel",
547 "entity": "simpleBusinessEventMandatoryValidation",
548 "namespace": "fynapse",
549 "definition": [
550 {
551 "typeName": "Attribute",
552 "attributeName": "organization",
553 "referencedAttribute": "eventType"
554 },
555 {
556 "typeName": "Const",
557 "value": "9",
558 "referencedAttribute": "sourceSystem"
559 }
560 ]
561 }
562 ]
563 }
564 ],
565 "extractConfigurations": [
566 {
567 "extractConfigurationName":"extraction_configuration_test",
568 "description":"test",
569 "startDate":"2024-01-24T12:00:00Z",
570 "endDate":"2030-01-29T22:59:00Z",
571 "extractType":"CSV",
572 "uploadSpace":"CLOUD_STORAGE",
573 "incremental":true,
574 "query":{
575 "namespace":"fynapse",
576 "entity":"Journal",
577 "queryFilter":{
578 "nodes":[
579 {
580 "nodes":[
581 {
582 "fieldName":"lines_JournalLine_coreDate",
583 "constraint":"notEqual",
584 "values":[
585 "2024-01-24"
586 ]
587 }
588 ]
589 }
590 ]
591 }
592 },
593 "scheduler":{
594 "frequencies":[
595 {
596 "interval":"HOURLY",
597 "entries":[
598 {
599 "cron":{
600 "seconds":"0",
601 "minutes":"0/30",
602 "hours":"*",
603 "dayOfMonth":"*",
604 "month":"*",
605 "dayOfWeek":"?"
606 }
607 }
608 ]
609 },
610 {
611 "interval":"DAILY",
612 "entries":[
613 {
614 "cron":{
615 "seconds":"0",
616 "minutes":"0",
617 "hours":"13",
618 "dayOfMonth":"*",
619 "month":"*",
620 "dayOfWeek":"?"
621 }
622 }
623 ]
624 }
625 ],
626 "type":"FREQUENCY"
627 },
628 "splitBy":{
629 "isSplitByAttributeEnabled":true,
630 "attributeDescriptors":[
631 "customCoreDateName"
632 ]
633 }
634 },
635 {
636 "extractConfigurationName": "extraction_configuration",
637 "description": "new_configuration",
638 "startDate": "2024-01-24T12:00:00Z",
639 "endDate": "2030-01-29T22:59:00Z",
640 "extractType": "CSV",
641 "uploadSpace": "CLOUD_STORAGE",
642 "incremental": true,
643 "query": {
644 "namespace": "fynapse",
645 "entity": "Journal",
646 "queryFilter": {
647 "nodes": [
648 {
649 "nodes": [
650 {
651 "fieldName": "lines_JournalLine_coreDate",
652 "constraint": "notEqual",
653 "values": [
654 "2024-01-24"
655 ]
656 }
657 ]
658 }
659 ]
660 }
661 },
662 "scheduler": {
663 "frequencies": [
664 {
665 "interval": "ONCE",
666 "entries": [
667 {
668 "cron": {
669 "seconds": "0",
670 "minutes": "0",
671 "hours": "14",
672 "dayOfMonth": "28",
673 "month": "JAN",
674 "dayOfWeek": "?",
675 "year": "2024"
676 }
677 }
678 ]
679 }
680 ],
681 "type": "SPECIFIC_DATES"
682 },
683 "splitBy": {
684 "isSplitByAttributeEnabled": true,
685 "attributeDescriptors": [
686 "customCoreDateName"
687 ]
688 }
689 }
690 ]
691 }
692}

If you want to enable support for multiple currencies you have to add attributes related to this functionality to the JSON file. For more details, refer to Multiple Currencies.

Fynapse supports the download and re-upload of Flow configurations. For more details on the structure of Flow configuration in the Configuration Data JSON file, refer to Flow in Bulk Operations.

Configuration Data Constraints

Data uploaded in a JSON file has to meet the following prerequisites:

General Configuration

  • The correct structure of a Journal Line Definition consists of mandatory Systemic Fields, Subledger Nodes, and optional additional fields.
    For more details, refer to Journal Line Definition.

It is recommended to manually delete all data permission rules assigned to the Subledger Nodes via the Data Permissions screen before uploading a new configuration that will introduce changes to these Subledger Nodes. If you do not delete them prior to uploading the configuration, the system will retain the rules, but you will still be able to delete them later.

  • Each defined field has to have:
  • A Field Name, which has to be unique and have the maximum length of 128 characters
  • A Field Label, which has to be unique and have the maximum length of 128 characters
  • A Field Type with a correct corresponding data type, e.g. a date for Core Date
  • For Systemic Fields the Systemic Field Type is hard-coded

For decimal type fields the decimal attribute operates with the following parameters: scale 18 digits and precision 3 digits. This format is hardcoded and cannot be changed.

The “source” attribute is part of a larger implementation which is currently limited to the Business Event Entity. For Entities other than the Business Event Entity this attribute will appear for all defined fields when you download the Configuration Data JSON file. However, for these Entities this attribute is non-mandatory and you do not need it to upload your Configuration Data JSON file. So, a downloaded definition of a field will look like this:

1"label": "Custom Core Date Label",
2"name": "customCoreDateName",
3"type": "date",
4"role": "coreDate",
5"source": "input"
1"journalDefinition": {
2 "active": true,
3 "effectiveFrom": "2023-04-05",
4 "fields": [
5 {
6 "label": "Custom Core Date Label",
7 "name": "customCoreDateName",
8 "type": "date",
9 "role": "coreDate"
10 },
11 {
12 "label": "Custom Accounting Config Label",
13 "name": "customAccountingConfigName",
14 "type": "text",
15 "role": "accountingConfig"
16 },
17 {
18 "label": "Custom Journal Type Label",
19 "name": "customJournalTypeName",
20 "type": "text",
21 "role": "journalType"
22 },
23 {
24 "label": "Custom Account Label",
25 "name": "customAccountName",
26 "type": "text",
27 "role": "account"
28 },
29 {
30 "label": "Custom Transaction Amount Label",
31 "name": "customTransactionAmountName",
32 "type": "amount",
33 "role": "transactionAmount"
34 },
35 {
36 "label": "Custom Transaction Currency Label",
37 "name": "customTransactionCurrencyName",
38 "type": "text",
39 "role": "transactionCurrency"
40 },
41 {
42 "label": "Custom Subledger Node Label",
43 "name": "customSubledgerNodeName",
44 "type": "text",
45 "role": "node"
46 },
47 {
48 "label": "Test field date type",
49 "name": "testFieldDate",
50 "type": "date",
51 "role": "attribute"
52 },
53 {
54 "label": "Test field text type",
55 "name": "testFieldText",
56 "type": "text",
57 "role": "attribute"
58 },
59 {
60 "label": "Test field decimal type",
61 "name": "testFieldDecimal",
62 "type": "decimal",
63 "role": "attribute"
64 },
65 {
66 "label": "Test field posting type",
67 "name": "testPostingType",
68 "type": "text",
69 "role": "attribute"
70 },
71 {
72 "label": "Journal Id",
73 "name": "journalId",
74 "type": "uuid",
75 "role": "journalId"
76 },
77 {
78 "label": "Journal Line Id",
79 "name": "lineId",
80 "type": "uuid",
81 "role": "lineId"
82 },
83 {
84 "label": "Reverses",
85 "name": "reverses",
86 "type": "uuid",
87 "role": "reverses"
88 },
89 {
90 "label": "Reversed By",
91 "name": "reversedBy",
92 "type": "uuid",
93 "role": "reversedBy"
94 },
95 {
96 "label": "Ingestion Id",
97 "name": "ingestionId",
98 "type": "text",
99 "role": "ingestionId"
100 }
101 ],
102 "primaryKeys": [
103 "journalId",
104 "lineId"
105 ]
106 }
  • The correct structure of a Business Event Definition consists of a mandatory Systemic Field, i.e. Event Type, Subledger Nodes, and optional additional fields.
    For more details, refer to Business Event Definition.
  • Each defined field has to have:
  • A Field Name, which has to be unique and have the maximum length of 128 characters
  • A Field Label, which has to be unique and have the maximum length of 128 characters
  • A Field Type with a correct corresponding data type, e.g. a date for Core Date
  • For Systemic Fields the Systemic Field Type is hard-coded
  • Primary Key - the fields which will constitute the unique ID of the record in the system
  • Validations - you can define your own validations for Business Events
    For more details, refer to Validations.
  • Source - data source for the BED field; there are two types of data sources:
  • input - these are fields which draw data from input files with transaction data
  • reference - these are fields which draw data from Reference Entities based on references defined for the Business Event Definition; this is the value you have to define to create an enriching field

If you define a field with a “reference“ source type, you have to define the reference:

1{
2 "label": "Ref Instrument Type Date",
3 "name": "instrumentTypeRefDate",
4 "type": "date",
5 "role": "attribute",
6 "source": "reference",
7 "sourceReference": {
8 "name": "instrumentEnrichement",
9 "attribute": "validFrom"
10 }
11}

where:

  • sourceReference - the definition of the reference
  • name - name of the reference to the Entity which contains the enriching field
  • attribute - name of the enriching field in the referenced Reference Entity

For decimal type fields the decimal attribute operates with the following parameters: scale 18 digits and precision 3 digits. This format is hardcoded and cannot be changed.

1"businessEventDefinition": {
2 "active": true,
3 "effectiveFrom": "2023-04-05",
4 "attributes": [
5 {
6 "label": "Event Type Label",
7 "name": "eventTypeName",
8 "type": "text",
9 "role": "event_type",
10 "source": "input"
11 },
12 {
13 "label": "Effective Date Label",
14 "name": "effectiveDateName",
15 "type": "date",
16 "role": "effective_date",
17 "source": "input"
18 },
19 {
20 "label": "Amount Type Label",
21 "name": "amountTypeName",
22 "type": "decimal",
23 "role": "attribute",
24 "source": "input"
25 },
26 {
27 "label": "Currency Label",
28 "name": "currencyName",
29 "type": "text",
30 "role": "attribute",
31 "source": "input"
32 },
33 {
34 "label": "Custom Subledger Node Label",
35 "name": "customSubledgerNodeName",
36 "type": "text",
37 "role": "node",
38 "source": "input"
39 }
40 ]
41 }
1"references": [
2 {
3 "name": "legalEntity",
4 "label": "Legal Entity",
5 "description": "Description of the reference"
6 "entity": "organisationUnit",
7 "namespace": "fynapse",
8
9 "definition": [
10 {
11 "typeName": "Attribute",
12 "referencedAttribute": "organisationUnitIdentifier",
13 "attributeName": "company"
14 },
15 {
16 "typeName": "Const",
17 "referencedAttribute": "organisationUnitIdentifierType",
18 "value": "Cost Centre"
19 }
20 ]
21 }
22 ]

where:

  • name - name of the reference
  • label - label of the reference
  • description - description of the reference
  • entity - Entity being referenced
  • namespace - Entities are grouped into logical sets called namespaces. This ensures easy identification, as Entities within each namespace have to have unique names.
    Currently, the value for this property should be defined as ‘fynapse’.
  • definition - definition of the reference:
  • typeName - type of the reference:
    • Attribute - a reference to an attribute from Business Event Definition to an attribute from the Organization Unit Entity
    • Const - reference from the Business Event Definition to a determined value of an attribute in the Organization Unit Entity
  • referencedAttribute - the attribute from the referenced Entity
  • attributeName - the name of the attribute in the referring Entity for Attribute type references
  • value - the value of the attribute in the referenced Entity for Const type references
Primary Keys

When creating a reference you have to cover Primary Keys. A Primary Key is a unique attribute or set of attributes which identify an Entity in the system. What this means is, if you define a Primary Key consisting of one attribute then you have to create a reference to this attribute when referring to this Entity. You can create references to other attributes as well, but Primary Key attributes are mandatory for a reference. Let’s look at the example above. We are creating a reference to the Organization Unit Entity which has one Primary Key attribute - Organization Unit Identifier. Additionally, we are also creating a reference to the Organization Unit Identifier Type attribute, which is not part of the Primary Key, but we still want to reference it.

You can create a more complex enrichment, by creating a reference based on a field from a different reference.

In order to set this up correctly, it is best if you do it in stages:

Stage 1

Define the first reference, e.g., instrumentEnrichment:

1"references": [
2 {
3 "name": "instrumentEnrichment",
4 "label": "Instrument Enrichment",
5 "entity": "instrument",
6 "namespace": "fynapse",
7 "definition": [
8 {
9 "typeName": "Attribute",
10 "referencedAttribute": "instrumentCode",
11 "attributeName": "instrumentCode"
12 }
13 ]
14 }
15 ]

Stage 2

Define an enriching field using a field from the referenced Entity, in this example, this is the “instrumentSubTypeCode” field:

1{
2 "label": "Ref Instrument Type Dec",
3 "name": "instrumentSubTypeCode",
4 "type": "text",
5 "role": "attribute",
6 "source": "reference",
7 "sourceReference": {
8 "name": "instrumentEnrichment",
9 "attribute": "instrumentSubTypeCode"
10 }
11 }

Stage 3

Now, when creating a “hook” for another reference, you can use the “instrumentSubTypeCode“ field. This will simplify validations, as the system will not be required to call the referenced Entity because the field is already part of the Business Event Definition:

1"references": [
2 {
3 "name": "instrumentSubTypeEnrichment",
4 "label": "Instrument Sub Type Enrichment",
5 "entity": "instrumentSubType",
6 "namespace": "fynapse",
7 "definition": [
8 {
9 "typeName": "Attribute",
10 "referencedAttribute": "instrumentSubTypeCode",
11 "attributeName": "instrumentSubTypeCode"
12 }
13 ]
14 }
15 ]

If you create linked references, you have to ensure they are listed in the Configuration Data JSON file in the correct order. The references are validated in the order they are listed, so if you are using a field from a reference in another reference, the latter have to be listed first. This will ensure the field is populated in the Business Event and the call from the second reference does not return empty.

An alternative version would be to create a link between the two references, without creating a new field on the Business Event Definition:

1"references": [
2 {
3 "name": "instrumentSubTypeEnrichment",
4 "label": "Instrument Sub Type Enrichment",
5 "entity": "instrumentSubType",
6 "namespace": "fynapse",
7 "definition": [
8 {
9 "typeName": "Attribute",
10 "referencedAttribute": "instrumentSubTypeCode",
11 "attributeName": "instrumentEnrichment.instrumentSubTypeCode"
12 }
13 ]
14 }
15 ]

where in the definition of the reference in the attributeName property you have to create a “hook“ for another reference:

referenceName.attributeName - for example, intrumentEnrichment.instrumentSubTypeCode

here:

  • intrumentEnrichment is the name of another reference
  • instrumentSubType Code is the name of a field in another Entity called by the instrumentEnrichment reference

The definition of types of Business Events.

1"businessEventTypes": [
2 {
3 "name": "IRSTRADE",
4 "description": "IRSTRADE description"
5 }
6 ]

When you define Subledger Nodes in Journal Line Definition, you need to define the values for these Nodes.

1"nodeValues": [
2 {
3 "fieldName": "customSubledgerNodeName",
4 "values": [
5 "Custom Subledger Node Label element 1",
6 "Custom Subledger Node Label element 2"
7 ]
8 }
9 ]

Each Node Configuration has to have:

  • A unique name
  • Configured Nodes defined in the Journal Line Definition
  • Selected Time Zone
  • Assigned Accounting Base
  • Configured Grace Period:
  • Grace Days: between 0 and 31
  • Grace Hours: between 0 and 23

For more details, refer to Node Configurations.

1"nodes": [
2 {
3 "fields": {
4 "customSubledgerNodeName": "Custom Subledger Node Label element 1"
5 },
6 "nodeConfigs": [
7 {
8 "graceDays": 0,
9 "graceHours": 0,
10 "overridePostingDate": "none",
11 "accountingConfigName": "Test Accounting Base 1"
12 }
13 ],
14 "timeZone": "Europe/Warsaw"
15 }
16 ]

Each Accounting Base has to have:

  • A unique name
  • Configured:
  • Business Calendar
  • Fiscal Calendar
  • Dimension Set
  • Assigned Node Configuration
  • Configured Grace Period:
  • Grace Days: between 0 and 31
  • Grace Hours: between 0 and 23

For more details, refer to Accounting Bases.

1"accountingConfigurations": [
2 {
3 "name": "Test Accounting Base 1",
4 "description": "Test Accounting Base 1 description",
5 "fiscalCalendarName": "Test Fiscal Calendar",
6 "businessCalendarName": "Test Business Calendar",
7 "dimensionSetName": "Test Dimension Set"
8 }
9 ]
  • A unique name that is a maximum 255 characters long
  • A unique set of Dimensions that correspond to fields on Journal Line Definition

For more details, refer to Dimension Sets.

1"dimensionSets": [
2 {
3 "name": "Test Dimension Set",
4 "description": "Test Dimension Set description",
5 "attributes": [
6 "customAccountingConfigName",
7 "customAccountName",
8 "customTransactionCurrencyName",
9 "customSubledgerNodeName"
10 ]
11 }
12 ]

Each Business Calendar has to have:

  • A unique name
  • Status
  • Effective From date
  • Effective To date
  • Rules (optional)

For more details, refer to Business Calendars.

1"businessCalendars": [
2 {
3 "name": "MyBusinessCalendarWeekends",
4 "status": "ACTIVE"
5 "effectiveFrom": "1900-01-01",
6 "effectiveTo": "2099-12-31",
7 "rules": [
8 {
9 "type": "WEEK_DAYS",
10 "name": "Weekends-64abb452-0302-4c1a-ab85-f1f2a5b925bf",
11 "nwdType": "WEEKEND",
12 "effectiveFrom": "1900-01-01",
13 "effectiveTo": "2099-12-31",
14 "frequency": "EVERY",
15 "definition": [
16 "SATURDAY",
17 "SUNDAY"
18 ]
19 }
20 ]
21 }
22 ]

Each Gregorian Fiscal Calendar has to have:

  • A unique name
  • Type
  • End of Fiscal Year
  • Year
1"fiscalCalendars": [
2 {
3 "name": "Test Fiscal Calendar",
4 "type": "gregorian",
5 "active": true,
6 "effectiveFrom": "2023-08-22",
7 "endOfFirstYear": "2019-12-31",
8 "startYear": 2019
9 }
10 ]

Each Custom Fiscal Calendar has to have:

  • A unique name
  • Type
  • effectiveFrom date
  • Definition of periods
1"fiscalCalendars": [
2 {
3 "name": "Custom Fiscal Calendar",
4 "type": "custom",
5 "active": true,
6 "effectiveFrom": "2024-11-13",
7 "periods": [
8 {
9 "startDate": "2023-01-15",
10 "endDate": "2023-04-14",
11 "year": "2023",
12 "number": "1"
13 },
14 {
15 "startDate": "2023-04-15",
16 "endDate": "2023-07-14",
17 "year": "2023",
18 "number": "2"
19 },
20 {
21 "startDate": "2023-07-15",
22 "endDate": "2023-10-14",
23 "year": "2023",
24 "number": "3"
25 },
26 {
27 "startDate": "2023-10-15",
28 "endDate": "2024-01-14",
29 "year": "2023",
30 "number": "4"
31 },
32 {
33 "startDate": "2024-01-15",
34 "endDate": "2024-04-14",
35 "year": "2024",
36 "number": "1"
37 },
38 {
39 "startDate": "2024-04-15",
40 "endDate": "2024-07-14",
41 "year": "2024",
42 "number": "2"
43 },
44 {
45 "startDate": "2024-07-15",
46 "endDate": "2024-10-14",
47 "year": "2024",
48 "number": "3"
49 },
50 {
51 "startDate": "2024-10-15",
52 "endDate": "2025-01-14",
53 "year": "2024",
54 "number": "4"
55 },
56 {
57 "startDate": "2025-01-15",
58 "endDate": "2025-04-14",
59 "year": "2025",
60 "number": "1"
61 },
62 {
63 "startDate": "2025-04-15",
64 "endDate": "2025-07-14",
65 "year": "2025",
66 "number": "2"
67 },
68 {
69 "startDate": "2025-07-15",
70 "endDate": "2025-10-14",
71 "year": "2025",
72 "number": "3"
73 },
74 {
75 "startDate": "2025-10-15",
76 "endDate": "2026-01-06",
77 "year": "2025",
78 "number": "5"
79 }
80 ]

For more details, refer to Fiscal Calendars.

Currently, Business Date can be overridden only in the screen, by going to the System settings screen.

However, if you do configure the override the following will appear at the very end of the Configuration Data JSON file downloaded from Fynapse:

1"businessDateSettings": {
2 "businessDateShift": 0,
3 "businessDateOverride": "2023-07-09T22:00:00"
4 }

This is read only information. If you change this setting in the JSON file and reupload it, it will not change the configuration.

The Unposted Journals feature flag allows you to change the logic behind managing Unposted Journals.

For more details, refer to Journals.

Note that any changes to this setting significantly affect how the data is processed.

By default, the Unposted Journals setting is enabled:

1"unpostedJournalsFeatureFlag": {
2 "unpostedJournalsEnabled": true
3 }

You can choose to disable it by changing the value to “false”.

If you do not include the Unposted Journals settings section when you reupload the Configuration Data JSON file, the system will automatically restore the default setting where the Unposted Journals setting in enabled.

If there are no feature flags currently available in Fynapse, this section will not appear in the JSON file.

This section lists all feature flags currently available in Fynapse together with their statuses:

  • true - for enabled feature flags
  • false - for disabled feature flags

For example:

1{
2"featureFlags": {
3 "featureFlag1Name": false
4 "featureFlag2Name": true
5 }
6}

Yearend Cleardown, also known as Retained Earnings Process, is part of closing a fiscal year and a preparation for starting a new financial year.

To configure Yearend Cleardown you need to insert the following sections, which cover Yearend Cleardown configurations and assignments:

1"balanceProcessing": {
2 "clearDownConfigs": [
3 {
4 "name": "New config",
5 "journalTypeCode": "Test Permanent Journal Type",
6 "comment": "b",
7 "effectiveFrom": "2025-10-14",
8 "rules": [
9 {
10 "name": "Rule one",
11 "offsetAccount": "222",
12 "accountsSelector": {
13 "kind": "ListAccountSelector",
14 "accounts": [
15 "111"
16 ]
17 }
18 }
19 ]
20 }
21 ],
22 "clearDownConfigurationAssignmentDefinition": {
23 "configurationAssignments": [
24 {
25 "accountingConfigName": "IFRS",
26 "nodeFields": {
27 "customSubledgerNodeName": "Custom Subledger Node Label element 1"
28 },
29 "configurationName": "New config"
30 },
31 {
32 "accountingConfigName": "IFRS",
33 "nodeFields": {
34 "customSubledgerNodeName": "Custom Subledger Node Label element 2"
35 }
36 },
37 {
38 "accountingConfigName": "IFRS",
39 "nodeFields": {
40 "customSubledgerNodeName": "Custom Subledger Node Label element 3"
41 }
42 },
43 {
44 "accountingConfigName": "IFRS Custom Periods",
45 "nodeFields": {
46 "customSubledgerNodeName": "Node for Custom Periods"
47 }
48 }
49 ]
50 }
51 }

Note that if you have enabled Multiple Currencies, this section will also include FX Revaluation configurations and assignments. For more details, refer to Multiple Currencies Configuration.

Accounting Engine

Each Posting Component has to have the following properties defined:

  • Posting Code
  • Journal Type
  • Accounting Base
  • Posting Pattern (a minimum of 2 have to be defined, one for Debit and one for Credit Record):
  • Posting Code
  • Debit or Credit Record
  • Amount Sign
  • Currency
  • Amount Type
  • Posting Date
  • Matching Definition between Business Event Types and Posting Components:
  • Business Event Type
  • Posting Component Code
  • Name
  • Type
  • Value

To configure Account Lookups you have to define:

  • Posting Code
  • Lookup Attributes Definition:
  • Name
  • Matching Order
  • Lookup Patterns:
  • Account
  • Lookup Attributes:
    • Type
    • Name

For more details, refer to Working with the Accounting Rules.

1"postingComponents": [
2 {
3 "code": "PLFEES",
4 "journalType": "Test Permanent Journal Type",
5 "description": "PLFEES description",
6 "accountingConfigName": "Test Accounting Base 1",
7 "postingPatterns": [
8 {
9 "postingCode": "test posting code CR",
10 "amountField": "amountTypeName",
11 "currencyField": "currencyName",
12 "postingDateField": "effectiveDateName",
13 "amountSignage": "AUTO",
14 "debitCredit": "CR"
15 },
16 {
17 "postingCode": "test posting code DR",
18 "amountField": "amountTypeName",
19 "currencyField": "currencyName",
20 "postingDateField": "effectiveDateName",
21 "amountSignage": "AUTO",
22 "debitCredit": "DR"
23 }
24 ]
25 }
26 ],
27 "postingComponentIdentifications": [
28 {
29 "businessEventTypeName": "IRSTRADE",
30 "postingComponents": [
31 {
32 "postingComponentCode": "PLFEES"
33 }
34 ]
35 }
36 ],
37 "accountLookups": [
38 {
39 "postingCode": "test posting code CR",
40 "accountLookupPatterns": [
41 {
42 "account": "111"
43 }
44 ]
45 },
46 {
47 "postingCode": "test posting code DR",
48 "accountLookupPatterns": [
49 {
50 "account": "222"
51 }
52 ]
53 }
54 ]

Chart of Accounts is an optional item you can use to ingest your company’s Chart of Accounts into Fynapse.

Each defined Account requires the following data:

  • number - unique number of the Account
  • name - unique name of the Account
  • financialStatement - information about the financial statement
  • type - type of the Account

Note that if you add this section, then you need to include in it all Accounts defined in the accountLookups section of the Accounting Rules Navigator Configuration. If you fail to add any Accounts from the Account Lookup section, the Configuration Data JSON file will not be ingested and an error will be thrown.

All Accounts ingested in the Configuration Data JSON file are by default set to ACTIVE.

1"accounts": [
2 {
3 "number": "111",
4 "name": "Cash",
5 "financialStatement": "Balance Sheet",
6 "type": "Asset"
7 },
8 {
9 "number": "222",
10 "name": "Accounts Receivable",
11 "financialStatement": "Balance Sheet",
12 "type": "Asset"
13 }
14 ]

To configure Journal Mapping you have to define:

  • Journal Field
  • Mapping Type
  • Based on the mapping type:
    • Field - for field type mapping
    • Value - for value type mapping
    • Conditions - for condition type mapping

For more details, refer to Journal Mapping.

1"journalMapping": {
2 "fieldsMapping": [
3 {
4 "journalField": "testFieldDate",
5 "mappingType": "FIELD",
6 "field": "effectiveDateName"
7 },
8 {
9 "journalField": "testFieldText",
10 "mappingType": "VALUE",
11 "value": {
12 "textValue": "Test mapping value"
13 }
14 },
15 {
16 "journalField": "testFieldDecimal",
17 "mappingType": "CONDITIONAL",
18 "conditions": [
19 {
20 "logicalOperator": "ANY",
21 "conditions": [
22 {
23 "operator": "EQ",
24 "left": {
25 "type": "FIELD",
26 "field": "eventTypeName"
27 },
28 "right": {
29 "type": "VALUE",
30 "value": {
31 "textValue": "Test text condition value"
32 }
33 }
34 },
35 {
36 "operator": "EQ",
37 "left": {
38 "type": "FIELD",
39 "field": "amountTypeName"
40 },
41 "right": {
42 "type": "VALUE",
43 "value": {
44 "decimalValue": 12.34
45 }
46 }
47 }
48 ],
49 "then": {
50 "type": "VALUE",
51 "value": {
52 "decimalValue": 0
53 }
54 }
55 }
56 ]
57 },
58 {
59 "journalField": "testPostingType",
60 "mappingType": "DERIVED_ATTRIBUTE",
61 "field": "postingComponentType"
62 }
63 ]
64 }

To configure Journal Types you have to define:

  • Journal Code
  • Behavior
  • Reversing Date - if the Journal Type is defined as reversing

For more details, refer to Journal Types.

1"journalTypes": [
2 {
3 "code": "Test Permanent Journal Type",
4 "description": "Test Permanent Journal Type description",
5 "behavior": "PERMANENT"
6 },
7 {
8 "code": "Test Reversal Journal Type",
9 "description": "Reversing Next day description",
10 "behavior": "REVERSING",
11 "reversingDate": "NEXT_DAY"
12 }
13 ]

To configure the Deferral Calculator you have to enable the functionality and define:

  • Start Date
  • End Date
  • Initial Deferral Amount
  • Logical Operator
  • Filters
  • Posting Date
  • Optional: Initial Posting Date
  • Optional: Overrides

For more details, refer to Deferred Payments.

1"deferralCalculatorConfig": {
2 "enabled": true,
3 "postingDateAttribute": "effectiveDateName",
4 "initialPostingDateAttribute": "effectiveDateName",
5 "startDateAttribute": "effectiveDateName",
6 "endDateAttribute": "effectiveDateName",
7 "initialDeferralAmountAttribute": "amountTypeName",
8 "logicalOperator": "ALL",
9 "attributeFilters": [
10 {
11 "name": "currencyName",
12 "operator": "EQ",
13 "value": {
14 "textValue": "ND~"
15 }
16 }
17 ],
18 "attributeOverrides": [
19 {
20 "name": "currencyName",
21 "value": {
22 "textValue": "DEFERRAL"
23 },
24 "applyTo": "all"
25 }
26 ]
27 }

Data Structure

For detailed information about Entities and Data Structure, refer to Data Structure and Data Structure Definition.

An upload file can contain many Entities, but all of them must be unique for the upload to be successful.

For detailed information about Entities and Data Structure, refer to Data Structure and Data Structure Definition.
The “source” attribute is part of a larger implementation which is currently limited to the Business Event Entity. For Entities other than the Business Event Entity this attribute will appear for all defined fields when you download the Configuration Data JSON file. However, for these Entities this attribute is non-mandatory and you do not need it to upload your Configuration Data JSON file. So, a downloaded definition of a field will look like this:

1 "label": "Custom Core Date Label",
2 "name": "customCoreDateName",
3 "type": "date",
4 "role": "coreDate",
5 "source": "input"

Definition Constraints

The definitions uploaded in a JSON file have to meet the following prerequisites:

Entity

  • name:
    • Has to be unique.
    • Has to be composed using the following rules: start with a letter, which can be followed by alphanumeric characters and an underscore.
    • Has a maximum length of 128 characters.
  • temporalityType - what kind of data is contained in this Entity:
    • Reference - determines that the entity has a reference data type
    • Transaction - determines that the entity has a transactional data type; these are accounting data that cannot be changed
  • description - you can add an optional description
  • type - determines what type of an Entity this is:
    • ProtectedEntity - this is an entity which is created by the system when you define configurations that are necessary for the functioning of the system.
    • DefinedEntity - this is an entity defined by the user, you can create as many or as little defined entities as required by your data architecture.
  • primaryKeyAttributeNames - this is the definition of Attributes which will constitute the Primary Key and allow to identify the record in the system
    The Primary Key has to:
    • Be unique
    • Consist of a minimum of 1 Attribute
    • Consist of a maximum of 5 Attributes
    • Consist only of primitive attributes

When defining an Entity to be used as target for an extract, remember to add extractId to the Primary Key for Transaction type transient Entities to ensure correct deduplication of data. For more details, refer to Flow.

Attribute

An Entity has to have at least one Attribute.

  • name - unique name
    • Has to be unique
    • Has to be composed using the following rules: start with a letter, which can be followed by alphanumeric characters and an underscore
    • Has a maximum length of 128 characters
  • label - Has a maximum length of 128 characters, no constraints on syntax
  • mandatory - determines if an attribute is mandatory:
    • true
    • false
  • type - determines whether this is a Primitive or a Complex Attribute
    • Primitive attributes:
      • UUID

        Please note that the UUID inputs are not generated automatically. You need to generate them either via a third party generator or in your upstream system and include them in the ingest file with the rest of the input data.

      • BOOLEAN
      • TIMESTAMP - the format used in Fynapse is: yyyy-mm-dd HH:mm:ss. This format is hardcoded and cannot be changed.
      • DATE - the date format Fynapse is: yyyy-mm-dd. This format is hardcoded and cannot be changed.
      • TEXT
      • INT
      • DECIMAL - the decimal attribute operates with the following parameters: scale 18 digits and precision 3 digits. This format is hardcoded and cannot be changed.
      • HIGH-PRECISION DECIMAL
    • Complex attributes”
      • Inline Entity - this is an entity attribute type, i.e., a child entity nested within another entity.
      • List - this is an attribute type which can store an ordered collection of data, primitive or complex, e.g,. Inline Entities. The data contained within the List will be ordered in accordance with the order they were supplied to Fynapse. An example of this is a ‘person’ Entity with a list of ‘children’, ordered from youngest to oldest.
        A special example of this are protected entities Journal and Journal Line, with Journal Entity containing a list of Journal Line Entities. Their order is determined by Fynapse.

Technical properties

  • namespace - Entities are grouped into logical sets called namespaces. Currently, the value for this property should be defined as “fynapse”
    • “namespace”: “fynapse”
  • databaseConfiguration - if an Entity is to be persisted then it needs to be stored in “FDS”, and this can be done by defining the following database configuration:
1"databaseConfiguration": [
2 {
3 "databaseProfile": "fds",
4 }

Validations

  • Validations - you can define your own validations for Business Events
    For more details, refer to Validations.

Transient Entities are Entities created by an extract. These can be both Transaction and Reference type Entities, depending on the temporalityType of the source Entity. They are visible in the grid on the Finance Data Service screen, if they inherit the Reference, but the data contained in them cannot be browsed when you open the Entity details screen, because it is not stored in Finance Data Service until it has been transformed into an FDS Entity by a Flow. Transient Entities are used as input for Flows. They will be downloaded in the Configuration Data JSON file with the following tag appended to their definition:

"tags": [
"transient"
]

They can be edited in the downloaded JSON file, e.g., you can add enrichment or validations, and reupload. Please remember that the added validations and enrichment have to be compatible with the existing data model.

Sample Entity structure:

1"entities": [
2 {
3 "namespace": "fynapse",
4 "name": "simpleBusinessEventMandatoryValidation",
5 "temporalityType": "Reference",
6 "description": "Simple Business Event",
7 "type": "DefinedEntity",
8 "primaryKeyAttributeNames": [
9 "eventType"
10 ],
11 "attributes": [
12 {
13 "type": {
14 "typeName": "PrimitiveType",
15 "primitive": "INT"
16 },
17 "name": "glAccount",
18 "label": "GL Account",
19 "mandatory": false
20 },
21 {
22 "type": {
23 "typeName": "PrimitiveType",
24 "primitive": "TEXT"
25 },
26 "name": "eventType",
27 "label": "Event Type",
28 "mandatory": true
29 },
30 {
31 "type": {
32 "typeName": "PrimitiveType",
33 "primitive": "TEXT"
34 },
35 "name": "subEventType",
36 "label": "Event Subtype",
37 "mandatory": false
38 },
39 {
40 "type": {
41 "typeName": "PrimitiveType",
42 "primitive": "DATE"
43 },
44 "name": "eventDate",
45 "label": "Event Date",
46 "mandatory": false
47 },
48 {
49 "type": {
50 "typeName": "PrimitiveType",
51 "primitive": "TEXT"
52 },
53 "name": "company",
54 "label": "Company",
55 "mandatory": false
56 },
57 {
58 "type": {
59 "typeName": "PrimitiveType",
60 "primitive": "TEXT"
61 },
62 "name": "costCentre",
63 "label": "Cost Centre",
64 "mandatory": false
65 },
66 {
67 "type": {
68 "typeName": "PrimitiveType",
69 "primitive": "DATE"
70 },
71 "name": "postingDate",
72 "label": "Posting Date",
73 "mandatory": false
74 },
75 {
76 "type": {
77 "typeName": "PrimitiveType",
78 "primitive": "TEXT"
79 },
80 "name": "currencyCode",
81 "label": "Currency Code",
82 "mandatory": false
83 },
84 {
85 "type": {
86 "typeName": "PrimitiveType",
87 "primitive": "TEXT"
88 },
89 "name": "product",
90 "label": "Product",
91 "mandatory": false
92 },
93 {
94 "type": {
95 "typeName": "PrimitiveType",
96 "primitive": "TEXT"
97 },
98 "name": "partyIdentifier",
99 "label": "Party Identifier",
100 "mandatory": false
101 },
102 {
103 "type": {
104 "typeName": "PrimitiveType",
105 "primitive": "TEXT"
106 },
107 "name": "sourceSystem",
108 "label": "Source System",
109 "mandatory": false
110 }
111 ],
112 "validations": [
113 {
114 "name": "Cost Centre not empty for GL Account 4000",
115 "type": "MANDATORY",
116 "when": {
117 "logicalOperator": "AND",
118 "operands": [
119 {
120 "attributeName": "glAccount",
121 "condition": "inList",
122 "values": [
123 "4000"
124 ]
125 }
126 ]
127 },
128 "attributeName": "costCentre"
129 }
130 ]
131 }

Primitive Attributes

Text

1{
2"name": "company",
3"label": "Company",
4"mandatory": true,
5"type": {
6 "typeName": "PrimitiveType",
7 "primitive": "TEXT"
8 }
9}

Int

1{
2"name": "glAccount",
3"label": "GL Account",
4"mandatory": false,
5"type": {
6 "typeName": "PrimitiveType",
7 "primitive": "INT"
8 }
9}

Timestamp

1{
2"name": "timeOfAdmission",
3"label": "A timestamp of the record's admission to the organization",
4"mandatory": true,
5"type": {
6 "typeName": "PrimitiveType",
7 "primitive": "TIMESTAMP"
8 }
9}

Complex Attributes

Inline Entity

1{
2"name": "personal",
3"label": "Personal data (names, etc.)",
4"mandatory": true,
5"type": {
6 "typeName": "InlineEntityType",
7 "definition": {
8 "name": "PersonalData",
9 "description": "A personal data record",
10 "type": "DefinedEntity",
11 "primaryKeyAttributeNames": [
12 "id"
13 ],
14 "attributes": [
15 {
16 "name": "id",
17 "label": "Record ID",
18 "mandatory": true,
19 "type": {
20 "typeName": "PrimitiveType",
21 "primitive": "UUID"
22 }
23 },
24 {
25 "name": "familyName",
26 "label": "Family name",
27 "mandatory": true,
28 "type": {
29 "typeName": "PrimitiveType",
30 "primitive": "TEXT"
31 }
32 },
33 {
34 "name": "firstName",
35 "label": "First name",
36 "mandatory": true,
37 "type": {
38 "typeName": "PrimitiveType",
39 "primitive": "TEXT"
40 }
41 },
42 {
43 "name": "middleNames",
44 "label": "Middle names",
45 "mandatory": false,
46 "type": {
47 "typeName": "ListType",
48 "itemType": {
49 "typeName": "PrimitiveType",
50 "primitive": "TEXT"
51 }
52 }
53 }
54 ]
55 }
56 }
57}

List Type

1{
2"name": "children",
3"label": "List of children",
4"mandatory": false,
5"type": {
6 "typeName": "ListType",
7 "itemType": {
8 "typeName": "InlineEntityType",
9 "definition": {
10 "name": "Child",
11 "description": "Record about a child",
12 "type": "DefinedEntity",
13 "primaryKeyAttributeNames": [
14 "childId"
15 ],
16 "attributes": [
17 {
18 "name": "childId",
19 "label": "Child ID",
20 "mandatory": true,
21 "type": {
22 "typeName": "PrimitiveType",
23 "primitive": "UUID"
24 }
25 },
26 {
27 "name": "gender",
28 "label": "Gender",
29 "mandatory": true,
30 "type": {
31 "typeName": "PrimitiveType",
32 "primitive": "TEXT"
33 }
34 },
35 {
36 "name": "personal",
37 "label": "Personal data (names, etc.)",
38 "mandatory": true,
39 "type": {
40 "typeName": "InlineEntityType",
41 "definition": {
42 "name": "PersonalChildData",
43 "description": "A personal data record of a child",
44 "type": "DefinedEntity",
45 "primaryKeyAttributeNames": [
46 "id"
47 ],
48 "attributes": [
49 {
50 "name": "id",
51 "label": "ID",
52 "mandatory": true,
53 "type": {
54 "typeName": "PrimitiveType",
55 "primitive": "UUID"
56 }
57 },
58 {
59 "name": "familyName",
60 "label": "Family name",
61 "mandatory": true,
62 "type": {
63 "typeName": "PrimitiveType",
64 "primitive": "TEXT"
65 }
66 },
67 {
68 "name": "firstName",
69 "label": "First name",
70 "mandatory": true,
71 "type": {
72 "typeName": "PrimitiveType",
73 "primitive": "TEXT"
74 }
75 },
76 {
77 "name": "middleNames",
78 "label": "Middle names",
79 "mandatory": false,
80 "type": {
81 "typeName": "ListType",
82 "itemType": {
83 "typeName": "PrimitiveType",
84 "primitive": "TEXT"
85 }
86 }
87 }
88 ]
89 }
90 }
91 }
92 ]
93 }
94 }
95}
96}

Subeldger

Balance Queries section comprises of queries for balances and balance movements saved on the Balances screen.

  • type - the type of query, the available values are “balance” and “balanceMovement”
  • query - definition of the query
    • limit
    • balanceDate - the definition of the date for which the balance is calculated
      • type - type of date:
        • currentDate - the actual date on which you create the query, i.e. the current Business Date
        • previousDay - the date on the day before the Current date, determined based on the Business Date
        • previousPeriodEnd - determined based on the selected Fiscal Calendar
        • previousYearEnd - determined based on the selected Fiscal Calendar
        • specificPeriodEnd - determined based on the selected Fiscal Calendar
        • specificDate - any specific date you define
      • date - for types which requires a specific date
    • fields - name of the field or fields used in the query
    • openingDate - for balance movement queries
      • type
        • dailyBalanceMovement - you need to select the Balance date based off of the Opening Balance date will be calculated. The Balance dates available in this selection are listed above in the How to instruction for creating a Balance query.
        • periodToDate - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • periodFromTo - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • yearToDate - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • previousPeriod - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • previousYear - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • specificPeriod - you need to select the Fiscal Calendar which will be used to calculate the Balance date and Opening balance date.
        • specificDates - For Specific dates, you need to select the Dates from/to for which the query will be run.
      • date - for types which requires a specific date
      • filters - section with filter definition
        • fieldName - name of the attribute used to filter the results
        • operator - type of operator used in the filter
        • rules - rule defined for the filter
          • constraint - constraint set for the rule
          • values - value set for the rule
      • openingDate - definition of the Opening date for balance movement
      • balanceFilters - section with definition of filter using balance as attribute
        • operator - type of operator used in the filter
        • rules - rule defined for the filter
          • constraint - constraint set for the rule
          • values - value set for the rule
        • currency - currency used in the selected balance
      • openingBalanceFilter - section with definition of filter using opening balance as attribute
        • operator - type of operator used in the filter
        • rules - rule defined for the filter
          • constraint - constraint set for the rule
          • values - value set for the rule
        • currency - currency used in the selected opening balance
      • balanceMovementFilters - section with definition of filter using balance movement as attribute
        • operator - type of operator used in the filter
        • rules - rule defined for the filter
          • constraint - constraint set for the rule
          • values - value set for the rule
        • currency - currency used in the selected balance movement
  • name - name of the query
1"balanceQueries": {
2 "savedQueries": [
3 {
4 "type": "balance",
5 "query": {
6 "limit": -1,
7 "balanceDate": {
8 "type": "specificDate",
9 "date": "2055-02-03"
10 },
11 "fields": [
12 "customAccountingConfigName"
13 ]
14 },
15 "name": "TestBalance1"
16 },
17 {
18 "type": "balanceMovement",
19 "query": {
20 "limit": -1,
21 "balanceDate": {
22 "type": "currentDate"
23 },
24 "fields": [
25 "customTransactionCurrencyName"
26 ],
27 "filters": [
28 {
29 "fieldName": "customAccount",
30 "operator": "AND",
31 "rules": [
32 {
33 "constraint": "equal",
34 "values": [
35 "testLabel"
36 ]
37 }
38 ]
39 }
40 ],
41 "openingDate": {
42 "type": "daily"
43 }
44 },
45 "openingBalanceFilters": [
46 {
47 "operator": "AND",
48 "rules": [
49 {
50 "constraint": "equal",
51 "values": [
52 9
53 ]
54 }
55 ],
56 "currency": "transaction"
57 }
58 ],
59 "balanceMovementFilters": [
60 {
61 "operator": "AND",
62 "rules": [
63 {
64 "constraint": "equal",
65 "values": [
66 8
67 ]
68 }
69 ],
70 "currency": "functional"
71 }
72 ]
73 },
74 "name": "TestBalanceMovement1"

Extracts

Operating under Feature Flag If you want to use this feature, contact your System Administrator.

  • Only extract configurations that are submitted and have the Active and Inactive (they will be active in the future because the current date is earlier than the start date) statuses can be downloaded to a JSON file and then uploaded using the Configuration Data screen.
  • The functionality allows to download all extract configurations from one environment and upload them to new environments without extract configurations as well as to environments already having extract configurations, or download all extract configurations, edit some or all of them, and upload them again to the same environment. In the case of editing existing extract configurations, the only parameters allowed to be modified are:
    • Description
    • Start date and time (only if the set start date is in the future, that is, the extract configuration has not been run yet)
    • End date and time

      If you change any of not editable parameters in the already existing extract configuration, then while uploading the JSON file validation errors will be thrown and uploading will be impossible.

  • If extract configurations uploaded from the JSON file contain start dates from the past, then these dates will be automatically updated to the date when the file is being uploaded. However, if the end dates of these extract configurations are in the past at the time of uploading, then an error will be thrown informing you that you cannot upload extract configurations with end dates from the past and uploading will be impossible. In such a case, you need to modify the JSON file and set the end date to a future date and time or remove the endDate parameter (then the extract configuration will be run indefinitely).

Extract Configuration Parameters

The following parameters can be found in extract configurations in the JSON file:

  • extractConfigurationName - the name of the extract configuration that should be unique and can contain upper-case and lower-case letters, digits, spaces, periods, exclamation marks, parentheses, hyphens, and underscore characters. This parameter is mandatory.
  • description - additional information about the extract configuration. This parameter is optional.
  • extractType - the type of an exported file. The only available values are “CSV”, “JSON”, and “KAFKA” (for the integration with Microsoft Dynamics 365 and if FDS is set as uploadSpace). This parameter is mandatory.
  • d365ConfigName - the configuration name available and mandatory only if the integration with Microsoft Dynamics 365 is enabled
  • balanceQueryName - for extracts using balances as source, name of the saved balance or balance movement query
  • startDate - the date and time when the configuration starts to be active in UTC. The date should be set to a future one because when this date is already in the past during bulk upload, then it is automatically overwritten to the current date and time. This parameter is mandatory.
  • endDate - the date and time when the configuration ends to be active in UTC. When the date is set, it must be in the future (if not, an error will be thrown). This parameter is optional.
  • uploadSpace - the cloud storage to which the extract file will be uploaded. This parameter is mandatory. The only possible values are:
    • “CLOUD_STORAGE”
    • “REST_API”
    • “FDS” (set it if you want to perform data extraction into Entity for further processing using Flows)
    • “D365“ (only if the integration with Microsoft Dynamics 365 is enabled)
  • incremental - if it is set to “true”, then only data that was not previously extracted using the same extract configuration will be extracted. This parameter is optional.
  • query - request data:
    • namespace - the name of a namespace to which the selected Entity belongs. The only possible value is “fynapse“. This parameter is mandatory.
    • entity - the name of the Entity that will be extracted. The possible values are “Journal”, “JournalUnposted“, “Error”, “Balances”, and names of user-defined Entities. This parameter is mandatory.
    • fields - defines which Entity attributes will be returned and included in the extract file. When this parameter is empty, then all attributes will be returned.

      Do not type any Entity attributes in the fields parameter because this parameter is not supported via the Extraction screen, and its setting cannot be changed via GUI.

    • queryFilter - lists the sets of attributes with their settings to filter data for extraction:
      • nodes - the technical parameter to structure both all and individual nodes containing particular query attributes:
        • fieldName - the attribute name used to create a query
        • constraint - the operator used to build the query, for example, between, equal, and not equal. If the constraint is set to “dynamic”, then the following parameters should be defined for the dynamicValue parameter:
          • valueType - it should be set to “dateRange”
          • timeUnit - a period type for which the extraction will be run. The only available values are “years”, “days”, and “months”.
          • numberOfPastUnits - the number of months, years, or days for which the extraction will be performed, for example, 1.

            A maximum number for years and months is 12, and for days is 30.

          • closingDateType - specifies the point in time that sets the end date for data extraction. Data available for this end date is included in the extraction. The only available values are “currentDate”, “previousDay”, “previousPeriodEnd”, and “previousYearEnd”.
          • fiscalCalendarName - a name of a Fiscal Calendar that should be used to calculate the previous year or period end. This parameter is available when you set the closingDateType parameter to “previousPeriodEnd” or “previousYearEnd”. The Fiscal Calendar must have the periods defined.
        • values - the value for the selected operator, depending on the selected attribute and operator it can be a text or a date or it does not have to be defined
        • operator - if more than one constraint is defined for one attribute, then it informs if all or any of defined constraints must be taken into consideration. It can be set to “AND” and “OR”.
      • operator - informs if all or any of the defined query attributes must be taken into consideration. It can be set to “AND” and “OR”.
    • sourceAggregation - a list of attributes, on which the query performs aggregation. The only allowed data type is decimal. When the extract is created using the Fynapse UI, the list will contain all amount fields defined on the Journal. Each source aggregation contains the following properties:
      • field - a name of an attribute in a source Entity
      • expression - the aggregating function applied on the field. For the aggregation defined using the Fynapse UI always the “sum” is applied.
      • alias - a name of an attribute in a target Entity. For queries defined using the Fynapse UI, the alias is always the same as the source attribute.
    • resultClustering - defines how the result data will be split into separate messages (or which returned rows will be clustered into a single output data object)
      • clusteringCriteria - a list of source attributes used to split the output data into separate messages. Source attributes must be included in the fieldExtressions parameter.
      • keyAlias - not relevant for the custom aggregations, used only by the internal Fynapse processing. By default, it is set to “aggregationLineId” by the Fynapse UI.
      • valueAlias - the name of the attribute in the target Entity containing the child elements. By default, it is set to “aggregationLines” by the Fynapse UI.
      • valueElementAlias - not relevant for the custom aggregations, used only by the internal Fynapse processing. By default, it is set to “aggregationLine” by the Fynapse UI.
    • fieldExpressions - a list of attributes used for grouping data for aggregations. Each fieldExpression contains the following parameters:
      • fields - a single field from the source Entity, or a list of fields (if the expression is using multiple inputs, such as concatenation). For the queries defined using the Fynapse UI, it is always a single field, as they do not support custom expressions.
      • expression - optionally, a function applied to the source fields. For the extracts defined using the Fynapse UI, it is always set to “none”, which uses the unmodified source attributes.
      • alias - the name of the attribute in the target Entity. For the queries defined using the Fynapse UI, the alias is always the same as the source attribute.
    • partitionByEntityKey - informs that data will be grouped (partitioned) according to the defined Primary Key to return the newest record from each group on the basis of the creation time attribute. This parameter is available only for the extract configuration created for user-defined Entities.
      • primaryKeys - lists attributes defined as the Primary Key of a particular user-defined Entity. This parameter is available only for the extract configuration created for user-defined Entities.
  • kafkaTargetConfig - defines settings necessary to configure data extraction into a dedicated Entity for further processing in configured Flows when the uploadSpace is set to FDS.
    • entityName - a name of a user-defined Entity to which data will be extracted for further processing in Flows
    • entityNamespace - the name of a namespace to which the selected Entity belongs. The only possible value is “fynapse”.
    • topicType - Kafka topic type. The only possible value is:
      • “input” - this means that data will go through all processing stages, that is, deduplication, validation, enrichment, and finally processing using Flow. This topic type is the default and recommended option.
  • balanceQueryName - for extracts where data source is defined as Balances, this parameter is the name of the defined balance or balance movement query used in the extract
  • scheduler - defines settings for the scheduler which will run extract configurations according to the defined schedule:
    • type - a type of the scheduler. It can be set to:
      • FREQUENCY - the extract configuration will be run according to the set frequency, for example, yearly, daily, etc.
      • SPECIFIC_DATES - the extract configuration will be run on defined dates and time
      • DISABLED - the extract configuration will not be run automatically, it must be triggered manually via the Extraction screen
    • frequencies - specific settings for a selected frequency:
      • interval - how often the extract configuration will be triggered. Possible values are “ONCE” (for SPECIFIC_DATES), “HOURLY”, “DAILY”, “WEEKLY”, “MONTHLY”, and “YEARLY” (for FREQUENCY)
      • entries - lists all repetitions of the extract configuration execution:
        • cron - specifies time settings of a particular interval:
          • seconds
          • minutes
          • hours
          • dayOfMonth
          • month
          • dayOfWeek
            The following special values can be displayed in the above settings:
            • “*“ - means every, for example, “*” in the minutes parameter means for every minute.

              The “*“ should not be used particularly in the seconds parameter because it means that the extract configuration will be triggered every second.

            • “?” - means any and is used in the dayOfMonth and dayOfWeek parameters to denote the arbitrary value and thus ignore the parameter value. For example, if the extract configuration should be triggered on 5th of every month irrespective of what day of the week falls on that date, the “?” should be typed in dayOfWeek.
  • splitBy - defines if extracted data is split per Core Date attribute to separate extract files:
    • isSplitByAttributeEnabled - defines if splitting is enabled. The possible values are “true” and “false”.
    • attributeDescriptors - defines the list of attributes by which data can be split. The attribute used here has the “coreDate” role assigned and the name of this attribute is defined in the “name” parameter for Journal Line Definition (it can be different for various Fynapse installations). Look at a sample Journal Line Definition configuration structure with the defined “coreDate“ role:
1"journalDefinition": {
2 "active": true,
3 "effectiveFrom": "2023-04-05",
4 "fields": [
5 {
6 "label": "Custom Core Date Label",
7 "name": "customCoreDateName",
8 "type": "date",
9 "role": "coreDate"
10 },
  • chunkSize - an optional technical parameter only if the integration with Microsoft Dynamics 365 is enabled

    Do not change the value for the chunkSize parameter.

  • dimensionSetName - the name of a Dimension Set used for the aggregation of Journals and Unposted Journals
  • excludedDimensions - a list of user-defined Dimensions that should be excluded from the aggregation of Journals and Unposted Journals

Sample extract configuration structure:

1"extractConfigurations": [
2 {
3 "extractConfigurationName":"extraction_configuration_test",
4 "description":"test",
5 "startDate":"2025-01-16T12:00:00Z",
6 "endDate":"2030-01-17T22:59:00Z",
7 "extractType":"CSV",
8 "uploadSpace":"CLOUD_STORAGE",
9 "incremental":true,
10 "query":{
11 "namespace":"fynapse",
12 "entity":"Journal",
13 "queryFilter":{
14 "nodes":[
15 {
16 "nodes":[
17 {
18 "fieldName":"lines_JournalLine_coreDate",
19 "constraint":"notEqual",
20 "values":[
21 "2025-01-14"
22 ]
23 }
24 ]
25 }
26 ]
27 }
28 },
29 "scheduler":{
30 "frequencies":[
31 {
32 "interval":"HOURLY",
33 "entries":[
34 {
35 "cron":{
36 "seconds":"0",
37 "minutes":"0/30",
38 "hours":"*",
39 "dayOfMonth":"*",
40 "month":"*",
41 "dayOfWeek":"?"
42 }
43 }
44 ]
45 },
46 {
47 "interval":"DAILY",
48 "entries":[
49 {
50 "cron":{
51 "seconds":"0",
52 "minutes":"0",
53 "hours":"13",
54 "dayOfMonth":"*",
55 "month":"*",
56 "dayOfWeek":"?"
57 }
58 }
59 ]
60 }
61 ],
62 "type":"FREQUENCY"
63 },
64 "splitBy":{
65 "isSplitByAttributeEnabled":true,
66 "attributeDescriptors":[
67 "customCoreDateName"
68 ]
69 }
70 },
71 {
72 "extractConfigurationName": "extraction_configuration",
73 "description": "new_configuration",
74 "startDate": "2025-01-16T12:00:00Z",
75 "endDate": "2030-01-17T22:59:00Z",
76 "extractType": "CSV",
77 "uploadSpace": "CLOUD_STORAGE",
78 "incremental": true,
79 "query": {
80 "namespace": "fynapse",
81 "entity": "Journal",
82 "queryFilter": {
83 "nodes": [
84 {
85 "nodes": [
86 {
87 "fieldName": "lines_JournalLine_coreDate",
88 "constraint": "notEqual",
89 "values": [
90 "2025-01-14"
91 ]
92 }
93 ]
94 }
95 ]
96 }
97 },
98 "scheduler": {
99 "frequencies": [
100 {
101 "interval": "ONCE",
102 "entries": [
103 {
104 "cron": {
105 "seconds": "0",
106 "minutes": "0",
107 "hours": "14",
108 "dayOfMonth": "16",
109 "month": "JAN",
110 "dayOfWeek": "?",
111 "year": "2025"
112 }
113 }
114 ]
115 }
116 ],
117 "type": "SPECIFIC_DATES"
118 },
119 "splitBy": {
120 "isSplitByAttributeEnabled": true,
121 "attributeDescriptors": [
122 "customCoreDateName"
123 ]
124 },
125 "excludedDimensions": [
126 "product"
127 ],
128 "dimensionSetName": "Test Dimension Set"
129 ]
130 }
131 }
132]

Errors

Fynapse ensures the integrity of the system by validating the JSON file upon download. If you make changes in the screen, which cause the configuration to break and then try to download this configuration, Fynapse will inform you that you are trying to download a broken configuration. The list of errors will be added at the end of the downloaded JSON file.

1"errors": [
2 {
3 "objectWithReference": "Accounting Configuration",
4 "referencedObject": "Business Calendar",
5 "referenceId": "a82c3b54-5741-4953-b9f3-e5e7643964df"
6 },
7 {
8 "objectWithReference": "Accounting Configuration",
9 "referencedObject": "Business Calendar",
10 "referenceId": "a82c3b54-5741-4953-b9f3-e5e7643964df"
11 },
12 {
13 "objectWithReference": "Accounting Configuration",
14 "referencedObject": "Business Calendar",
15 "referenceId": "a82c3b54-5741-4953-b9f3-e5e7643964df"
16 }
17 ]

Modifying Defined Entities and Protected Entities

It is possible to edit the Entities, including Journal Line Definition Protected Entity, via the Configuration Data JSON file without loss of transactional data already in the system.

In order to change an Entity, upload a JSON file with the changes via the Configuration Data screen. If the changes are not supported by the system, a dialog will appear informing you of possible data loss and asking you for confirmation. If you choose to upload unsupported changes, all transactional data relating to the Entity with unsupported changes will be lost.

The supported changes are:

  • Adding an attribute that is not mandatory
  • Dropping an attribute that is not part of a Primary Key
  • Reordering attributes

The unsupported changes are:

  • Changing Entity temporality type
  • Changing attribute types
  • Changing the mandatory setting of an attribute
  • Changing an attribute’s Primary Key

In the event you need to perform any of the unsupported changes without any loss of data, please raise an ASD support ticket with Aptitude Software Support. Make sure that the ticket details what unsupported changes you want to make and what result you want to achieve, to allow our team to analyze all potential ramifications and propose the best solution. Please note that not all changes may be achievable without loss of data.

Configuration Data Screen

The Configuration Data screen comprises the following elements:

  • The Download button - click it to download a file containing a current Fynapse configuration
  • The Select files button - click it to select which file you want to upload
  • The Upload button - click it to upload a JSON file with a new configuration
  • The Delete button - click it to delete the entire system configuration to reconfigure the system

Note that deleting the configuration cannot be reverted.

Audit Log Screen

The Audit log screen allows you to review the activity of users on the Configuration Data screen. The information on the Audit log screen allows you to check which user uploaded or downloaded the Configuration Data JSON file, or performed a wipe of the system. You can also download the Configuration Data JSON file uploaded by another user.

The Audit log screen comprises a grid with the following information:

  • Activity - what type of activity did the given user perform
  • Result - informs whether the activity was Successful or Failed
  • Performed by - identifies the user who performed the activity
  • Started at - timestamp when the activity was started
  • Completed at - timestamp when the activity was ended
  • Actions - a list of actions available to the user. Currently, you can download the Configuration Data JSON file uploaded by another user

Tutorials

Prerequisites:

  • The file that you want to upload needs to be in the JSON format. Files in different formats will not be uploaded to Fynapse.
  • Read the Configuration Data Constraints section.

We recommend downloading a current working data configuration before uploading a new one.

  1. Go to Configuration > Bulk Operations > Configuration Data.
  2. Drag a file or click the Select files button.
  3. Click the Upload button. The system will validate the file and if:
    1. There are no conflicts in the configuration, then it will be uploaded and the current Fynapse configuration will be overwritten.
    2. There are any problems with Entities included in the configuration file, the notification about it listing all Entities in conflict or missing will be displayed. In this case, uploading such a configuration will result in data loss of all Entities and data associated with them. You will need to decide if you still want to upload the configuration or cancel uploading. If you decide to proceed with the configuration uploading, then all Entities and data associated with them will be deleted from Fynapse.
  1. Go to Configuration > Bulk Operations > Configuration Data.
  2. Click the Download button. The current data configuration will be saved to a JSON file.

Fynapse ensures the integrity of the system by validating the JSON file upon download. If you make changes in the screen, which cause the configuration to break, and then try to download this configuration, Fynapse will inform you that you are trying to download a broken configuration. The list of errors will be added at the end of the downloaded JSON file.

We recommend downloading a current working data configuration before deleting it.

  1. Go to Configuration > Bulk Operations > Configuration Data.
  2. Click the Delete button.
  3. Confirm your action by clicking the Delete button. The current data configuration will be deleted.