diff --git a/markdownpages/profit/en/app-connector-auditor-developer.md b/markdownpages/profit/en/app-connector-auditor-developer.md index cccdcc8..88db2ec 100644 --- a/markdownpages/profit/en/app-connector-auditor-developer.md +++ b/markdownpages/profit/en/app-connector-auditor-developer.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-04 index: true tags: AppConnector, Auditor, Developer, GetConnector, API, Integration title: AppConnector Auditor - Developer Report @@ -9,8 +9,8 @@ title: AppConnector Auditor - Developer Report # AppConnector Auditor - Developer Report > 📊 **This report is for developers** (partner or in-house). Are you an end user or AFAS Partner? See: -> * [AppConnector Auditor](app-connector-auditor.md) for end users and functional administrators -> * [Partner Report](app-connector-auditor-partner.md) for AFAS Partners (stricter requirements for certification) +> * [AppConnector Auditor](./app-connector-auditor) for end users and functional administrators +> * [Partner Report](./app-connector-auditor-partner) for AFAS Partners (stricter requirements for certification) --- @@ -48,109 +48,39 @@ The levels are: ## GetConnectors – Overall -### Data model - -#### `Employment` and `Employment sequence number` used interchangeably - -**Level:** Error -**Why do you see this?** -The integration uses both `Employment` and `Employment sequence number`. - -**Risk / point of attention** -With multiple or changing employments, incorrect or duplicate data arises. - -**Solution** -Consistently use `Employment` as the functional number. -A small number of tables use `Employment sequence number` in the primary key. In those cases, you can add this field additionally to use for filtering and sorting. Functionally, you still use `Employment`. - - ---- -### Performance & scalability - -#### Financial transactions without `Changed booking days` - -**Level:** Error - -**Why do you see this?** -Financial transactions are fully retrieved. - -**Risk / point of attention** -Very large datasets, poor performance, and unnecessary load. - -**Solution** -Use an additional GetConnector based on the data collection `Changed booking days`. [Read this help article](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o79118) for more information. - ---- +### Data model -#### Post-calculation without `Changed booking days post-calculation` +#### `Employment number` and `Employment sequence number` are both used. **Level:** ❌ Error -**Certification impact:** **Blocks certification** - -**Why do you see this?** -Post-calculation lines are fully retrieved. - -**Risk / point of attention** -Very large datasets, poor performance, and unnecessary load. - -**Solution** -Use an additional GetConnector based on the data collection `Changed booking days post-calculation`. [Read this help article](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619) for more information. - ---- - -## GetConnector – Individual - -### Connector structure - -#### This is a supplied Profit GetConnector. Make your own copy. - -**Level:** Error **Why do you see this?** -A standard Profit GetConnector is being used. +Your integration uses two different employment numbers interchangeably: an internal one (`Employment sequence number`) and the employment number you see in an employee's contract. **Risk / point of attention** - -* Can change without warning -* Contains too many fields -* No customer filters possible +These 2 numbers are *often* the same, but can differ. With multiple or changing employments, incorrect or duplicate data arises. These errors are very difficult to trace. **Solution** -Make your **own copy** and rename it according to: +Adjust your GetConnectors to use `Employment` everywhere and no longer use `Employment sequence number`. -``` -_ -``` +**Exception** +A small number of tables use `Employment sequence number` in the primary key. In those cases, it is allowed to use this field for filtering and sorting. Functionally, you still use `Employment`. The auditor does not yet take this into account. -Never use `Profit` or `AFAS` in the name. --- -#### This GetConnector has 1 or more fields with a period in the name. - -**Level:** Error - -**Why do you see this?** -One or more fields contain a `.` in the name. - -**Risk / point of attention** -Filtering and sorting via URL can fail because of this. - -**Solution** -Adjust the field name and remove the period. - ---- +## GetConnector – Individueel -### Data model +### Datamodel -#### This GetConnector retrieves fields from `Current data per employment relationship` +#### This GetConnector retrieves fields from `Current data per employment relationship`, but the integration uses data per employment. -**Level:** Error +**Level:** ❌ Error **Why do you see this?** -The GetConnector retrieves data from `Current data per employment relationship`, while the integration works with employments elsewhere. +This GetConnector retrieves fields from `Current data per employment relationship`, but the integration uses data per employment. **Risk / point of attention** With multiple simultaneous employments, incorrect or incomplete data is retrieved. @@ -160,39 +90,40 @@ Use `Current data per employment` or avoid current tables entirely. Consult with --- -#### This GetConnector has 1 or more unknown fields +#### This GetConnector has unknown fields. -**Level:** Error +**Level:** ❌ Error **Why do you see this?** -The GetConnector contains fields that no longer exist in the database. These return the value `(replaced)`. +This GetConnector has unknown fields. The report shows which ones. **Risk / point of attention** -The GetConnector is technically inconsistent and cannot be further extended. +Unknown fields are no longer linked to a field in the database. In the result, they give a fixed value "(replaced)". **Solution** -Remove these fields or link them again to an existing database field. +Remove the unknown fields, or link them to a field in the database. If they are custom fields, make sure they are provided as a `.fie` file and document how customers should import them. --- -#### Custom fields used +#### This GetConnector has custom fields. -**Level:** Warning +**Niveau:** ℹ️ Informatief **Why do you see this?** -The integration uses custom fields. +The integration uses custom fields. The report shows which ones. **What does this mean?** Custom fields do not exist by default in every customer environment. **Action** -Supply custom fields as a `.fie` file +If you want to use this GetConnector in another environment, these custom fields should be exported and imported into the other environment. + --- -#### Compression applied +#### This GetConnector uses compression. -**Level:** Informational +**Level:** ℹ️ Informational **Why do you see this?** The GetConnector uses compression (grouping). @@ -205,12 +136,12 @@ Use compression only consciously. If in doubt: consult with AFAS. --- -#### Fields with special format +#### This GetConnector has fields with a special format. -**Level:** Warning +**Level:** ⚠️ Warning **Why do you see this?** -One or more fields use a SQL function (e.g., date formatting). +This GetConnector has fields with a special format. These fields may not be filtered or sorted on. **Risk / point of attention** Sorting or filtering on these fields has a major performance impact. @@ -222,61 +153,49 @@ Use these fields only for presentation and never filter/sort on these fields. ### Performance -#### Cyclic reference -**Level:** Warning +#### This GetConnector lacks fields that are needed to optimally use the indexes for sorting. + +**Level:** ⚠️ Warning **Why do you see this?** -The same table appears multiple times in the join path. +Not all index fields are visible in the GetConnector. **Risk / point of attention** -Unnecessary JOINs → performance loss. +Sorting and filtering are inefficient. **Solution** -Check if the reference is functionally necessary. -If not: simplify the GetConnector. +Make index fields visible and use them in sorting and filtering. --- -#### Possible subselect +#### Unique indexes on the main table of this GetConnector. -**Level:** Warning +**Level:** ℹ️ Informational **Why do you see this?** -`SELECT` appears multiple times in the SQL definition. - -**Risk / point of attention** -Subselects can be executed per row and are expensive. +The auditor shows recommended indexes. -**Solution** -Only action needed if performance issues occur. Get advice from System Integrators. +**What can you do with it?** +Use these indexes for optimal performance. The fields in these indexes identify unique rows. Use preferably the fields of index 1, but index 2 or 3 can also be used if index 1 does not contain all necessary fields. Sort on the fields in the order of the index. --- -#### Index fields missing +#### This GetConnector retrieves data from tables more than 5 levels deep. -**Level:** Warning +**Level:** ⚠️ Warning -**Why do you see this?** -Not all index fields are visible in the GetConnector. +**Why do you see this?** +The GetConnector retrieves data from tables that are nested more than 5 levels deep. **Risk / point of attention** -Sorting and filtering are inefficient. +Deep joins can cause performance problems. **Solution** -Make index fields visible and use them in sorting and filtering. +Check if you can simplify the GetConnector by using less deeply nested tables. ---- -#### Recommended index usage -**Level:** Informational - -**Why do you see this?** -The auditor shows recommended indexes. - -**What can you do with it?** -Use these indexes for optimal performance. --- @@ -284,7 +203,7 @@ Use these indexes for optimal performance. #### The filter uses 'contains (not)', 'starts (not) with' or 'ends (not) with'. -**Level:** Error +**Level:** ❌ Error **Why do you see this?** Filtering is done with `contains`, `starts with` or `ends with`. @@ -297,73 +216,58 @@ Use equality filters (`=`, `>`, `<` etc.) on index fields. --- -#### User filter present - -**Level:** Warning - -**Why do you see this?** -The GetConnector contains a fixed filter. - -**Risk / point of attention** -The filter may not be suitable for all customers. - -**Solution** -Make filters dynamic via URL parameters or document limitations. - ---- - -## Performance & Scalability -#### Many joins +#### This GetConnector retrieves data from more than 5 different tables. -**Level:** Warning +**Level:** ⚠️ Warning -**Why do you see this?** -The GetConnector retrieves data from more than 5 tables. +**Why do you see this?** +The GetConnector retrieves data from more than 5 different tables. **Risk / point of attention** -Complex SQL with potentially poor performance. +Using many joins can cause performance problems, especially with large tables. + **Solution** -Consider splitting into multiple GetConnectors. +Only action needed if performance issues occur. In that case, create multiple GetConnectors that each use fewer tables. Get advice from System Integrators. --- -#### Deep nesting or large tables +#### This GetConnector retrieves data from a very large table. -**Level:** Warning +**Level:** ⚠️ Warning -**Why do you see this?** -Deep nesting is used or reading from very large tables. +**Why do you see this?** +The GetConnector retrieves data from one of the 10 largest tables in the database. **Risk / point of attention** -Slow queries with larger datasets. +Retrieving data from very large tables can cause performance problems. **Solution** -Minimize fields, joins, and calculations. +Ensure that your filters and sorting make optimal use of indexes. Use as few joins as possible, in other words: follow as few references to other tables as possible. Consult with AFAS if in doubt. --- ## Authorization & Privacy -#### Authorized GetConnector +#### This GetConnector is authorized. -**Level:** Informational +**Level:** ⚠️ Warning **Why do you see this?** -The GetConnector respects filter authorization. +The GetConnector is authorized. -**What can you do with it?** -If results are unexpected, the cause often lies with authorization. +**What does this mean?** +If results are unexpected, the cause often lies with authorization. The integration may not retrieve all expected data. **Action** -Document the authorizations used. +Be sure the connector user received the correct access rights. --- -#### Privacy-sensitive fields +#### This GetConnector has fields that are marked as privacy-sensitive. -**Level:** Warning +**Level:** ⚠️ Warning **Why do you see this?** Fields marked as privacy-sensitive are retrieved. @@ -374,6 +278,7 @@ Possible GDPR risk. **Solution** Only retrieve strictly necessary data + --- ## Conclusion @@ -384,4 +289,4 @@ This document is never finished. Do you see something that is incorrect, or do y *Happy coding!* ---- +--- \ No newline at end of file diff --git a/markdownpages/profit/en/app-connector-auditor-partner.md b/markdownpages/profit/en/app-connector-auditor-partner.md index ba2119e..5ce757d 100644 --- a/markdownpages/profit/en/app-connector-auditor-partner.md +++ b/markdownpages/profit/en/app-connector-auditor-partner.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-04 index: true tags: AppConnector, Auditor, Partner, Certification, GetConnector, pentest title: AppConnector Auditor - Partner Report @@ -9,8 +9,8 @@ title: AppConnector Auditor - Partner Report # AppConnector Auditor - Partner Report > 📊 **This report is for AFAS Partners**. Are you an end user or in-house developer? See: -> * [AppConnector Auditor](app-connector-auditor.md) for end users and functional administrators -> * [Developer Report](app-connector-auditor-developer.md) for developers (less strict requirements) +> * [AppConnector Auditor](./app-connector-auditor) for end users and functional administrators +> * [Developer Report](./app-connector-auditor-developer) for developers (less strict requirements) --- @@ -31,7 +31,7 @@ This report is specifically designed for **AFAS Partners** and contains the stri ## Partner data and administration -For an explanation of the **Partner data** and **Your integrations** sections shown at the top of the report, see [Partner data and integrations](./app-connector-auditor-partnergegevens). +For an explanation of the **Partner data** and **Your integrations** sections shown at the top of the report, see [Partner data and integrations](./app-connector-auditor-partnerinfo). This section contains critical information about: * Your partner status and certification @@ -56,6 +56,7 @@ Your integration is only certified as long as you meet all the following require * ✅ You send the correct IntegrationId with every call * ✅ You have a valid partner subscription * ✅ You have at least 5 customers actively using your integration +* ✅ You have at least 2 contact persons registered as "Partner/expert communication" with AFAS --- @@ -94,9 +95,32 @@ This section contains partner-specific messages about the AppConnector itself (n ## GetConnectors – Overall +### Authorization & Privacy + +#### Filter authorization is applied. + +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved or documented + +**Why do you see this?** +The integration uses filter authorization. + +**What does this mean?** +If authorizations are not properly configured, the integration gets too much or too little data. + +**Action** + +* State in your implementation document: + * Which authorization filters apply + + +--- + + + ### Data model -#### `Employment number` and `Employment sequence number` are both used +#### `Employment number` and `Employment sequence number` are both used. **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -117,7 +141,7 @@ A small number of tables use `Employment sequence number` in the primary key. In ### Performance & scalability -#### Financial transactions without `Changed booking days` +#### Financial transactions are retrieved, but `Changed booking days` is not used. **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -133,7 +157,8 @@ Use an additional GetConnector based on the data collection `Changed booking day --- -#### Post-calculation without `Changed booking days post-calculation` +#### Post-calculation is retrieved, but `Changed booking days post-calculation` is not used. + **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -153,7 +178,7 @@ Use an additional GetConnector based on the data collection `Changed booking day ### Connector structure -#### This is a supplied Profit GetConnector. Make your own copy. +#### This is a supplied Profit GetConnector. **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -199,13 +224,13 @@ Never use `Profit` or `AFAS` in the name. --- -#### This GetConnector has 1 or more fields with a period in the name. +#### This GetConnector has fields with a period in the name. **Level:** ❌ Error **Certification impact:** **Blocks certification** **Why do you see this?** -This GetConnector has 1 or more fields with a period in the name. +This GetConnector has fields with a period in the name. The report shows which ones. **Risk / point of attention** A field name containing a period can cause unexpected errors when processing your call. @@ -217,7 +242,9 @@ Adjust the relevant field names and remove the period. ### Data model -#### This GetConnector retrieves fields from Current data per employment relationship +#### This GetConnector retrieves fields from `Current data per employment relationship`, but the integration uses data per employment. + + **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -233,29 +260,31 @@ Use `Current data per employment` or avoid current tables entirely. Consult with --- -#### This GetConnector has 1 or more unknown fields +#### This GetConnector has unknown fields. **Level:** ❌ Error **Certification impact:** **Blocks certification** **Why do you see this?** -This GetConnector has 1 or more unknown fields. +This GetConnector has unknown fields. The report shows which ones. **Risk / point of attention** Unknown fields are no longer linked to a field in the database. In the result, they give a fixed value "(replaced)". **Solution** -Remove the unknown fields, or link them to a field in the database. +Remove the unknown fields, or link them to a field in the database. If they are custom fields, make sure they are provided as a `.fie` file and document how customers should import them. --- -#### Custom fields used +#### This GetConnector has custom fields. + + **Level:** ⚠️ Warning **Certification impact:** Must be resolved or documented **Why do you see this?** -The integration uses custom fields. +The integration uses custom fields. The report shows which ones. **What does this mean?** Custom fields do not exist by default in every customer environment. @@ -267,7 +296,9 @@ Custom fields do not exist by default in every customer environment. --- -#### Compression applied +#### This GetConnector uses compression. + + **Level:** ℹ️ Informational **Certification impact:** None @@ -283,10 +314,10 @@ Use compression only consciously. If in doubt: consult with AFAS. --- -#### Fields with special format +#### This GetConnector has fields with a special format. **Level:** ⚠️ Warning -**Certification impact:** Must be resolved +**Certification impact:** Must be resolved or justified **Why do you see this?** This GetConnector has fields with a special format. These fields may not be filtered or sorted on. @@ -301,7 +332,8 @@ Use these fields only for presentation and never filter/sort on these fields. ### Performance -#### Cyclic reference +#### This GetConnector has (possibly) a cyclic reference. + **Level:** ⚠️ Warning **Certification impact:** Must be resolved or justified @@ -318,7 +350,8 @@ If not: simplify the GetConnector. --- -#### Possible subselect +#### This GetConnector possibly uses a subselect. + **Level:** ⚠️ Warning **Certification impact:** Monitor performance @@ -327,15 +360,56 @@ If not: simplify the GetConnector. `SELECT` appears multiple times in the SQL definition. **Risk / point of attention** -Subselects can be executed per row and are expensive. +Subselects can be executed per row and can negatively affect performance. **Solution** Only action needed if performance issues occur. Get advice from System Integrators. +--- + + +#### This GetConnector retrieves data from more than 5 different tables. + + +**Level:** ⚠️ Warning +**Certification impact:** Monitor and optimize if needed + +**Why do you see this?** +The GetConnector retrieves data from more than 5 different tables. + +**Risk / point of attention** +Using many joins can cause performance problems, especially with large tables. + + +**Solution** +Only action needed if performance issues occur. In that case, create multiple GetConnectors that each use fewer tables. Get advice from System Integrators. + + + +--- + +#### This GetConnector retrieves data from a very large table. + + +**Level:** ⚠️ Warning +**Certification impact:** Resolve or justify + +**Why do you see this?** +The GetConnector retrieves data from one of the 10 largest tables in the database. + +**Risk / point of attention** +Retrieving data from very large tables can cause performance problems. + +**Solution** +Ensure that your filters and sorting make optimal use of indexes. Use as few joins as possible, in other words: follow as few references to other tables as possible. Consult with AFAS if in doubt. + + --- #### This GetConnector retrieves fields from a table that is also available as an alias. + + **Level:** ⚠️ Warning **Certification impact:** Monitor and optimize if needed @@ -350,7 +424,26 @@ Check if you can use the alias table instead of the longer path. This gives bett --- -#### Index fields missing +#### This GetConnector also retrieves fields from another alias. + + +**Level:** ⚠️ Warning +**Certification impact:** Monitor and optimize if needed + +**Why do you see this?** +The GetConnector retrieves fields from a table that is also available as an alias (shortcut). + +**Risk / point of attention** +Some aliases contain a 1-to-n relationship, which can cause rows from the main table to appear multiple times. The displayed indexes are then not unique. + +**Solution** +Test yourself, or consult with AFAS, whether the indexes are unique. If not: expand the sorting with additional fields so that it becomes unique. + + +--- + + +#### This GetConnector lacks fields that are needed to optimally use the indexes for sorting. **Level:** ⚠️ Warning **Certification impact:** Must be resolved @@ -366,7 +459,7 @@ Make index fields visible and use them in sorting and filtering. --- -#### Recommended index usage +#### Unique indexes on the main table of this GetConnector. **Level:** ℹ️ Informational **Certification impact:** Best practice @@ -375,13 +468,33 @@ Make index fields visible and use them in sorting and filtering. The auditor shows recommended indexes. **What can you do with it?** -Use these indexes for optimal performance. +Use these indexes for optimal performance. The fields in these indexes identify unique rows. Use preferably the fields of index 1, but index 2 or 3 can also be used if index 1 does not contain all necessary fields. Sort on the fields in the order of the index. + +--- + +#### This GetConnector retrieves data from tables more than 5 levels deep. + +**Level:** ⚠️ Warning +**Certification impact:** Resolve or justify + +**Why do you see this?** +The GetConnector retrieves data from tables that are nested more than 5 levels deep. + +**Risk / point of attention** +Deep joins can cause performance problems. + +**Solution** +Check if you can simplify the GetConnector by using less deeply nested tables. + + + --- ### Selection & filtering -#### Slow filter type used +#### The filter uses 'contains (not)', 'starts (not) with' or 'ends (not) with'. + **Level:** ❌ Error **Certification impact:** **Blocks certification** @@ -397,61 +510,45 @@ Use equality filters (`=`, `>`, `<` etc.) on index fields. --- -#### User filter present +#### This GetConnector has a user filter. **Level:** ⚠️ Warning **Certification impact:** Must be resolved or documented **Why do you see this?** -The GetConnector contains a fixed filter. +The GetConnector contains a fixed filter. **Risk / point of attention** The filter may not be suitable for all customers. **Solution** +Check if the filter is suitable for all customers. +If not: Make filters dynamic via URL parameters or document limitations. --- ## Authorization & Privacy -#### Authorized GetConnector +#### This GetConnector is authorized. -**Level:** ℹ️ Informational + +**Level:** ⚠️ Warning **Certification impact:** Document **Why do you see this?** -The GetConnector respects filter authorization. +The GetConnector is authorized. See also the [overall message](./app-connector-auditor-partner#AUT-17). -**What can you do with it?** -If results are unexpected, the cause often lies with authorization. +**What does this mean?** +If results are unexpected, the cause often lies with authorization. The integration may not retrieve all expected data. **Action** -Document the authorizations used in the implementation document. +State in your implementation document which authorization filters apply --- -#### Authorizations in implementation document - -**Level:** ⚠️ Warning -**Certification impact:** Must be resolved or documented - -**Why do you see this?** -The integration uses filter authorization. - -**Risk / point of attention** -If authorizations are not properly configured, the integration gets too much or too little data. - -**Solution** -State in your implementation document: - -* Which authorization filters apply -* How customers should configure them in their environment -* What rights the token user needs - ---- +#### This GetConnector has fields that are marked as privacy-sensitive. -#### Privacy-sensitive fields **Level:** ⚠️ Warning **Certification impact:** Must be documented and justified diff --git a/markdownpages/profit/en/app-connector-auditor-partnerinfo.md b/markdownpages/profit/en/app-connector-auditor-partnerinfo.md index 7375679..d4e24c9 100644 --- a/markdownpages/profit/en/app-connector-auditor-partnerinfo.md +++ b/markdownpages/profit/en/app-connector-auditor-partnerinfo.md @@ -1,14 +1,16 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-03 index: true tags: Partner, Administratie, Certificering, Partnergegevens -title: Partnergegevens en koppelingen +title: Partner information and integrations --- # Partner information and integrations -This chapter describes the **Partner information** and **Integrations** sections as shown at the top of the AppConnector Auditor report. This information is intended to give you as a partner insight into your administrative status at AFAS and the progress and status of your certifications. +This chapter describes the **Partner information** and **Integrations** sections as shown at the top of the AppConnector Auditor report. This information is intended to give you as a partner insight into your administrative status at AFAS and the progress and status of your certifications. + +> This data is only visible to you, in the environment(s) associated with your partner subscription. Customers cannot view this data. The data is retrieved directly from the AFAS partner administration and is separate from the technical analysis that the AppConnector Auditor performs on your integrations. --- @@ -23,22 +25,20 @@ This section shows the data that AFAS uses from your organization within the par * **You have 2 or more contacts for partner/expert communication** We use these contacts for technical questions, news, and issues regarding your integrations. - Manage these via the partner portal. + Manage these via the [customer portal](https://klant.afas.nl). -* **Your PEN test is valid** - This checkmark is green as long as the validity of your most recent PEN test has not expired. +* **Your pentest is valid** + This checkmark is green as long as the validity of your most recent pentest has not expired. -**Displayed data** +**Your data: {your name}** -* **Name** – Official company name of your organization. * **Subscription number** – The number of your partner license. This is also the first part of the `IntegrationId`. -* **Customer number** – Your customer number at AFAS. -* **Contacts for partner/expert communication** – Persons who can be contacted by AFAS. +* **Contacts for partner/expert communication** – Persons who can be contacted by AFAS about partner matters. * **Responsible person at AFAS** – Your permanent contact within AFAS. -* **PEN test status** – Green, orange, or red, depending on the result and validity. -* **End date of PEN test validity** – After this date, you formally no longer meet the partner requirements. +* **Pentest status** – Green, orange, or red, depending on the result. A Green score is valid for 3 years, an Orange score is valid for 15 months, and a Red score is valid for 6 months. This is calculated from the date mentioned in the pentest report. +* **End date of pentest validity** – After this date, you formally no longer meet the partner requirements. -> ⚠️ Has your PEN test expired or is it about to expire? Contact AFAS in time to avoid consequences for your partnership. +> ⚠️ Has your pentest expired or is it about to expire? Have a new test performed in time to avoid consequences for your partnership. --- @@ -46,24 +46,24 @@ This section shows the data that AFAS uses from your organization within the par Under the partner information, all integrations you have registered are shown separately. Each integration has its own section and its own certification process. +**Title** – `Name of the integration` as shown on the partner portal. + **Checklist per integration** -* **Your certification is complete** - This checkmark is green when all project tasks have been completed. +* **The certification is complete** + This checkmark is green if the integration is certified. If the integration is not yet certified, the outstanding project tasks that you need to complete to achieve certification are shown. * **Your integration is shown on the partner portal** - Not all integrations are shown on [https://partner.afas.nl/koppelingen](https://partner.afas.nl/koppelingen). The integration must be certified and the partner must have provided the data on [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). + Your integration is shown on [https://partner.afas.nl/koppelingen](https://partner.afas.nl/koppelingen) if it is certified. You must have provided the data on [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). **Displayed data per integration** -* **Name of the integration** – As visible on the partner portal. -* **IntegrationId** – Technical identification of the integration (`_`). +* **IntegrationId** – Technical identification of the integration (`_` or `_`). * **Project code** – AFAS project in which the certification is tracked. * **AFAS project manager** – Usually a System Integrator; may be empty for older integrations. -* **Team members** – Contacts with access to the project tasks. Missing colleagues? Add them yourself on the partner portal, and contact your AFAS project manager to give them access to the project. -* **Certification complete** – Yes/No. -* **Number of outstanding project tasks** – Only visible while certification is ongoing. -* **Deadline for certification** – Start date + 12 months. +* **Team members** – Contacts with access to the project tasks. Missing colleagues? Add them yourself on the partner portal, and contact your AFAS project manager to give them access to the project. This field may be empty for older integrations. +* **Number of outstanding tasks** – Only visible while certification is ongoing. +* **Deadline for certification** – Start date + 12 months. Only visible while certification is ongoing. * **Partner portal page** – The page where your integration is presented. * **Introduction / Description / Website** – Texts as visible on the partner portal. diff --git a/markdownpages/profit/en/news-profit6 b/markdownpages/profit/en/news-profit6 deleted file mode 100644 index e69de29..0000000 diff --git a/markdownpages/profit/en/partner-certification-steps.md b/markdownpages/profit/en/partner-certification-steps.md index 4dde8af..a6fa6f4 100644 --- a/markdownpages/profit/en/partner-certification-steps.md +++ b/markdownpages/profit/en/partner-certification-steps.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-04 index: true tags: Partner, IntegrationId, Certification, Integration, Configuration title: Certification steps for Partners @@ -62,7 +62,7 @@ Go to https://klant.afas.nl/supportplus and activate it! ### Specialization course: Connectors -Register for a course where you will learn everything about calling our API. There is a lot of focus on creating your own [GetConnectors](#supplying-getconnectors). +Register for a course where you will learn everything about calling our API. There is a lot of focus on creating your own [GetConnectors](#supply-getconnectors). This course is free for 1 colleague. Check https://klant.afas.nl/opleiding/specialisatiecursus-connector for information and dates. **Making integrations for other partners?** In that case, at least 1 colleague in your company must have completed the expert test "Integrations" with a score of at least 7. Please contact the System Integrator if this applies to you. @@ -80,9 +80,9 @@ The specific IntegrationId for your integration can be found in the task and in --- -### Suppl GetConnectors +### Supply GetConnectors -To retrieve data from Profit, you need GetConnectors. Many GetConnectors are supplied as standard in AFAS Profit, but for a certified integration you must create your own set of GetConnectors. [Read why here.](./app-connector-auditor-partner#STRUCT-27) +To retrieve data from Profit, you need GetConnectors. Many GetConnectors are supplied as standard in AFAS Profit, however for a certified integration you need to create your own set of GetConnectors. [Read why here.](./app-connector-auditor-partner#STRUCT-27) #### Determine which data you need @@ -100,7 +100,7 @@ Creating your own GetConnector is not difficult ([read this help article](https: #### Check the GetConnectors with the **AppConnector Auditor** -You make the GetConnectors available to the API by setting up an AppConnector in your own test environment, just as a customer would do. From that AppConnector, run the [**AppConnector Auditor**](./app-connector-auditor-partner) and resolve the errors found. You must resolve the warnings or be able to justify them. +You make the GetConnectors available to the API by setting up an AppConnector in your own test environment, just as a customer would do. From that AppConnector, run the [**AppConnector Auditor**](./app-connector-auditor-partner) and resolve the errors found. The warnings should be resolved or you should be able to justify them. #### We do a final check @@ -176,4 +176,4 @@ We are ready to ensure your integration runs smoothly and retrieves the right da One of the System Integrators will handle your request. We answer a short question directly; if more information is needed we will let you know and in many cases you will get a link with which you can schedule a Teams appointment. -*Our support is free during the first 12 months of the certification process, and once you are a certified partner. In other cases we charge €200 per hour.* +*Our support is free during the first 12 months of the certification process, and once you are a certified partner. In other cases we charge €200 per hour.* \ No newline at end of file diff --git a/markdownpages/profit/nl/app-connector-auditor-developer.md b/markdownpages/profit/nl/app-connector-auditor-developer.md index 899b00e..4f82375 100644 --- a/markdownpages/profit/nl/app-connector-auditor-developer.md +++ b/markdownpages/profit/nl/app-connector-auditor-developer.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-04 index: true tags: AppConnector, Auditor, Developer, GetConnector, API, Integration title: AppConnector Auditor - Ontwikkelaarsrapport @@ -9,8 +9,8 @@ title: AppConnector Auditor - Ontwikkelaarsrapport # AppConnector Auditor - Ontwikkelaarsrapport > 📊 **Dit rapport is voor ontwikkelaars** (partner of in-house). Ben je eindgebruiker of AFAS Partner? Zie: -> * [AppConnector Auditor](app-connector-auditor.md) voor eindgebruikers en functioneel beheerders -> * [Partnerrapport](app-connector-auditor-partner.md) voor AFAS Partners (striktere eisen voor certificering) +> * [AppConnector Auditor](./app-connector-auditor) voor eindgebruikers en functioneel beheerders +> * [Partnerrapport](./app-connector-auditor-partner) voor AFAS Partners (striktere eisen voor certificering) --- @@ -48,109 +48,39 @@ De niveaus zijn: ## GetConnectoren – Overkoepelend -### Datamodel - -#### Dienstverbandnummer en Volgnummer dienstverband door elkaar gebruikt - -**Niveau:** Fout -**Waarom zie je dit?** -De integratie gebruikt zowel `Dienstverband` als `Volgnummer dienstverband`. - -**Risico / aandachtspunt** -Bij meerdere of wisselende dienstverbanden ontstaan foutieve of dubbele gegevens. - -**Oplossing** -Gebruik consistent `Dienstverband` als functioneel nummer. -Een klein aantal tabellen gebruikt `Volgnummer dienstverband` in de primaire sleutel. In die gevallen kun je dit veld extra toevoegen om te gebruiken om op te filteren en te sorteren. Inhoudelijk maak je nog steeds gebruik van `Dienstverband`. - - ---- -### Performance & schaalbaarheid - -#### Financiële mutaties zonder `Gewijzigde boekingsdagen` - -**Niveau:** Fout - -**Waarom zie je dit?** -Financiële mutaties worden volledig opgehaald. - -**Risico / aandachtspunt** -Zeer grote datasets, slechte performance en onnodige belasting. - -**Oplossing** -Maak gebruik van een extra GetConnector, gebaseerd op de gegevensverzameling `Gewijzigde boekingsdagen`. [Lees dit help artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o79118) voor meer informatie. - ---- +### Datamodel -#### Nacalculatie zonder `Gewijzigde boekingsdagen nacalculatie` +#### `Dienstverbandnummer` en `Volgnummer dienstverband` worden beide gebruikt. **Niveau:** ❌ Fout -**Certificerings-impact:** **Blokkeert certificering** **Waarom zie je dit?** -Nacalculatieregels worden volledig opgehaald. +Jouw integratie gebruikt twee verschillende dienstverbandnummers door elkaar: een interne (`Volgnummer dienstverband`) en het dienstverbandnummer dat je ziet bij het contract van een medewerker. **Risico / aandachtspunt** -Zeer grote datasets, slechte performance en onnodige belasting. +Deze 2 nummers zijn *vaak* hetzelfde, maar kunnen verschillen. Bij meerdere of wisselende dienstverbanden ontstaan foutieve of dubbele gegevens. Deze fouten zijn zeer moeilijk te traceren. **Oplossing** -Maak gebruik van een extra GetConnector, gebaseerd op de gegevensverzameling `Gewijzigde boekingsdagen nacalculatie`. [Lees dit help artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619) voor meer informatie. - ---- - -## GetConnector – Individueel - -### Connectorstructuur +Pas je GetConnectoren aan zodat je overal gebruik maakt van `Dienstverband` en niet meer van `Volgnummer dienstverband`. -#### Dit is een meegeleverde Profit GetConnector. Maak hier een eigen kopie van. - -**Niveau:** Fout - -**Waarom zie je dit?** -Er wordt een standaard Profit GetConnector gebruikt. - -**Risico / aandachtspunt** +**Uitzondering** +Een klein aantal tabellen gebruikt `Volgnummer dienstverband` in de primaire sleutel. In die gevallen is het toegestaan dit veld te gebruiken om op te filteren en te sorteren. Inhoudelijk maak je nog steeds gebruik van `Dienstverband`. De auditor houdt hier nog geen rekening mee. -* Kan zonder waarschuwing wijzigen -* Bevat te veel velden -* Geen klantfilters mogelijk - -**Oplossing** -Maak een **eigen kopie** en hernoem deze volgens: - -``` -_ -``` - -Gebruik nooit `Profit` of `AFAS` in de naam. --- -#### Deze GetConnector heeft 1 of meer velden met een punt in de naam. - -**Niveau:** Fout - -**Waarom zie je dit?** -Eén of meer velden bevatten een `.` in de naam. - -**Risico / aandachtspunt** -Filtering en sortering via URL kan hierdoor falen. - -**Oplossing** -Pas de veldnaam aan en verwijder de punt. - ---- +## GetConnector – Individueel ### Datamodel -#### Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding` +#### Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding`, maar de integratie gebruikt gegevens per dienstverband. -**Niveau:** Fout +**Niveau:** ❌ Fout **Waarom zie je dit?** -De GetConnector haalt gegevens uit `Actuele gegevens per arbeidsverhouding`, terwijl de integratie elders met dienstverbanden werkt. +Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding`, maar de integratie gebruikt gegevens per dienstverband. **Risico / aandachtspunt** Bij meerdere gelijktijdige dienstverbanden worden onjuiste of onvolledige gegevens opgehaald. @@ -160,57 +90,59 @@ Gebruik `Actuele gegevens per dienstverband` of vermijd actuele tabellen volledi --- -#### Deze GetConnector heeft 1 of meer onbekende velden +#### Deze GetConnector heeft onbekende velden. -**Niveau:** Fout +**Niveau:** ❌ Fout **Waarom zie je dit?** -De GetConnector bevat velden die niet (meer) bestaan in de database. Deze leveren de waarde `(vervangen)`. +Deze GetConnector heeft onbekende velden. Het rapport toont welke dat zijn. **Risico / aandachtspunt** -De GetConnector is technisch inconsistent en kan niet verder worden uitgebreid. +Onbekende velden zijn niet meer gekoppeld aan een veld in de database. In het resultaat geven ze een vaste waarde "(vervangen)". **Oplossing** -Verwijder deze velden of koppel ze opnieuw aan een bestaand databaseveld. +Verwijder de onbekende velden, of koppel ze aan een veld in de database. Mogelijk gaat het om vrije velden die bij de integratie horen en in jouw omgeving nog ontbreken. --- -#### Vrije velden gebruikt +#### Deze GetConnector heeft vrije velden. -**Niveau:** Waarschuwing +**Niveau:** ℹ️ Informatief **Waarom zie je dit?** -De integratie maakt gebruik van vrije velden. +De integratie maakt gebruik van vrije velden. Het rapport toont welke dat zijn. **Wat betekent dit?** -Vrije velden bestaan niet standaard in elke klantomgeving. +Vrije velden zijn niet standaard in elke omgeving aanwezig. **Actie** -Lever vrije velden aan als `.fie`-bestand +Als je deze GetConnector ook in een andere omgeving wilt gebruiken, moet je deze vrije velden eerst exporteren en in de andere omgeving importeren. + --- -#### Verdichting toegepast +#### Deze GetConnector gebruikt verdichting. -**Niveau:** Informatief +**Niveau:** ℹ️ Informatief **Waarom zie je dit?** De GetConnector gebruikt verdichting (groepering). **Wat kun je ermee?** -Verdichting is geschikt voor totalen, maar niet om dubbele regels te maskeren. +Verdichting is geschikt voor totalen, maar niet om dubbele regels te maskeren. Het kan duiden op een onjuiste datamodelkeuze. Bij grote tabellen kan verdichting performanceproblemen veroorzaken. **Advies** Gebruik verdichting alleen bewust. Bij twijfel: overleg met AFAS. + --- -#### Velden met speciaal formaat +#### Deze GetConnector heeft velden met een speciaal formaat. -**Niveau:** Waarschuwing +**Niveau:** ⚠️ Waarschuwing **Waarom zie je dit?** -Een of meer velden gebruiken een SQL-functie (bijv. datumformattering). +Deze GetConnector heeft velden met een speciaal formaat. Op deze velden mag niet worden gefilterd of gesorteerd. **Risico / aandachtspunt** Sorteren of filteren op deze velden heeft grote performance-impact. @@ -222,61 +154,49 @@ Gebruik deze velden alleen voor presentatie en filter/sorteer nooit op deze veld ### Performance -#### Cyclische verwijzing -**Niveau:** Waarschuwing +#### Deze GetConnector mist velden die nodig zijn om de indexen optimaal te gebruiken voor sortering. + +**Niveau:** ⚠️ Waarschuwing **Waarom zie je dit?** -Dezelfde tabel komt meerdere keren voor in het join-pad. +Niet alle indexvelden zijn zichtbaar in de GetConnector. **Risico / aandachtspunt** -Onnodige JOINs → performanceverlies. +Sortering en filtering zijn inefficiënt. **Oplossing** -Controleer of de verwijzing functioneel nodig is. -Zo niet: vereenvoudig de GetConnector. +Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. --- -#### Mogelijke subselect +#### Unieke indexen op de hoofdtabel van deze GetConnector. -**Niveau:** Waarschuwing +**Niveau:** ℹ️ Informatief **Waarom zie je dit?** -In de SQL-definitie komt meerdere keren `SELECT` voor. - -**Risico / aandachtspunt** -Subselects kunnen per rij worden uitgevoerd en zijn duur. +De auditor toont aanbevolen indexen. -**Oplossing** -Alleen actie nodig bij performanceproblemen. Laat je adviseren door Systemintegrators. +**Wat kun je ermee?** +Gebruik deze indexen voor optimale performance. De velden in deze indexen identificeren unieke regels. Gebruik bij voorkeur de velden van index 1, maar index 2 of 3 kunnen ook gebruikt worden als index 1 niet alle benodigde velden bevat. Sorteer op de velden in de volgorde van de index. --- -#### Indexvelden ontbreken +#### Deze GetConnector haalt gegevens op uit tabellen van meer dan 5 niveaus diep. -**Niveau:** Waarschuwing +**Niveau:** ⚠️ Waarschuwing -**Waarom zie je dit?** -Niet alle indexvelden zijn zichtbaar in de GetConnector. +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit tabellen die meer dan 5 niveaus diep genest zijn. **Risico / aandachtspunt** -Sortering en filtering zijn inefficiënt. +Diepe joins kunnen performanceproblemen veroorzaken. **Oplossing** -Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. +Controleer of je de GetConnector kunt vereenvoudigen door minder diepe tabellen te gebruiken. ---- -#### Aanbevolen indexgebruik -**Niveau:** Informatief - -**Waarom zie je dit?** -De auditor toont aanbevolen indexen. - -**Wat kun je ermee?** -Gebruik deze indexen voor optimale performance. --- @@ -284,7 +204,7 @@ Gebruik deze indexen voor optimale performance. #### Het filter maakt gebruik van 'bevat (niet)', 'begint (niet) met' of 'eindigt (niet) op'. -**Niveau:** Fout +**Niveau:** ❌ Fout **Waarom zie je dit?** Er wordt gefilterd met `bevat`, `begint met` of `eindigt op`. @@ -297,73 +217,58 @@ Gebruik gelijkheidsfilters (`=`, `>`, `<` etc.) op indexvelden. --- -#### Gebruikersfilter aanwezig - -**Niveau:** Waarschuwing - -**Waarom zie je dit?** -De GetConnector bevat een vast filter. - -**Risico / aandachtspunt** -Het filter is mogelijk niet geschikt voor alle klanten. - -**Oplossing** -Maak filters dynamisch via URL-parameters of documenteer beperkingen. - ---- - -## Performance & Schaalbaarheid -#### Veel joins +#### Deze GetConnector haalt gegevens op uit meer dan 5 verschillende tabellen. -**Niveau:** Waarschuwing +**Niveau:** ⚠️ Waarschuwing -**Waarom zie je dit?** -De GetConnector haalt gegevens uit meer dan 5 tabellen. +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit meer dan 5 verschillende tabellen. **Risico / aandachtspunt** -Complexe SQL met mogelijk slechte performance. +Het gebruik van veel joins kan performanceproblemen veroorzaken, met name bij grote tabellen. + **Oplossing** -Overweeg opsplitsen in meerdere GetConnectoren. +Alleen actie nodig bij performanceproblemen. Maak in dat geval meerdere GetConnectoren aan die elk minder tabellen gebruiken. Laat je adviseren door Systemintegrators. --- -#### Diepe nesting of grote tabellen +#### Deze GetConnector haalt gegevens op uit een zeer grote tabel. -**Niveau:** Waarschuwing +**Niveau:** ⚠️ Waarschuwing -**Waarom zie je dit?** -Er wordt diep genest of uit zeer grote tabellen gelezen. +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit één van de 10 grootste tabellen uit de database. **Risico / aandachtspunt** -Langzame queries bij grotere datasets. +Gegevens ophalen uit zeer grote tabellen kan performanceproblemen veroorzaken. **Oplossing** -Minimaliseer velden, joins en berekeningen. +Zorg ervoor dat je filters en sortering optimaal gebruikmaken van indexen. Gebruik zo weinig mogelijk joins, anders gezegd: volg zo weinig mogelijk verwijzingen naar andere tabellen. Overleg bij twijfel met AFAS. --- ## Autorisatie & Privacy -#### Geautoriseerde GetConnector +#### Deze GetConnector is geautoriseerd. -**Niveau:** Informatief +**Niveau:** ⚠️ Waarschuwing **Waarom zie je dit?** -De GetConnector respecteert filterautorisatie. +De GetConnector is geautoriseerd. -**Wat kun je ermee?** -Bij onverwachte resultaten ligt de oorzaak vaak bij autorisatie. +**Wat betekent dit?** +Bij onverwachte resultaten ligt de oorzaak vaak bij autorisatie. De integratie haalt dan mogelijk niet alle verwachte data op. **Actie** -Documenteer gebruikte autorisaties. +Zorg ervoor dat de connectorgebruiker de juiste autorisaties heeft. --- -#### Privacy-gevoelige velden +#### Deze GetConnector heeft velden die zijn gemarkeerd als privacygevoelig. -**Niveau:** Waarschuwing +**Niveau:** ⚠️ Waarschuwing **Waarom zie je dit?** Er worden velden opgehaald die als privacy-gevoelig zijn gemarkeerd. @@ -374,13 +279,14 @@ Mogelijk AVG-risico. **Oplossing** Haal alleen strikt noodzakelijke gegevens op + --- ## Tot slot Deze help is bedoeld als **naslagwerk en technische specificatie**, niet als vervanging van persoonlijk overleg. -Dit document is nooit af. Zie je iets dat niet klopt, of heb je suggesties voor verbetering? Maak een pull request aan op de [GitHub-pagina van de documentatie](https://github.com/AFASSoftware/OASContent/blob/main/markdownpages/profit/nl/app-connector-auditor-partner.md). +Dit document is nooit af. Zie je iets dat niet klopt, of heb je suggesties voor verbetering? Maak een pull request aan op de [GitHub-pagina van de documentatie](https://github.com/AFASSoftware/OASContent/blob/main/markdownpages/profit/nl/app-connector-auditor-developer.md). *Happy coding!* diff --git a/markdownpages/profit/nl/app-connector-auditor-partner.md b/markdownpages/profit/nl/app-connector-auditor-partner.md index cfb2bee..7053039 100644 --- a/markdownpages/profit/nl/app-connector-auditor-partner.md +++ b/markdownpages/profit/nl/app-connector-auditor-partner.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-04 index: true tags: AppConnector, Auditor, Partner, Certificering, GetConnector, pentest title: AppConnector Auditor - Partnerrapport @@ -9,8 +9,8 @@ title: AppConnector Auditor - Partnerrapport # AppConnector Auditor - Partnerrapport > 📊 **Dit rapport is voor AFAS Partners**. Ben je eindgebruiker of in-house ontwikkelaar? Zie: -> * [AppConnector Auditor](app-connector-auditor.md) voor eindgebruikers en functioneel beheerders -> * [Ontwikkelaarsrapport](app-connector-auditor-developer.md) voor developers (minder strikte eisen) +> * [AppConnector Auditor](./app-connector-auditor) voor eindgebruikers en functioneel beheerders +> * [Ontwikkelaarsrapport](./app-connector-auditor-developer) voor developers (minder strikte eisen) --- @@ -31,7 +31,7 @@ Dit rapport is specifiek bedoeld voor **AFAS Partners** en bevat de strengste co ## Partnergegevens en administratie -Voor uitleg over de secties **Partnergegevens** en **Jouw koppelingen** die bovenaan het rapport worden getoond, zie [Partnergegevens en koppelingen](./app-connector-auditor-partnergegevens). +Voor uitleg over de secties **Partnergegevens** en **Jouw koppelingen** die bovenaan het rapport worden getoond, zie [Partnergegevens en koppelingen](./app-connector-auditor-partnerinfo). Deze sectie bevat kritieke informatie over: * Je partnerstatus en certificering @@ -56,6 +56,7 @@ Je koppeling is alleen gecertificeerd zolang je aan alle onderstaande eisen vold * ✅ Je stuurt het juiste IntegrationId mee bij elke aanroep * ✅ Je hebt een geldig partnerabonnement * ✅ Je hebt minimaal 5 klanten die je koppeling actief gebruiken +* ✅ Je hebt minimaal 2 contactpersonen als "Partner-/expertcommunicatie" geregistreerd bij AFAS --- @@ -94,9 +95,32 @@ Deze sectie bevat partner-specifieke meldingen over de AppConnector zelf (niet d ## GetConnectoren – Overkoepelend +### Autorisatie & Privacy + +#### Er wordt filterautorisatie toegepast. + + +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Noem in je implementatiedocument welke autorisatiefilters van toepassing zijn. + +**Waarom zie je dit?** +De integratie maakt gebruik van autorisatie. + +**Wat betekent dit?** +Als autorisaties niet goed zijn ingericht, krijgt de integratie te veel of te weinig gegevens. + +**Actie** +* Noem in je implementatiedocument: + * Welke autorisatiefilters van toepassing zijn + + +--- + + + ### Datamodel -#### `Dienstverbandnummer` en `Volgnummer dienstverband` worden beide gebruikt +#### `Dienstverbandnummer` en `Volgnummer dienstverband` worden beide gebruikt. **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -117,7 +141,7 @@ Een klein aantal tabellen gebruikt `Volgnummer dienstverband` in de primaire sle ### Performance & schaalbaarheid -#### Financiële mutaties zonder `Gewijzigde boekingsdagen` +#### Er worden Financiële mutaties opgehaald, maar `Gewijzigde boekingsdagen` wordt niet gebruikt. **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -133,7 +157,8 @@ Maak gebruik van een extra GetConnector, gebaseerd op de gegevensverzameling `Ge --- -#### Nacalculatie zonder `Gewijzigde boekingsdagen nacalculatie` +#### Er wordt Nacalculatie opgehaald, maar `Gewijzigde boekingsdagen nacalculatie` wordt niet gebruikt. + **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -153,7 +178,7 @@ Maak gebruik van een extra GetConnector, gebaseerd op de gegevensverzameling `Ge ### Connectorstructuur -#### Dit is een meegeleverde Profit GetConnector. Maak hier een eigen kopie van. +#### Dit is een meegeleverde Profit GetConnector. **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -180,7 +205,7 @@ Gebruik nooit `Profit` of `AFAS` in de naam; dat is voor de klant wel duidelijk. #### Deze GetConnector heeft een naam die begint met `Profit_`. **Niveau:** ❌ Fout -**Certificerings-impact:** **Blokkeert certificering\*\* +**Certificerings-impact:** **Blokkeert certificering** **Waarom zie je dit?** Een GetConnector heeft een naam die begint met `Profit_`. @@ -199,13 +224,13 @@ Gebruik nooit `Profit` of `AFAS` in de naam. --- -#### Deze GetConnector heeft 1 of meer velden met een punt in de naam. +#### Deze GetConnector heeft velden met een punt in de naam. **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** **Waarom zie je dit?** -Deze GetConnector heeft 1 of meer velden met een punt in de naam. +Deze GetConnector heeft velden met een punt in de naam. Het rapport toont welke dat zijn. **Risico / aandachtspunt** Een veldnaam die een punt bevat kan onverwachte fouten geven bij het verwerken van je aanroep. @@ -217,7 +242,9 @@ Pas de betreffende veldnamen aan en verwijder de punt. ### Datamodel -#### Deze GetConnector haalt velden uit Actuele gegevens per arbeidsverhouding +#### Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding`, maar de integratie gebruikt gegevens per dienstverband. + + **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -233,29 +260,31 @@ Gebruik `Actuele gegevens per dienstverband` of vermijd actuele tabellen volledi --- -#### Deze GetConnector heeft 1 of meer onbekende velden +#### Deze GetConnector heeft onbekende velden. **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** **Waarom zie je dit?** -Deze GetConnector heeft 1 of meer onbekende velden. +Deze GetConnector heeft onbekende velden. Het rapport toont welke dat zijn. **Risico / aandachtspunt** Onbekende velden zijn niet meer gekoppeld aan een veld in de database. In het resultaat geven ze een vaste waarde "(vervangen)". **Oplossing** -Verwijder de onbekende velden, of koppel ze aan een veld in de database. +Verwijder de onbekende velden, of koppel ze aan een veld in de database. Als het vrije velden zijn, zorg er dan voor dat ze worden aangeboden als `.fie`-bestand en documenteer hoe klanten deze importeren. --- -#### Vrije velden gebruikt +#### Deze GetConnector heeft vrije velden. + + **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Moet opgelost of gedocumenteerd worden **Waarom zie je dit?** -De integratie maakt gebruik van vrije velden. +De integratie maakt gebruik van vrije velden. Het rapport toont welke dat zijn. **Wat betekent dit?** Vrije velden bestaan niet standaard in elke klantomgeving. @@ -267,7 +296,9 @@ Vrije velden bestaan niet standaard in elke klantomgeving. --- -#### Verdichting toegepast +#### Deze GetConnector gebruikt verdichting. + + **Niveau:** ℹ️ Informatief **Certificerings-impact:** Geen @@ -283,10 +314,10 @@ Gebruik verdichting alleen bewust. Bij twijfel: overleg met AFAS. --- -#### Velden met speciaal formaat +#### Deze GetConnector heeft velden met een speciaal formaat. **Niveau:** ⚠️ Waarschuwing -**Certificerings-impact:** Moet opgelost worden +**Certificerings-impact:** Moet opgelost of onderbouwd worden **Waarom zie je dit?** Deze GetConnector heeft velden met een speciaal formaat. Op deze velden mag niet worden gefilterd of gesorteerd. @@ -301,7 +332,8 @@ Gebruik deze velden alleen voor presentatie en filter/sorteer nooit op deze veld ### Performance -#### Cyclische verwijzing +#### Deze GetConnector heeft (mogelijk) een cyclische verwijzing. + **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Moet opgelost of onderbouwd worden @@ -318,7 +350,8 @@ Zo niet: vereenvoudig de GetConnector. --- -#### Mogelijke subselect +#### Deze GetConnector gebruikt mogelijk een subselect. + **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Monitor performance @@ -327,15 +360,56 @@ Zo niet: vereenvoudig de GetConnector. In de SQL-definitie komt meerdere keren `SELECT` voor. **Risico / aandachtspunt** -Subselects kunnen per rij worden uitgevoerd en zijn duur. +Subselects kunnen per rij worden uitgevoerd en kunnen de performance negatief beïnvloeden. **Oplossing** Alleen actie nodig bij performanceproblemen. Laat je adviseren door Systemintegrators. +--- + + +#### Deze GetConnector haalt gegevens op uit meer dan 5 verschillende tabellen. + + +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Monitor en optimaliseer indien nodig + +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit meer dan 5 verschillende tabellen. + +**Risico / aandachtspunt** +Het gebruik van veel joins kan performanceproblemen veroorzaken, met name bij grote tabellen. + + +**Oplossing** +Alleen actie nodig bij performanceproblemen. Maak in dat geval meerdere GetConnectoren aan die elk minder tabellen gebruiken. Laat je adviseren door Systemintegrators. + + + +--- + +#### Deze GetConnector haalt gegevens op uit een zeer grote tabel. + + +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Oplossen of onderbouwen + +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit één van de 10 grootste tabellen uit de database. + +**Risico / aandachtspunt** +Gegevens ophalen uit zeer grote tabellen kan performanceproblemen veroorzaken. + +**Oplossing** +Zorg ervoor dat je filters en sortering optimaal gebruikmaken van indexen. Gebruik zo weinig mogelijk joins, anders gezegd: volg zo weinig mogelijk verwijzingen naar andere tabellen. Overleg bij twijfel met AFAS. + + --- #### Deze GetConnector haalt velden uit een tabel die ook als alias beschikbaar is. + + **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Monitor en optimaliseer indien nodig @@ -350,7 +424,26 @@ Controleer of je de alias-tabel kunt gebruiken in plaats van het langere pad. Di --- -#### Indexvelden ontbreken +#### Deze GetConnector haalt ook velden op vanuit een andere alias. + + +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Monitor en optimaliseer indien nodig + +**Waarom zie je dit?** +De GetConnector haalt velden op uit een tabel die ook als alias (snelkoppeling) beschikbaar is. + +**Risico / aandachtspunt** +Sommige aliassen bevatten een 1-op-n relatie, waardoor de regels uit de hoofdtabel meerdere keren kunnen voorkomen. De getoonde indexen zijn dan niet uniek. + +**Oplossing** +Test zelf, of overleg met AFAS, of de indexen uniek zijn. Zo niet: breid de sortering uit met extra velden zodat deze wel uniek wordt. + + +--- + + +#### Deze GetConnector mist velden die nodig zijn om de indexen optimaal te gebruiken voor sortering. **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Moet opgelost worden @@ -366,7 +459,7 @@ Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. --- -#### Aanbevolen indexgebruik +#### Unieke indexen op de hoofdtabel van deze GetConnector. **Niveau:** ℹ️ Informatief **Certificerings-impact:** Best practice @@ -375,13 +468,33 @@ Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. De auditor toont aanbevolen indexen. **Wat kun je ermee?** -Gebruik deze indexen voor optimale performance. +Gebruik deze indexen voor optimale performance. De velden in deze indexen identificeren unieke regels. Gebruik bij voorkeur de velden van index 1, maar index 2 of 3 kunnen ook gebruikt worden als index 1 niet alle benodigde velden bevat. Sorteer op de velden in de volgorde van de index. + +--- + +#### Deze GetConnector haalt gegevens op uit tabellen van meer dan 5 niveaus diep. + +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Oplossen of onderbouwen + +**Waarom zie je dit?** +De GetConnector haalt gegevens op uit tabellen die meer dan 5 niveaus diep genest zijn. + +**Risico / aandachtspunt** +Diepe joins kunnen performanceproblemen veroorzaken. + +**Oplossing** +Controleer of je de GetConnector kunt vereenvoudigen door minder diepe tabellen te gebruiken. + + + --- ### Selectie & filtering -#### Langzaam filtertype gebruikt +#### filter maakt gebruik van 'bevat (niet)', 'begint (niet) met' of 'eindigt (niet) op'. + **Niveau:** ❌ Fout **Certificerings-impact:** **Blokkeert certificering** @@ -397,7 +510,7 @@ Gebruik gelijkheidsfilters (`=`, `>`, `<` etc.) op indexvelden. --- -#### Gebruikersfilter aanwezig +#### Deze GetConnector heeft een gebruikersfilter. **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Moet opgelost of gedocumenteerd worden @@ -409,19 +522,22 @@ De GetConnector bevat een vast filter. Het filter is mogelijk niet geschikt voor alle klanten. **Oplossing** +Controleer of het filter voor alle klanten geschikt is. +Zo niet: Maak filters dynamisch via URL-parameters of documenteer beperkingen. --- ## Autorisatie & Privacy -#### Geautoriseerde GetConnector +#### Deze GetConnector is geautoriseerd. -**Niveau:** ℹ️ Informatief + +**Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Documenteren **Waarom zie je dit?** -De GetConnector respecteert filterautorisatie. +De GetConnector respecteert filterautorisatie. Zie ook de [overkoepelende melding](./app-connector-auditor-partner#AUT-17). **Wat kun je ermee?** Bij onverwachte resultaten ligt de oorzaak vaak bij autorisatie. @@ -431,27 +547,8 @@ Documenteer gebruikte autorisaties in het implementatiedocument. --- -#### Autorisaties in implementatiedocument - -**Niveau:** ⚠️ Waarschuwing -**Certificerings-impact:** Moet opgelost of gedocumenteerd worden - -**Waarom zie je dit?** -De integratie maakt gebruik van filterautorisatie. - -**Risico / aandachtspunt** -Als autorisaties niet goed zijn ingericht, krijgt de integratie te veel of te weinig gegevens. - -**Oplossing** -Noem in je implementatiedocument: - -* Welke autorisatiefilters van toepassing zijn -* Hoe klanten deze in hun omgeving moeten instellen -* Welke rechten de token-gebruiker nodig heeft - ---- +#### Deze GetConnector heeft velden die zijn gemarkeerd als privacygevoelig. -#### Privacy-gevoelige velden **Niveau:** ⚠️ Waarschuwing **Certificerings-impact:** Moet gedocumenteerd en onderbouwd worden diff --git a/markdownpages/profit/nl/app-connector-auditor-partnergegevens.md b/markdownpages/profit/nl/app-connector-auditor-partnerinfo.md similarity index 91% rename from markdownpages/profit/nl/app-connector-auditor-partnergegevens.md rename to markdownpages/profit/nl/app-connector-auditor-partnerinfo.md index e24a566..dc2aa9a 100644 --- a/markdownpages/profit/nl/app-connector-auditor-partnergegevens.md +++ b/markdownpages/profit/nl/app-connector-auditor-partnerinfo.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-25 +date: 2026-02-03 index: true tags: Partner, Administratie, Certificering, Partnergegevens title: Partnergegevens en koppelingen @@ -30,11 +30,9 @@ Deze sectie toont de gegevens die AFAS van jouw organisatie gebruikt binnen het * **Je pentest is geldig** Dit vinkje is groen zolang de geldigheid van je meest recente pentest niet is verlopen. -**Getoonde gegevens** +**Jouw gegevens: {jouw naam}** -* **Naam** – Officiële bedrijfsnaam van je organisatie. * **Abonnementsnummer** – Het nummer van jouw partnerlicentie. Dit is ook het eerste deel van het `IntegrationId`. -* **Debiteurnummer** – Jouw klantnummer bij AFAS. * **Contactpersonen voor partner-/expertcommunicatie** – Personen die door AFAS benaderd kunnen worden over partnerzaken. * **Verantwoordelijke bij AFAS** – Jouw vaste aanspreekpunt binnen AFAS. * **Status pentest** – Groen, oranje of rood, afhankelijk van de uitkomst. Een Groene score is 3 jaar geldig, een Oranje score is 15 maanden geldig en een Rode score is 6 maanden geldig. Dit is gerekend vanaf de datum die op het pentestrapport genoemd wordt. @@ -52,7 +50,7 @@ Onder de partnergegevens worden alle door jou aangemelde koppelingen afzonderlij **Checklist per koppeling** -* **Je certificering is afgerond** +* **De certificering is afgerond** Dit vinkje is groen als de koppeling gecertificeerd is. Is de koppeling nog niet gecertificeerd, dan worden de openstaande projecttaken getoond die je moet afronden om certificering te behalen. * **Je integratie wordt getoond op de partnerportal** @@ -64,12 +62,10 @@ Onder de partnergegevens worden alle door jou aangemelde koppelingen afzonderlij * **Projectcode** – AFAS-project waarin de certificering wordt bijgehouden. * **AFAS-projectleider** – Meestal een Systemintegrator; kan leeg zijn bij oudere koppelingen. * **Teamleden** – Contactpersonen met toegang tot de projecttaken. Missen er collega's? Voeg ze zelf toe op de partnerportal, en neem contact op met je AFAS-projectleider om ze toegang te geven tot het project. Dit veld kan leeg zijn bij oudere koppelingen. -* **Certificering afgerond** – Ja/Nee. -* **Aantal openstaande projecttaken** – Alleen zichtbaar zolang de certificering loopt. +* **Aantal openstaande taken** – Alleen zichtbaar zolang de certificering loopt. * **Deadline voor certificering** – Startdatum + 12 maanden. Alleen zichtbaar zolang de certificering loopt. * **Partnerportal-pagina** – De pagina waarop je koppeling wordt gepresenteerd. * **Introductie / Beschrijving / Website** – Teksten zoals zichtbaar op de partnerportal. -* **Koppeling zichtbaar op de partnerportal** – Nee. Alleen zichtbaar als je de gegevens nog niet hebt aangeleverd. > ⏳ Dreig je de deadline voor certificering niet te halen? Neem dan tijdig contact op met je AFAS-projectleider. diff --git a/markdownpages/profit/nl/partner-certification-steps.md b/markdownpages/profit/nl/partner-certification-steps.md index de4b3c2..37a56b9 100644 --- a/markdownpages/profit/nl/partner-certification-steps.md +++ b/markdownpages/profit/nl/partner-certification-steps.md @@ -1,6 +1,6 @@ --- author: Eric Zwaal -date: 2026-01-29 +date: 2026-02-03 index: true tags: Partner, IntegrationId, Certification, Integration, Configuration title: Certificeringsstappen voor partners @@ -19,7 +19,7 @@ Welkom bij het certificeringstraject voor partners! In dit document nemen we je ### Security check -Veiligheid voor alles! Een pentest is een absoluut onmisbaar onderdeel van de certficering. Bij aanvang van het certificeringstraject moet er een pentest gedaan zijn, of er moet een concrete datum ingepland zijn. Zorg er bij voorkeur voor dat de pentest wordt uitgevoerd door een [CCV-erkende partij](https://hetccv.nl/certificaat-schema/pentesten). +Veiligheid voor alles! Een pentest is een absoluut onmisbaar onderdeel van de certificering. Bij aanvang van het certificeringstraject moet er een pentest gedaan zijn, of er moet een concrete datum ingepland zijn. Zorg er bij voorkeur voor dat de pentest wordt uitgevoerd door een [CCV-erkende partij](https://hetccv.nl/certificaat-schema/pentesten). Vragen hierover? Kijk op https://partner.afas.nl/portal-landingspagina/faq#Security. In plaats van een pentest kun je ook een Security Quickscan laten uitvoeren door Defion. [In dit artikel lees je daar meer over](https://partner.afas.nl/portal-partnerportal/security-quickscan).