diff --git a/markdownpages/profit/en/app-connector-auditor-developer.md b/markdownpages/profit/en/app-connector-auditor-developer.md new file mode 100644 index 0000000..cccdcc8 --- /dev/null +++ b/markdownpages/profit/en/app-connector-auditor-developer.md @@ -0,0 +1,387 @@ +--- +author: Eric Zwaal +date: 2026-01-25 +index: true +tags: AppConnector, Auditor, Developer, GetConnector, API, Integration +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) + +--- + +## Introduction + +This documentation helps developers interpret and resolve messages from the AppConnector Auditor. Whether you're integrating as a partner or building a connection as an in-house developer: here you'll find technical explanations and concrete solutions. + +**Target audience:** Professional developers with API knowledge and knowledge of AFAS Profit. + +--- + +## Structure of this help + +* The messages are **grouped by topic**, as in the report. +* **Each message has its own section with a fixed anchor**, so the report can link directly here. +* For each message we explain: + + * why the message appears; + * what the risk or point of attention is; + * how to resolve or use the error, warning, or information. + +The levels are: + +* **❌ Error** – must be resolved +* **⚠️ Warning** – resolve or justify +* **ℹ️ Informational** – explanation and awareness + +--- + +## AppConnector + + + +--- + +## 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. + +--- + +#### Post-calculation without `Changed booking days post-calculation` + +**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. + +**Risk / point of attention** + +* Can change without warning +* Contains too many fields +* No customer filters possible + +**Solution** +Make your **own copy** and rename it according to: + +``` +_ +``` + +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. + +--- + +### Data model + +#### This GetConnector retrieves fields from `Current data per employment relationship` + +**Level:** Error + +**Why do you see this?** +The GetConnector retrieves data from `Current data per employment relationship`, while the integration works with employments elsewhere. + +**Risk / point of attention** +With multiple simultaneous employments, incorrect or incomplete data is retrieved. + +**Solution** +Use `Current data per employment` or avoid current tables entirely. Consult with System Integrators if in doubt. + +--- + +#### This GetConnector has 1 or more unknown fields + +**Level:** Error + +**Why do you see this?** +The GetConnector contains fields that no longer exist in the database. These return the value `(replaced)`. + +**Risk / point of attention** +The GetConnector is technically inconsistent and cannot be further extended. + +**Solution** +Remove these fields or link them again to an existing database field. + +--- + +#### Custom fields used + +**Level:** Warning + +**Why do you see this?** +The integration uses custom fields. + +**What does this mean?** +Custom fields do not exist by default in every customer environment. + +**Action** +Supply custom fields as a `.fie` file + +--- + +#### Compression applied + +**Level:** Informational + +**Why do you see this?** +The GetConnector uses compression (grouping). + +**What can you do with it?** +Compression is suitable for totals, but not for masking duplicate rows. + +**Advice** +Use compression only consciously. If in doubt: consult with AFAS. + +--- + +#### Fields with special format + +**Level:** Warning + +**Why do you see this?** +One or more fields use a SQL function (e.g., date formatting). + +**Risk / point of attention** +Sorting or filtering on these fields has a major performance impact. + +**Solution** +Use these fields only for presentation and never filter/sort on these fields. + +--- + +### Performance + +#### Cyclic reference + +**Level:** Warning + +**Why do you see this?** +The same table appears multiple times in the join path. + +**Risk / point of attention** +Unnecessary JOINs → performance loss. + +**Solution** +Check if the reference is functionally necessary. +If not: simplify the GetConnector. + +--- + +#### Possible subselect + +**Level:** Warning + +**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. + +**Solution** +Only action needed if performance issues occur. Get advice from System Integrators. + +--- + +#### Index fields missing + +**Level:** Warning + +**Why do you see this?** +Not all index fields are visible in the GetConnector. + +**Risk / point of attention** +Sorting and filtering are inefficient. + +**Solution** +Make index fields visible and use them in sorting and filtering. + +--- + +#### 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. + +--- + +### Selection & filtering + +#### The filter uses 'contains (not)', 'starts (not) with' or 'ends (not) with'. + +**Level:** Error + +**Why do you see this?** +Filtering is done with `contains`, `starts with` or `ends with`. + +**Risk / point of attention** +Indexes are not used → >100× slower. + +**Solution** +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 + +**Level:** Warning + +**Why do you see this?** +The GetConnector retrieves data from more than 5 tables. + +**Risk / point of attention** +Complex SQL with potentially poor performance. + +**Solution** +Consider splitting into multiple GetConnectors. + +--- + +#### Deep nesting or large tables + +**Level:** Warning + +**Why do you see this?** +Deep nesting is used or reading from very large tables. + +**Risk / point of attention** +Slow queries with larger datasets. + +**Solution** +Minimize fields, joins, and calculations. + +--- + +## Authorization & Privacy + +#### Authorized GetConnector + +**Level:** Informational + +**Why do you see this?** +The GetConnector respects filter authorization. + +**What can you do with it?** +If results are unexpected, the cause often lies with authorization. + +**Action** +Document the authorizations used. + +--- + +#### Privacy-sensitive fields + +**Level:** Warning + +**Why do you see this?** +Fields marked as privacy-sensitive are retrieved. + +**Risk / point of attention** +Possible GDPR risk. + +**Solution** +Only retrieve strictly necessary data + +--- + +## Conclusion + +This help is intended as a **reference work and technical specification**, not as a replacement for personal consultation. + +This document is never finished. Do you see something that is incorrect, or do you have suggestions for improvement? Make a pull request on the [GitHub page of the documentation](https://github.com/AFASSoftware/OASContent/blob/main/markdownpages/profit/en/app-connector-auditor-developer.md). + +*Happy coding!* + +--- diff --git a/markdownpages/profit/en/app-connector-auditor-partner.md b/markdownpages/profit/en/app-connector-auditor-partner.md index 8d6ec1f..ba2119e 100644 --- a/markdownpages/profit/en/app-connector-auditor-partner.md +++ b/markdownpages/profit/en/app-connector-auditor-partner.md @@ -1,313 +1,483 @@ --- author: Eric Zwaal -date: 2025-11-11 +date: 2026-01-25 index: true -tags: Partner, IntegrationId, GetConnector, UpdateConnector, Certification -title: AppConnector Auditor for Partners +tags: AppConnector, Auditor, Partner, Certification, GetConnector, pentest +title: AppConnector Auditor - Partner Report --- -*this file is an AI-translated version of the [Dutch document](../nl/app-connector-auditor-afas) and may contain errors.* +# AppConnector Auditor - Partner Report -## Introduction +> 📊 **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) -Since Profit 5 (autumn 2024), we have the AppConnector Auditor: a great tool to quickly gain insight into an AppConnector. For you as a partner, it's ideal to see to what extent your integration meets the requirements and best practices. In the future, we will use the auditor to give your integration a rating. So make sure you are already well aware of what's coming! +--- + +## Introduction for partners + +This report is specifically designed for **AFAS Partners** and contains the strictest checks. Messages in this report are directly linked to your **certification status**. + +### Important differences with the developer report + +* **Errors are blocking:** Red messages ❌ block your certification +* **Stricter requirements:** More checks and higher quality standards +* **Certification impact:** Every message affects your partner status +* **Deadlines:** Hard deadlines apply for some messages + +> During the certification process, there is intensive contact with AFAS System Integrators. If you have doubts about a message or cannot resolve it independently, always contact us. + +--- + +## 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). + +This section contains critical information about: +* Your partner status and certification +* Pentest validity and expiry dates +* Contact persons and project managers +* Outstanding project tasks and deadlines + +⚠️ **Note:** Expired pentests or exceeded deadlines directly affect the certification of your integration. + +--- + +## Partner-specific requirements + +### Certification criteria + +Your integration is only certified as long as you meet all the following requirements: + +* ✅ All red messages (errors) are resolved +* ✅ Orange messages (warnings) are resolved or justified +* ✅ Pentest is valid (expiry date depends on score) +* ✅ All project tasks are completed +* ✅ You send the correct IntegrationId with every call +* ✅ You have a valid partner subscription +* ✅ You have at least 5 customers actively using your integration + +--- + +## Structure of this help + +* The messages are **grouped by topic**, as in the report +* From the report, each message links directly here +* For each message we explain: + * Why the message appears + * What the risk or point of attention is + * **Certification impact** + * How to resolve the message (technical and concrete) -In a new version of Profit, checks may be added, changed, or removed. This will always be mentioned in the technical release notes at [https://docs.afas.help/profit](https://docs.afas.help/profit). So check with every new version of Profit whether your integration needs any adjustments. +### Severity levels for partners -## What do you need +* **❌ Error** – Blocks certification. Must be resolved. +* **⚠️ Warning** – Must be resolved or justified in consultation with AFAS. +* **ℹ️ Informational** – No action required, but document if relevant. -- AFAS Environment -- The environment must be part of a partner license -- An AppConnector set up as you would for a customer -- The AppConnector must be of the type "Maintained by customer" -- The correct permissions: - - `Authorization tool > Authorization > General > Management > App connector > Actions > AppConnector auditor` +--- + +## AppConnector -## Using the auditor +This section contains partner-specific messages about the AppConnector itself (not the GetConnectors). -1. In the menu, go to `General > Management > App connector` -2. Open the properties of the AppConnector you want to analyze -3. Click on `Actions` next to the row of tabs on the left -4. Click on the action `Auditor (for partners)` -5. After a few seconds, the auditor is ready -6. Choose how you want to save the file. PDF works well, HTML is faster. +**Number per level** – A quick overview of the number of messages per severity level -## Explanation of the analysis +**Number per category** – Overview of the number of messages per category (e.g. Authorization, Performance, Data model) -What you see in the Auditor naturally depends on the AppConnector. In this section, I cover which messages you might see and what you can do with them. Because translation is applied, text may look slightly different for you. The order may also vary. +**Points of attention for the implementation document** – List of matters you must document in the implementation document for certification. These are 1 or more of the following topics: +* State which authorization filters apply +* State which privacy-sensitive fields are exchanged +* Provide the free fields as a .fie file and describe how they should be imported -### Your data +--- -This section shows some data that we at AFAS have about you. A short checklist shows if any data is missing. +## GetConnectors – Overall -- [ ] **Your data at AFAS is complete**: You are known as a partner and have an active subscription. -- [ ] **You have 2 or more contacts for partner/expert communication**: These contacts are approached if there are questions, issues, or news about your integration. -- [ ] **Your PEN test is valid**: This checkmark is on as long as your PEN test is valid. +### Data model -Table with your data +#### `Employment number` and `Employment sequence number` are both used -- **Name**: The name of your company. Since invoices are also sent here, it is important that this is your official company name. -- **Subscription number**: The number of the subscription at AFAS under which your partner license falls. This is also the first part of the IntegrationId you provide. -- **Customer number**: Your customer number at AFAS. -- **Contacts for partner/expert communication**: These contacts are approached if there are questions, issues, or news about your integration. These can be technical questions or questions about your partnership. You can add or remove contacts in the [customer portal](https://klant.afas.nl) under `My data > Organization data > Contacts`. -- **AFAS contact person**: Your first point of contact for questions not about a specific integration. -- **PEN test status**: If you have shown the results of a PEN test, we give it a score; you see that here. If you have a PEN test or Quickscan performed by Computest, they determine the score based on "risk for AFAS". A Green score is valid for 3 years, an Orange score for 15 months, and a Red score for 6 months. This is calculated from the date on the PEN test report. -- **PEN test validity end date**: This is the date of the last PEN test, increased by the validity period (see above). After this date, you formally no longer qualify as a partner and the AFAS notice period (12 months) will start. After the notice period, AFAS has the right to unilaterally terminate the partner contract. +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -#### Your integrations +**Why do you see this?** +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. -You can have multiple certified integrations with AFAS. These are shown separately on the partner portal and are also certified separately. +**Risk / point of attention** +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. -#### "Name of the integration" +**Solution** +Adjust your GetConnectors to use `Employment` everywhere and no longer use `Employment sequence number`. -This section shows data for this specific integration. If you have multiple integrations with AFAS, this section is shown multiple times. -The "Name of the integration" is as visible on the [partner portal](https://partner.afas.nl/koppelingen). You can adjust this at [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). +**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. -- [ ] **Your certification is complete** -- [ ] **Your integration is shown at [https://partner.afas.nl/koppelingen](https://partner.afas.nl/koppelingen)** +--- -Table with data about your integration +### Performance & scalability -- **IntegrationId**: A technical identifier for this integration. [Read more](https://docs.afas.help/profit/nl/integrationid). -- **Project code**: For each integration, we have created a project. If you became a partner after March 2023, this project also contains your project tasks. -- **Article code**: Number of the article with which you are visible on the partner site. -- **AFAS project manager**: Your contact person at AFAS for this integration. This will usually be a SystemIntegrator. -This field is empty for integrations that have existed for a longer time. -- **Team members**: The first 5 contacts who have access to the project tasks. -Sorted alphabetically. -- **Certification complete**: "Yes" if there are no outstanding project tasks. Otherwise "No". -- **Number of outstanding project tasks**: Team members (see above) can view these tasks at [https://partner.afas.nl/product-partner-portal](https://partner.afas.nl/product-partner-portal). -Only visible if certification is not yet complete. -[Explanation about the steps is now also available in English on our Docs!](./partner-certification-steps) -- **Certification deadline**: The latest date by which all project tasks must be completed, calculated as "Certification start date + 12 months". If there are still tasks open after this date, AFAS will contact you for a final conversation. If you do not manage to complete all tasks, the partner contract will be terminated. -Only visible if certification is not yet complete. -If you are not going to make it? Please [contact us](#contact) in time. -- **Partner portal page**: The page where your integration is visible. You can adjust the text and logo yourself at [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). The next 4 lines show the details of that page: -- **Introduction**: The introduction. Pipeline characters (|) are replaced by a dash (-). -- **Description**: The description, truncated at 100 characters or the first pipeline character (|). -- **Website**: The website -- **Visible in**: The industries in which your integration is shown. The sorting of integrations within an industry is determined by the number of customers in that industry. -- **Integration visible on the partner portal**: "No" if your integration is not shown. This is usually because the **Website** field is not filled in. -Only visible if your integration is not yet visible. +#### Financial transactions without `Changed booking days` -### App Connector "Name" +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -#### Checklist for this AppConnector +**Why do you see this?** +Financial transactions are retrieved, but `Changed booking days` is not used. -Three checklists give you an instant overview of the status of your integration. A checkmark is removed if one or more GetConnectors have a relevant point of attention. Detailed explanations of the points in these checklists can be found with the relevant points per GetConnector. +**Risk / point of attention** +Very large datasets, poor performance, and unnecessary load. -##### Required (Essential) +**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. -All points in this section must be checked. In principle, you have a **good integration** if all points are checked, but this is not conclusive. Even if all points are checked, AFAS may still require you to make adjustments. +--- -> If a customer runs the auditor in their own environment, they will also see this checklist. +#### Post-calculation without `Changed booking days post-calculation` -*Do you believe a checkmark is incorrectly unchecked? Then [contact](#contact) the SystemIntegrators. We are working on options to record deviations for a specific integration. And maybe there is a good reason why the checkmark is off.* +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -- [ ] A custom set of GetConnectors is used: Do not use supplied GetConnectors. -- [ ] All GetConnectors have a valid name: Use a clearly recognizable, unique name for a GetConnector. -- [ ] All GetConnector fields have a valid name: A dot in the name of a field is not allowed. -- [ ] Only known fields are present: Keep your GetConnectors clean and up-to-date. -- [ ] Multiple employments are processed correctly: Also checked if you do not do anything with HRM. -- [ ] Financial mutations are processed correctly: Also checked if you do not do anything with financial mutations. -- [ ] Post-calculation is processed correctly: Also checked if you do not do anything with post-calculation. -- [ ] Filters are set correctly: Poor filters can delay a call by a factor of 100. +**Why do you see this?** +Post-calculation lines are fully retrieved. -##### Recommended (Desirable) +**Risk / point of attention** +Very large datasets, poor performance, and unnecessary load. -This section is a bit less black and white, because there may be a good reason not to meet the checks. Is that the case for you? [Let's talk!](#contact) +**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. -A customer does not see this checklist and will therefore not ask questions about it. +--- -- [ ] All index fields are present in the GetConnectors: This check looks at the *Primary key* of the main table. -- [ ] All index fields are visible, so they can be sorted and filtered. +## GetConnector – Individual -##### Best practice (Optional, but recommended) +### Connector structure -Informative. Check if it matches your expectations. +#### This is a supplied Profit GetConnector. Make your own copy. -A customer does not see this checklist and will therefore not ask questions about it. +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -- [ ] No free fields are present -- [ ] No fields with a special format are present +**Why do you see this?** +In a certified integration, you must use your own set of GetConnectors. You may not use supplied Profit GetConnectors. -##### Possible performance optimizations +**Risk / point of attention** +* They are maintained by AFAS and can be changed without warning +* They probably don't contain exactly the fields you need +* An end user cannot set filters + +**Solution** +Make a copy of this GetConnector. Name your GetConnector according to: + +``` +_ +``` + +Never use `Profit` or `AFAS` in the name; that is clear to the customer anyway. + +--- -A good call to a good GetConnector should be ready within 1 second. Are you going to work on the points below? Don't make it too difficult for yourself and [schedule an appointment](#contact). +#### This GetConnector has a name that starts with `Profit_`. -- [ ] One or more of the 10 largest tables in the environment is queried: Only if there are more than 1,000,000 rows in that table. -- [ ] There are GetConnectors with more than 10 joins: This often indicates redundant data. If this GetConnector performs poorly, consider splitting it into multiple GetConnectors. -- [ ] There are GetConnectors that retrieve data more than 5 levels deep: If this GetConnector performs poorly, consider splitting it into multiple GetConnectors. +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -#### Checklist for points you must address in your implementation document +**Why do you see this?** +A GetConnector has a name that starts with `Profit_`. -It is important for the customer to be informed about these points. Each check is only visible if it applies to your integration. +**Risk / point of attention** +The name can conflict with future supplied GetConnectors from AFAS. -- [ ] Offer the free fields as a .fie file and describe how they should be imported -- [ ] State which authorization filters apply -- [ ] State which privacy-sensitive fields are exchanged +**Solution** +Name your GetConnector according to: -### UpdateConnectors +``` +_ +``` -This section provides a list of UpdateConnectors that are available to be called. +Never use `Profit` or `AFAS` in the name. -### Other Connectors +--- -This section provides a list of other Connectors that are available to be called. Think of connectors for retrieving attachments. +#### This GetConnector has 1 or more fields with a period in the name. -### GetConnectors +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -This is the most important section. First, messages are given that relate to the interaction between multiple GetConnectors. Then, each available GetConnector is shown individually. +**Why do you see this?** +This GetConnector has 1 or more fields with a period in the name. -#### Unknown fields are used. In the GetConnector, these are given a fixed value "(replaced)". +**Risk / point of attention** +A field name containing a period can cause unexpected errors when processing your call. -Fields are used that are not available in your environment. Usually, these are free fields that are no longer present. There are two possible solutions: -1. Remove the reference from the GetConnector -2. Import the free field. Then adjust the GetConnector so it refers to the correct field again. +**Solution** +Adjust the relevant field names and remove the period. -#### Free fields are used. +--- -Make sure you also provide these and address them in your implementation document. [You can export free fields from your AFAS test environment](https://help.afas.nl/help/NL/SE/App_UDF_ExpImp.htm) and offer them as downloadable files, together with the GetConnectors. +### Data model -#### The following authorizations are applied—be sure to mention this in your implementation document. +#### This GetConnector retrieves fields from Current data per employment relationship -Many GetConnectors only show data that has been allowed by the end user in the authorization filters. By stating in your implementation document which filters apply to your integration, the AFAS administrator can set everything up properly. -This is crucial for the proper functioning of the integration! +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -#### Both EnSe and DvSn are used. +**Why do you see this?** +This GetConnector retrieves fields from `Current data per employment relationship`, but the integration uses data per employment. -In short: AFAS Profit has two different numbers that indicate employment. If you mix these up, you will sooner or later encounter hard-to-trace errors. [Therefore, read this article carefully](./howto-bi#employees-and-employment). Don't hesitate to discuss this during a meeting with a SystemIntegrator. +**Risk / point of attention** +With multiple simultaneous employments, incorrect or incomplete data is retrieved. These errors are very difficult to trace. -#### Financial mutations are retrieved, but **Changed booking days** is not used. +**Solution** +Use `Current data per employment` or avoid current tables entirely. Consult with System Integrators if in doubt. -Do you retrieve many financial mutations? Then also use the GetConnector `Changed booking days`. [Read this article carefully](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o79118). +--- -You may also be interested in retrieving deleted mutations. [Read this article for that](https://help.afas.nl/help/NL/SE/App_Cnnct_Deleted_Data.htm#o124753). +#### This GetConnector has 1 or more unknown fields -#### Post-calculation is retrieved, but **Changed booking days post-calculation** is not used. +**Level:** ❌ Error +**Certification impact:** **Blocks certification** -Do you retrieve many post-calculation lines? Then also use the GetConnector `Changed booking days post-calculation`. [Read this article carefully](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619). +**Why do you see this?** +This GetConnector has 1 or more unknown fields. -You may also be interested in retrieving deleted post-calculation. [Read this article for that](https://help.afas.nl/help/NL/SE/App_Cnnct_Deleted_Data.htm#o124754). +**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)". -#### Below are the authorizations that apply and how the permissions are granted in your environment. +**Solution** +Remove the unknown fields, or link them to a field in the database. -Visible only in the customer version of the auditor. -This section gives the AFAS administrator insight into the setup of the authorization that affects your integration. Each customer will have set this up differently. +--- -### GetConnectors: Messages per GetConnector +#### Custom fields used -#### Based on data collection "name" +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved or documented -Informative. +**Why do you see this?** +The integration uses custom fields. -#### Number of fields, Recommended take +**What does this mean?** +Custom fields do not exist by default in every customer environment. -Informative. The recommended `take` is based on best practices and calculated as 150,000 / [Number of fields]. -The `take` determines how many rows you retrieve per call. If you retrieve too many rows at once, it can cause memory issues on our server. This burdens you, the customer, but also other customers on the same shared resources. By sticking to the recommended `take`, calls can be handled smoothly. In fact, it's not about the number of rows, but about the total (uncompressed) size of the data you retrieve. +**Action** -#### This is a supplied Profit GetConnector. Make your own copy. +* Supply custom fields as a `.fie` file +* Describe in the implementation document how customers should import them -*Checklist*: [Required](#required-essential), A custom set of GetConnectors is used +--- -Always create your own set of GetConnectors for each integration. -It is tempting to use the standard Profit GetConnectors, but the disadvantages outweigh the benefits: -- They contain fields you don't use, -- You can't modify them, so if you miss a field, you still have to create your own GetConnector, -- No filter can be applied. You can still pass a filter in the URL, but the AFAS administrator cannot restrict specific data, -- You cannot apply *versioning*. +#### Compression applied -#### Invalid name. This GetConnector has a name that starts with "Profit_". +**Level:** ℹ️ Informational +**Certification impact:** None -*Checklist*: [Required](#required-essential), All GetConnectors have a valid name +**Why do you see this?** +The GetConnector uses compression (grouping). -Preferably give your GetConnectors a name that starts with your company name or the name of the app you are connecting. This prevents conflicts if a customer has multiple integrations. +**What can you do with it?** +Compression is suitable for totals, but not for masking duplicate rows. -#### This GetConnector has one or more fields with a dot in the name. +**Advice** +Use compression only consciously. If in doubt: consult with AFAS. -*Checklist*: [Required](#required-essential), All GetConnectors have a valid name +--- -This can cause problems if you want to filter or sort on these fields in the URL. Adjust the name so there is no dot in it. +#### Fields with special format -#### This GetConnector has one or more unknown fields. +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved -*Checklist*: [Required](#required-essential), Only known fields are present +**Why do you see this?** +This GetConnector has fields with a special format. These fields may not be filtered or sorted on. -See [above](#unknown-fields-are-used-in-the-getconnector-these-are-given-a-fixed-value-replaced). +**Risk / point of attention** +Sorting or filtering on these fields has a major performance impact. -#### The integration uses data per employment, but this GetConnector retrieves fields from Current data per employment relationship. +**Solution** +Use these fields only for presentation and never filter/sort on these fields. -*Checklist*: [Required](#required-essential), Multiple employments are processed correctly +--- -Current data per employment relationship only shows data from the main employment. Since your integration retrieves data per employment elsewhere, this GetConnector may show incorrect data. This can cause hard-to-trace errors. [Therefore, read this article carefully](./howto-bi#employees-and-employment). Don't hesitate to [consult with a SystemIntegrator](#contact). +### Performance -#### This GetConnector retrieves fields from a table with data per employment, but nowhere in the integration is Employment number retrieved. +#### Cyclic reference -*Checklist*: [Required](#required-essential), Multiple employments are processed correctly +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved or justified -If an employee has multiple employments, this can result in duplicate rows. [Read this article carefully](./howto-bi#employees-and-employment) for more information about multiple employments. Feel free to schedule a consultation with a SystemIntegrator. +**Why do you see this?** +The same table appears multiple times in the join path. -#### Filters +**Risk / point of attention** +Unnecessary JOINs → performance loss. -*Checklist*: [Required](#required-essential), Filters are set correctly +**Solution** +Check if the reference is functionally necessary. +If not: simplify the GetConnector. -This section shows the filters stored in the GetConnector. Check whether they apply to all customers. If not, pass a filter in the URL when calling. Or pay attention to it in your implementation document. Because not all GetConnectors respect the filter authorization in the customer environment, it is often necessary for the customer to also make adjustments to the filter themselves. +--- -#### Slow filter +#### Possible subselect -*Checklist*: [Required](#required-essential), Filters are set correctly +**Level:** ⚠️ Warning +**Certification impact:** Monitor performance -This GetConnector has a filter that performs poorly. In a certified integration, this is not allowed; it is not unthinkable that such a filter makes a GetConnector more than 100x slower. +**Why do you see this?** +`SELECT` appears multiple times in the SQL definition. -#### Indexes +**Risk / point of attention** +Subselects can be executed per row and are expensive. -*Checklist*: [Recommended](#recommended-desirable), All index fields are present in the GetConnectors -*Checklist*: [Recommended](#recommended-desirable), All index fields are visible, so they can be sorted and filtered +**Solution** +Only action needed if performance issues occur. Get advice from System Integrators. -In this section, you see all indexes on the main table. If that's a table with many rows, make sure you use these indexes as much as possible. That applies to filtering and sorting. If you don't do that, it can have a dramatic impact on the performance of the GetConnector. +--- -Preferably use index 1; that's the clustered, unique primary key of the table. The fields in it provide a unique identification of each row. A few rules of thumb: -- Always include sorting in the URL -- Sort on as many fields of index 1 as possible, in the specified order of the fields. So if there's an index on Employee, Start date: then sort on those 2 fields in any case. -- Some fields are unfortunately not directly available. A SystemIntegrator can possibly adjust your GetConnector and add the hidden fields. -- If you filter in the GetConnector, do so as much as possible on index fields. -- Is index 1 not available or not logical for you? Then use one of the other indexes. Note, they are not always unique. +#### This GetConnector retrieves fields from a table that is also available as an alias. -#### This GetConnector has one or more free fields. +**Level:** ⚠️ Warning +**Certification impact:** Monitor and optimize if needed -*Checklist*: [Best practice](#best-practice-optional-but-recommended), No free fields are present -*Checklist*: [Implementation-document](#checklist-for-points-you-must-address-in-your-implementation-document), Offer the free fields as a .fie file and describe how they should be imported +**Why do you see this?** +The GetConnector retrieves fields from a table that is also available as an alias (shortcut). -See [above](#free-fields-are-used). +**Risk / point of attention** +Using alias tables is more efficient. The current path can affect performance. -#### This GetConnector has fields with a special format. +**Solution** +Check if you can use the alias table instead of the longer path. This gives better performance. -*Checklist*: [Best practice](#best-practice-optional-but-recommended), No fields with a special format are present +--- -You can display a field differently in a GetConnector; for example, a date/time as just a date or as a different date format. In many cases, this changes the field type. That's not a problem in itself. However, if you start filtering or sorting on this modified field type, it makes the GetConnector many times slower, especially if there's a lot of data in the source table. That can add up to more than a factor of 100! +#### Index fields missing -#### This GetConnector uses aggregation. Check if that's justified. +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved -*Checklist*: [Best practice](#best-practice-optional-but-recommended), No fields with a special format are present +**Why do you see this?** +Not all index fields are visible in the GetConnector. -Aggregation is a fantastic tool to calculate totals or prevent duplications. But if you are not aware of it, the GetConnector will produce unexpected results. On large tables, using aggregation affects performance. +**Risk / point of attention** +Sorting and filtering are inefficient. -#### This GetConnector is authorized. +**Solution** +Make index fields visible and use them in sorting and filtering. -*Checklist*: [Implementation-document](#checklist-for-points-you-must-address-in-your-implementation-document), State which authorization filters apply +--- -Here you see which authorization filters apply to this specific GetConnector. If a certain authorization is not listed, then that authorization is not applied to the GetConnector. If you still want to withhold data, use a filter in the GetConnector itself. +#### Recommended index usage -#### This GetConnector has fields marked as privacy-sensitive. +**Level:** ℹ️ Informational +**Certification impact:** Best practice + +**Why do you see this?** +The auditor shows recommended indexes. + +**What can you do with it?** +Use these indexes for optimal performance. + +--- + +### Selection & filtering + +#### Slow filter type used + +**Level:** ❌ Error +**Certification impact:** **Blocks certification** + +**Why do you see this?** +The filter uses 'contains (not)', 'starts (not) with' or 'ends (not) with'. + +**Risk / point of attention** +Indexes are not used → >100× slower. + +**Solution** +Use equality filters (`=`, `>`, `<` etc.) on index fields. + +--- + +#### User filter present + +**Level:** ⚠️ Warning +**Certification impact:** Must be resolved or documented + +**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. + +--- + +## Authorization & Privacy + +#### Authorized GetConnector + +**Level:** ℹ️ Informational +**Certification impact:** Document + +**Why do you see this?** +The GetConnector respects filter authorization. + +**What can you do with it?** +If results are unexpected, the cause often lies with authorization. + +**Action** +Document the authorizations used in the implementation document. + +--- + +#### 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 + +--- + +#### Privacy-sensitive fields + +**Level:** ⚠️ Warning +**Certification impact:** Must be documented and justified + +**Why do you see this?** +Fields marked as privacy-sensitive are retrieved. + +**Risk / point of attention** +Possible GDPR risk. + +**Solution** + +* Only retrieve strictly necessary data +* Explicitly mention this in the implementation document + +--- -*Checklist*: [Implementation-document](#checklist-for-points-you-must-address-in-your-implementation-document), State which privacy-sensitive fields are exchanged +## Conclusion -In Profit, a set of data is marked as privacy-sensitive. In this section, you see which of those fields are used in the integration. Review the list carefully; engage in conversation with the supplier if there are fields that the connected app does not necessarily need to function properly. +This help is intended as a **reference work and technical specification**, not as a replacement for personal consultation. -## Contact +> Do you encounter a message that is not feasible for you, or do you have a well-justified reason to deviate from it? +> Contact the System Integrators – deviations can be assessed and recorded together. -Do you have questions, comments, bug reports, suggestions for improvement, complaints, etc.? Get in touch with us! The purpose of the auditor is to be a tool for you as a partner, for AFAS itself, and of course ultimately for the customer. So go to your own partner page [https://partner.afas.nl/product-partner-portal](https://partner.afas.nl/product-partner-portal), log in with the link at the top right, and go to the tile `Ask a question`. +This document is never finished. Do you see something that is incorrect, or do you have suggestions for improvement? Make a pull request on the [GitHub page of the documentation](https://github.com/AFASSoftware/OASContent/blob/main/markdownpages/profit/en/app-connector-auditor-partner.md). -###### Don't have a login? +*Happy coding!* -One or more of your colleagues are administrators on the customer portal and can add you as a contact, so you can log in yourself. \ No newline at end of file +--- \ No newline at end of file diff --git a/markdownpages/profit/en/app-connector-auditor-partnerinfo.md b/markdownpages/profit/en/app-connector-auditor-partnerinfo.md new file mode 100644 index 0000000..7375679 --- /dev/null +++ b/markdownpages/profit/en/app-connector-auditor-partnerinfo.md @@ -0,0 +1,83 @@ +--- +author: Eric Zwaal +date: 2026-01-25 +index: true +tags: Partner, Administratie, Certificering, Partnergegevens +title: Partnergegevens en koppelingen +--- + +# 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. + +--- + +## Partner information + +This section shows the data that AFAS uses from your organization within the partner program. At the top is a short checklist. + +**Checklist** + +* **Your data at AFAS is complete** + This checkmark is green if you are known as a partner at AFAS and have an active subscription. + +* **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. + +* **Your PEN test is valid** + This checkmark is green as long as the validity of your most recent PEN test has not expired. + +**Displayed data** + +* **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. +* **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. + +> ⚠️ Has your PEN test expired or is it about to expire? Contact AFAS in time to avoid consequences for your partnership. + +--- + +## Integrations + +Under the partner information, all integrations you have registered are shown separately. Each integration has its own section and its own certification process. + +**Checklist per integration** + +* **Your certification is complete** + This checkmark is green when all project tasks have been completed. + +* **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). + +**Displayed data per integration** + +* **Name of the integration** – As visible on the partner portal. +* **IntegrationId** – Technical identification of the integration (`_`). +* **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. +* **Partner portal page** – The page where your integration is presented. +* **Introduction / Description / Website** – Texts as visible on the partner portal. + +> ⏳ Are you at risk of not meeting the certification deadline? Contact your AFAS project manager in time. + +--- + +## Relationship with the AppConnector Auditor + +The AppConnector Auditor combines this administrative data with the technical analysis of your AppConnectors: + +* Partner and integration status determine **if** and **how** the auditor is available. +* The technical messages determine **what** is needed to achieve or maintain certification. + +Together they form one whole: **administrative prerequisites + technical quality**. + +--- \ No newline at end of file diff --git a/markdownpages/profit/en/partner-certification-steps.md b/markdownpages/profit/en/partner-certification-steps.md index e30d9cf..fe20d8a 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-22 +date: 2026-01-25 index: true tags: Partner, IntegrationId, Certification, Integration, Configuration title: Certification steps for Partners @@ -13,7 +13,9 @@ title: Certification steps for Partners Welcome to the partner certification journey! In this document, we guide you step by step towards a successful, certified integration with AFAS. Follow the steps in the recommended order and discover how straightforward, educational, and rewarding the process can be. Take your first step towards certification today and turn your integration into a success story! -## Step Descriptions +--- + +## Phase 1: Start the certification process ### Security check @@ -22,17 +24,28 @@ Questions about this? Check https://partner.afas.nl/portal-landingspagina/faq#Se Instead of a pentest, you can also have a Security Quickscan performed by Defion. [Read more in this article.](https://partner.afas.nl/portal-partnerportal/security-quickscan) Of course, we handle the results of the pentest or Security Quickscan confidentially. All our employees are bound by a confidentiality agreement and have a Certificate of Good Conduct. + +--- + ### Add contacts Log in to the [customer portal](https://klant.afas.nl/contactpersonen-prs/overzicht) and make sure every colleague involved in this trajectory is added as a contact. This allows them to ask questions and perform actions on the AFAS portals themselves. Should the newly added contact be able to view and handle steps? Your AFAS contact person must arrange this. + +--- + ### Activate Support+ -By activating Support+ free of charge, you automatically give the System Integrators access to your test environment when you submit a question. This allows us to help you faster. +By activating Support+ free of charge, you automatically give the System Integrators access to your test environment when you submit a question. This allows us to help you faster. Go to https://klant.afas.nl/supportplus and activate it! +--- + +## Phase 2: Build! + + ### Start building - How our API works: https://help.afas.nl/help/NL/SE/api.htm. @@ -44,6 +57,9 @@ Go to https://klant.afas.nl/supportplus and activate it! *Happy coding*! + +--- + ### 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). @@ -51,7 +67,10 @@ This course is free for 1 colleague. Check https://klant.afas.nl/opleiding/speci **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. -### Sending IntegrationId + +--- + +### Send IntegrationId Send a special HTTP header with all calls to the AFAS API. This header identifies the calls from your integration and is always the same. @@ -59,50 +78,64 @@ Send a special HTTP header with all calls to the AFAS API. This header identifie The specific IntegrationId for your integration can be found in the task and in the [AppConnector Auditor](./app-connector-auditor-partner). -### Supplying GetConnectors +--- + +### Suppl 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#this-is-a-supplied-profit-getconnector-make-your-own-copy) +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) -#### 1. Determine which data you need +#### Determine which data you need -The integration with AFAS should be as standard as possible, otherwise certification is not possible. Ensure that your customers need to deviate no more than 10% from the certified GetConnectors. -Keep in mind that it is easier to disable unused fields in the GetConnector or ignore them in the result set. Adding new fields takes much more time and effort. Moreover, you risk introducing errors. +The integration with AFAS should be as standard as possible, otherwise certification is not possible. Ensure that your customers need to deviate no more than 10% from the certified GetConnectors. +Keep in mind that it is easier to disable unused fields in the GetConnector or ignore them in the result set. Adding new fields takes much more time and effort. Moreover, you risk introducing errors. -#### 2. Create your own GetConnectors + +#### Create your own GetConnectors Creating your own GetConnector is not difficult ([read this help article](https://help.afas.nl/help/NL/SE/App_Cnr_XML_Get_Build.htm)), but finding the right fields can be a real challenge. AFAS Profit contains almost 4,000 tables with almost 200,000 fields. And that number grows every year! - Are you working with a *launching customer* or someone experienced in building GetConnectors? Take advantage of that knowledge! - In the [pro training](#specialization-course-connectors) extensive attention is paid to building GetConnectors. Especially if you're building a data-intensive integration, it is absolutely necessary to follow that training. - Do you only need a few GetConnectors for your integration or are you stuck? We are happy to help you build. Often an hour is enough, in which we together create the right GetConnectors in your environment ([thanks to Support+](#activate-support)) in a Teams session. [Submit a request](#contact) if you want our help. -#### 3. Check the GetConnectors -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 issues found. Stuck? [Submit a request](#contact). +#### 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. + -#### 4. We do a final check +#### We do a final check -Are all points in the AppConnector Auditor checked? Then submit the GetConnectors to us for a final check. Send them as an attachment in a reply to the task. +Are all points in the AppConnector Auditor checked? Then submit the GetConnectors to us for a final check. Send them as an attachment in a reply to the task. -#### 5. Make your GetConnectors available to the customer -Ensure that our mutual customers use the checked GetConnectors. For example, make them available as a download and provide them to customers for import, see [Supplying the implementation document](#supplying-the-implementation-document). +#### Make your GetConnectors available to the customer +Ensure that our mutual customers use the checked GetConnectors. For example, make them available as a download and provide them to customers for import, see [Supplying the implementation document](#supplying-the-implementation-document). + +--- -### Supplying the implementation document +### Supply the implementation document Did you land a new customer? Congratulations! Some setup in AFAS will need to be done before the new customer can go live. This is not much work and it is not difficult, so the customer can easily do it themselves. But because each integration uses its own set of Get and UpdateConnectors, it is important that there is a document that tells the AFAS administrator exactly what needs to be done. Use this help page as the basis for the document: https://partner.afas.nl/portal-partnerportal/template-documentatie -Submit the document as an attachment in a reply to the task. Or even better: make it a web page that you can always keep up to date. Post the link in a reply. +Submit the document as an attachment in a reply to the task. Or even better: make it a web page that you can always keep up to date. Post the link in a reply. + +--- + +## Phase 3: Deliver! ### Give a demo -See the demo as a delivery moment, in which we put a bow on the integration. So first handle all the above points! +See the demo as a delivery moment, in which we put a bow on the integration. So first handle all the above points! Ready? Then we are very curious about the result and would like to see a demo! Schedule the demo yourself at a suitable time [via this link](https://calendly.com/d/ck6s-mh5-v98). At https://partner.afas.nl/portal-landingspagina/faq you can read what we expect from the demo. If the demo is approved, you can move on to the next part. + +--- + ### Publication on the partner portal Is the [demo](#give-a-demo) approved? @@ -113,18 +146,27 @@ Then go to https://partner.afas.nl/mijn-paginas and follow the instructions so t From now on you may also use the AFAS name and logo on your website. At [www.afas.nl/huisstijl](www.afas.nl/huisstijl) you can read how it works and what to watch out for. You can also download the correct logos there. + +--- + ### Provide 5 references An integration without customers is not an integration. To give our mutual customers confidence that the integration has been well tested and runs smoothly, your certification is only complete when you serve 5 or more mutual customers with your integration. We check this based on the IntegrationId ([see above](#sending-integrationid)). Proud of your customers? Then submit references from customers where the integration runs to their satisfaction. You can do this at https://partner.afas.nl/aanmaken-aanvraag-partnerportal/referentie. -### Data flow diagram of the API integration + +--- + +### Provide a data flow diagram of the API integration A data flow diagram of an API integration shows how data moves between systems. It does not focus on the internal workings of the systems, but rather on what data is exchanged (for example, employee data or leave bookings), in which direction, via which API calls, and what event or schedule triggers this exchange. This makes it clear which endpoints are used, who the source is, who the recipient is, and under what circumstances the exchange takes place. This is important because it prevents misunderstandings about who supplies and receives what data, and because it helps developers and administrators design, build, and maintain the integration properly. The diagram makes impact analyses of changes easier, as you can directly see which flows are affected, and it serves as clear, lasting documentation for management and future expansions. Additionally, it provides a concrete tool to optimize the integration, for example by removing redundant data flows or choosing more efficient exchange moments. + +--- + ## Contact We are ready to ensure your integration runs smoothly and retrieves the right data. We are also happy to help with other questions. Do not send an email, but submit a request via the portal! That's easy: diff --git a/markdownpages/profit/nl/app-connector-auditor-developer.md b/markdownpages/profit/nl/app-connector-auditor-developer.md new file mode 100644 index 0000000..899b00e --- /dev/null +++ b/markdownpages/profit/nl/app-connector-auditor-developer.md @@ -0,0 +1,387 @@ +--- +author: Eric Zwaal +date: 2026-01-25 +index: true +tags: AppConnector, Auditor, Developer, GetConnector, API, Integration +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) + +--- + +## Introductie + +Deze documentatie helpt ontwikkelaars bij het interpreteren en oplossen van meldingen uit de AppConnector Auditor. Of je nu als partner integreert of als in-house developer een koppeling bouwt: hier vind je technische uitleg en concrete oplossingen. + +**Doelgroep:** Professionele developers met API-kennis en basiskennis van AFAS Profit. + +--- + +## Opzet van deze help + +* De meldingen zijn **gegroepeerd per onderwerp**, conform het rapport. +* **Elke melding heeft een eigen sectie met een vaste anchor**, zodat het rapport hier direct naartoe kan linken. +* Per melding leggen we uit: + + * waarom de melding verschijnt; + * welk risico of aandachtspunt er is; + * hoe je de fout, waarschuwing of informatie kunt oplossen of gebruiken. + +De niveaus zijn: + +* **❌ Fout** – moet worden opgelost (certificering blokkeert) +* **⚠️ Waarschuwing** – oplossen of onderbouwen +* **ℹ️ Informatief** – uitleg en bewustwording + +--- + +## AppConnector + + + +--- + +## 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. + +--- + +#### Nacalculatie zonder `Gewijzigde boekingsdagen nacalculatie` + +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** + +**Waarom zie je dit?** +Nacalculatieregels 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 nacalculatie`. [Lees dit help artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619) voor meer informatie. + +--- + +## GetConnector – Individueel + +### Connectorstructuur + +#### 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** + +* 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. + +--- + +### Datamodel + +#### Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding` + +**Niveau:** Fout + +**Waarom zie je dit?** +De GetConnector haalt gegevens uit `Actuele gegevens per arbeidsverhouding`, terwijl de integratie elders met dienstverbanden werkt. + +**Risico / aandachtspunt** +Bij meerdere gelijktijdige dienstverbanden worden onjuiste of onvolledige gegevens opgehaald. + +**Oplossing** +Gebruik `Actuele gegevens per dienstverband` of vermijd actuele tabellen volledig. Overleg bij twijfel met de Systemintegrators. + +--- + +#### Deze GetConnector heeft 1 of meer onbekende velden + +**Niveau:** Fout + +**Waarom zie je dit?** +De GetConnector bevat velden die niet (meer) bestaan in de database. Deze leveren de waarde `(vervangen)`. + +**Risico / aandachtspunt** +De GetConnector is technisch inconsistent en kan niet verder worden uitgebreid. + +**Oplossing** +Verwijder deze velden of koppel ze opnieuw aan een bestaand databaseveld. + +--- + +#### Vrije velden gebruikt + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +De integratie maakt gebruik van vrije velden. + +**Wat betekent dit?** +Vrije velden bestaan niet standaard in elke klantomgeving. + +**Actie** +Lever vrije velden aan als `.fie`-bestand + +--- + +#### Verdichting toegepast + +**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. + +**Advies** +Gebruik verdichting alleen bewust. Bij twijfel: overleg met AFAS. + +--- + +#### Velden met speciaal formaat + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +Een of meer velden gebruiken een SQL-functie (bijv. datumformattering). + +**Risico / aandachtspunt** +Sorteren of filteren op deze velden heeft grote performance-impact. + +**Oplossing** +Gebruik deze velden alleen voor presentatie en filter/sorteer nooit op deze velden. + +--- + +### Performance + +#### Cyclische verwijzing + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +Dezelfde tabel komt meerdere keren voor in het join-pad. + +**Risico / aandachtspunt** +Onnodige JOINs → performanceverlies. + +**Oplossing** +Controleer of de verwijzing functioneel nodig is. +Zo niet: vereenvoudig de GetConnector. + +--- + +#### Mogelijke subselect + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +In de SQL-definitie komt meerdere keren `SELECT` voor. + +**Risico / aandachtspunt** +Subselects kunnen per rij worden uitgevoerd en zijn duur. + +**Oplossing** +Alleen actie nodig bij performanceproblemen. Laat je adviseren door Systemintegrators. + +--- + +#### Indexvelden ontbreken + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +Niet alle indexvelden zijn zichtbaar in de GetConnector. + +**Risico / aandachtspunt** +Sortering en filtering zijn inefficiënt. + +**Oplossing** +Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. + +--- + +#### Aanbevolen indexgebruik + +**Niveau:** Informatief + +**Waarom zie je dit?** +De auditor toont aanbevolen indexen. + +**Wat kun je ermee?** +Gebruik deze indexen voor optimale performance. + +--- + +### Selectie & filtering + +#### Het filter maakt gebruik van 'bevat (niet)', 'begint (niet) met' of 'eindigt (niet) op'. + +**Niveau:** Fout + +**Waarom zie je dit?** +Er wordt gefilterd met `bevat`, `begint met` of `eindigt op`. + +**Risico / aandachtspunt** +Indexen worden niet gebruikt → >100× langzamer. + +**Oplossing** +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 + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +De GetConnector haalt gegevens uit meer dan 5 tabellen. + +**Risico / aandachtspunt** +Complexe SQL met mogelijk slechte performance. + +**Oplossing** +Overweeg opsplitsen in meerdere GetConnectoren. + +--- + +#### Diepe nesting of grote tabellen + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +Er wordt diep genest of uit zeer grote tabellen gelezen. + +**Risico / aandachtspunt** +Langzame queries bij grotere datasets. + +**Oplossing** +Minimaliseer velden, joins en berekeningen. + +--- + +## Autorisatie & Privacy + +#### Geautoriseerde GetConnector + +**Niveau:** Informatief + +**Waarom zie je dit?** +De GetConnector respecteert filterautorisatie. + +**Wat kun je ermee?** +Bij onverwachte resultaten ligt de oorzaak vaak bij autorisatie. + +**Actie** +Documenteer gebruikte autorisaties. + +--- + +#### Privacy-gevoelige velden + +**Niveau:** Waarschuwing + +**Waarom zie je dit?** +Er worden velden opgehaald die als privacy-gevoelig zijn gemarkeerd. + +**Risico / aandachtspunt** +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). + +*Happy coding!* + +--- \ No newline at end of file diff --git a/markdownpages/profit/nl/app-connector-auditor-partner.md b/markdownpages/profit/nl/app-connector-auditor-partner.md index 3691bf7..cfb2bee 100644 --- a/markdownpages/profit/nl/app-connector-auditor-partner.md +++ b/markdownpages/profit/nl/app-connector-auditor-partner.md @@ -1,329 +1,483 @@ --- author: Eric Zwaal -date: 2025-11-11 +date: 2026-01-25 index: true -tags: Partner, IntegrationId, GetConnector, AppConnector, Certification -title: AppConnector auditor voor Partners +tags: AppConnector, Auditor, Partner, Certificering, GetConnector, pentest +title: AppConnector Auditor - Partnerrapport --- -## Inleiding +# AppConnector Auditor - Partnerrapport -Sinds Profit 5 (najaar 2024) kennen we de AppConnector Auditor: een mooi hulpmiddel om snel inzicht te krijgen in een AppConnector. Voor jou als partner is het ideaal om te zien in hoeverre jouw integratie aan de eisen en best practices voldoet. Op termijn gaan we de auditor gebruiken om jouw integratie een beoordeling te geven. Zorg er dus voor dat je nu al goed op de hoogte bent van wat er komen gaat! +> 📊 **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) -In een nieuwe versie van Profit kunnen er controles zijn toegevoegd, aangepast, of verwijderd. Dit zal altijd genoemd worden in de technische releasenotes op [https://docs.afas.help/profit](https://docs.afas.help/profit). Controleer dus bij elke nieuwe versie van Profit of er nog aanpassingen nodig zijn aan jouw integratie. +--- + +## Introductie voor partners + +Dit rapport is specifiek bedoeld voor **AFAS Partners** en bevat de strengste controles. Meldingen in dit rapport zijn direct gekoppeld aan je **certificeringsstatus**. + +### Belangrijke verschillen met het ontwikkelaarsrapport + +* **Fouten zijn blokkerend:** Rode meldingen ❌ blokkeren je certificering +* **Strengere eisen:** Meer controles en hogere kwaliteitsnormen +* **Certificerings-impact:** Elke melding heeft invloed op je partnerstatus +* **Deadlines:** Voor sommige meldingen gelden harde deadlines + +> Tijdens het certificeringstraject is er intensief contact met AFAS Systemintegrators. Twijfel je over een melding of kun je deze niet zelfstandig oplossen, neem dan altijd contact met ons op. + +--- + +## 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). + +Deze sectie bevat kritieke informatie over: +* Je partnerstatus en certificering +* pentest-geldigheid en verloopdata +* Contactpersonen en projectleiders +* Openstaande projecttaken en deadlines + +⚠️ **Let op:** Verlopen pentests of overschreden deadlines hebben direct gevolgen voor de certificering van je koppeling. + +--- + +## Partner-specifieke vereisten + +### Certificeringscriteria + +Je koppeling is alleen gecertificeerd zolang je aan alle onderstaande eisen voldoet: + +* ✅ Alle rode meldingen (fouten) zijn opgelost +* ✅ Oranje meldingen (waarschuwingen) zijn opgelost of onderbouwd +* ✅ pentest is geldig (vervaldatum is afhankelijk van score) +* ✅ Alle projecttaken zijn afgerond +* ✅ Je stuurt het juiste IntegrationId mee bij elke aanroep +* ✅ Je hebt een geldig partnerabonnement +* ✅ Je hebt minimaal 5 klanten die je koppeling actief gebruiken + +--- + +## Opzet van deze help + +* De meldingen zijn **gegroepeerd per onderwerp**, zoals in het rapport +* Vanuit het rapport wordt voor elke melding hier direct naartoe gelinkt +* Per melding leggen we uit: + * Waarom de melding verschijnt + * Wat het risico of aandachtspunt is + * **Impact op certificering** + * Hoe je de melding moet oplossen (technisch en concreet) + +### Ernst-niveaus voor partners + +* **❌ Fout** – Blokkeert certificering. Moet worden opgelost. +* **⚠️ Waarschuwing** – Moet worden opgelost of onderbouwd in gesprek met AFAS. +* **ℹ️ Informatief** – Geen actie vereist, wel documenteren indien relevant. + +--- + +## AppConnector + +Deze sectie bevat partner-specifieke meldingen over de AppConnector zelf (niet de GetConnectoren). + +**Aantal per niveau** – Een snel overzicht van het aantal meldingen per ernst-niveau + +**Aantal per categorie** – Overzicht van het aantal meldingen per categorie (bijv. Autorisatie, Performance, Datamodel) + +**Aandachtspunten voor in het implementatiedocument** – Lijst van zaken die je moet documenteren in het implementatiedocument voor certificering. Dat zijn 1 of meer van de volgende onderwerpen: +* Vermeld welke autorisatiefilters van toepassing zijn +* Vermeld welke privacy-gevoelige velden er uitgewisseld worden +* Bied de vrije velden aan als .fie bestand en beschrijf hoe ze geïmporteerd moeten worden + +--- + +## GetConnectoren – Overkoepelend + +### Datamodel + +#### `Dienstverbandnummer` en `Volgnummer dienstverband` worden beide gebruikt -## Wat heb je nodig +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -- AFAS Omgeving -- De omgeving moet horen bij een partner-licentie -- Een AppConnector die is ingericht zoals je dat ook bij een klant zou laten doen -- De AppConnector moet van het type "Onderhoud door klant" zijn -- De juiste rechten: - - `Autorisatie tool > Autorisatie > Algemeen > Beheer > App connector > Acties > AppConnector auditor` +**Waarom zie je dit?** +Jouw integratie gebruikt twee verschillende dienstverbandnummers door elkaar: een interne (`Volgnummer dienstverband`) en het dienstverbandnummer dat je ziet bij het contract van een medewerker. -## Gebruik van de auditor +**Risico / aandachtspunt** +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. -1. Ga in het menu naar `Algemeen > Beheer > App connector` -2. Open de eigenschappen van de AppConnector die je wilt analyseren -3. Klik naast het rijtje tabbladen aan de linkerkant op `Acties` -4. Klik op de actie `Auditor (voor partners)`. -5. Na een paar seconden is de auditor klaar -6. Kies hoe je het bestand wilt opslaan. Pdf werkt fijn, html is sneller. +**Oplossing** +Pas je GetConnectoren aan zodat je overal gebruik maakt van `Dienstverband` en niet meer van `Volgnummer dienstverband`. -## Uitleg van de analyse +**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. -Wat je te zien krijgt in de Auditor is natuurlijk afhankelijk van de AppConnector. In dit onderdeel behandel ik welke meldingen je mogelijk te zien krijgt, en wat je daarmee kan doen. Doordat er vertaling wordt toegepast kan een tekst er bij jou net wat anders uitzien. Ook de volgorde kan afwijken. +--- + +### Performance & schaalbaarheid + +#### Financiële mutaties zonder `Gewijzigde boekingsdagen` + +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** + +**Waarom zie je dit?** +Er worden Financiële mutaties opgehaald, maar `Gewijzigde boekingsdagen` wordt niet gebruikt. + +**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. + +--- + +#### Nacalculatie zonder `Gewijzigde boekingsdagen nacalculatie` + +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** + +**Waarom zie je dit?** +Nacalculatieregels 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 nacalculatie`. [Lees dit help artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619) voor meer informatie. + +--- + +## GetConnector – Individueel + +### Connectorstructuur -### Jouw gegevens +#### Dit is een meegeleverde Profit GetConnector. Maak hier een eigen kopie van. -Deze sectie toont een aantal gegevens die wij bij AFAS van jou hebben. Een korte checklist toont of er nog gegevens missen. +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -- [ ] **Je gegevens bij AFAS zijn compleet**: Je bent bekend als partner en je hebt een lopend abonnement. -- [ ] **Je hebt 2 of meer contacten voor partner-/expertcommunicatie**: Deze contactpersonen benaderen wij als er vragen, issues of nieuws over jouw koppeling is. -- [ ] **Je PENtest is geldig**: Dit vinkje staat aan zolang jouw PENtest geldig is. +**Waarom zie je dit?** +In een gecertificeerde koppeling moet je een eigen set GetConnectoren gebruiken. Meegeleverde Profit GetConnectoren mag je niet gebruiken. -Tabel met jouw gegevens +**Risico / aandachtspunt** +* Ze worden door AFAS onderhouden en kunnen zonder waarschuwing aangepast worden +* Ze bevatten waarschijnlijk niet precies de velden die jij nodig hebt +* Een eindgebruiker kan geen filters instellen -- **Naam**: De naam van jouw bedrijf. Omdat hier ook de factuur naar verstuurd wordt, is het van belang dat dit jouw officiële bedrijfsnaam is. -- **Abonnementsnummer**: Het nummer van het abonnement bij AFAS waar jouw partner-licentie onder valt. Dit is ook het eerste deel van het IntegrationId dat je meestuurt. -- **Debiteurnummer**: Jouw klantnummer bij AFAS. -- **Contactpersonen voor partner/-expertcommunicatie**: Deze contactpersonen benaderen wij als er vragen, issues of nieuws over jouw koppeling is. Dat kunnen technische vragen zijn, of vragen over jouw partnerschap. Je kunt contactpersonen toevoegen of verwijderen in de [klantportal](https://klant.afas.nl) onder `Mijn gegevens > Organisatiegegevens > Contactpersonen`. -- **Verantwoordelijke bij AFAS**: Jouw eerste aanspreekpunt bij vragen die niet over een specifieke koppeling gaan. -- **Status PENtest**: Als je de resultaten van een PENtest hebt laten zien, geven wij daar een score aan; die zie je hier. Als je een PENtest of Quickscan door Computest laat uitvoeren, bepalen zij de score op basis van "risico voor AFAS". 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. -- **Einddatum geldigheid PENtest**: Dit is de datum van de laatste PENtest, opgehoogd met de geldigheidsduur (zie punt hierboven). Na deze datum voldoe je formeel niet meer als partner en zal de opzegtermijn van AFAS (12 maanden) ingaan. Na afloop van de opzegtermijn heeft AFAS het recht om het partnercontract éénzijdig te beëindigen. +**Oplossing** +Maak een kopie van deze GetConnector. Geef je GetConnector een naam volgens: -#### Jouw koppelingen +``` +_ +``` -Je kunt meerdere gecertificeerde koppelingen hebben bij AFAS. Deze worden apart getoond op de partnerportal en ook apart gecertificeerd. +Gebruik nooit `Profit` of `AFAS` in de naam; dat is voor de klant wel duidelijk. -#### "Naam van de koppeling" +--- -Deze sectie toont gegevens voor deze specifieke koppeling. Als je meerdere koppelingen met AFAS hebt, wordt deze sectie meerdere keren getoond. -De "Naam van de koppeling" is zoals die zichtbaar is op de [partnerportal](https://partner.afas.nl/koppelingen). Dit kun je aanpassen op [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). +#### Deze GetConnector heeft een naam die begint met `Profit_`. -- [ ] **Je certificering is afgerond** -- [ ] **Je integratie wordt getoond op [https://partner.afas.nl/koppelingen](https://partner.afas.nl/koppelingen)** +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering\*\* -Tabel met gegevens over jouw koppeling +**Waarom zie je dit?** +Een GetConnector heeft een naam die begint met `Profit_`. -- **IntegrationId**: Een technische identificatie van deze koppeling. [Lees meer](https://docs.afas.help/profit/nl/integrationid). -- **Projectcode**: Voor elke integratie hebben we een project gemaakt. Als je partner bent geworden na maart 2023, bevat dit project ook jouw projecttaken. -- **Artikelcode**: Nummer van het artikel waarmee je zichtbaar bent op de partnersite. -- **AFAS projectleider**: Jouw aanspreekpunt bij AFAS voor wat betreft deze koppeling. Dat zal meestal een SystemIntegrator zijn. Dit veld is leeg bij koppelingen die al langer bestaan. -- **Teamleden**: De eerste 5 contactpersonen die toegang hebben tot de projecttaken. Alfabetisch gesorteerd. -- **Certificering afgerond**: "Ja" als er geen openstaande projecttaken meer zijn. Anders "Nee". -- **Aantal openstaande projecttaken**: Teamleden (zie hierboven) kunnen deze taken inzien op [https://partner.afas.nl/product-partner-portal](https://partner.afas.nl/product-partner-portal). -Alleen zichtbaar als de certificering nog niet is afgerond. -[Uitleg over de taken is nu ook beschikbaar in onze Docs!](./partner-certification-steps) -- **Deadline voor certificering**: De uiterste datum waarop alle projecttaken afgehandeld moeten zijn, berekend als "Startdatum van de certificering + 12 maanden". Als er na deze datum nog taken openstaan, zal AFAS je benaderen voor een laatste gesprek. Lukt het niet om alle taken af te handelen, dan zal het partnercontract beëindigd worden. -Alleen zichtbaar als de certificering nog niet is afgerond. -Ga je het niet halen? Neem dan op tijd [contact](#kom-in-gesprek) op met ons. -- **Partnerportal-pagina**: De pagina waarop jouw integratie te zien is. De tekst en logo kun je zelf aanpassen op [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). De volgende 4 regels tonen de details van die pagina: -- **Introductie**: De introductie. Pipeline-karakters (|) zijn vervangen door een afbreekstreepje (-). -- **Beschrijving**: De beschrijving, afgekapt op 100 tekens of het eerste pipeline-karakter (|). -- **Website**: De website -- **Zichtbaar in**: De branches waarin jouw koppeling getoond wordt. De sortering van de koppelingen binnen een branche wordt bepaald door het aantal klanten in die branche. -- **Koppeling zichtbaar op de partnerportal**: "Nee" als jouw koppeling niet getoond wordt. Dat komt meestal doordat het veld **Website** niet gevuld is. -Alleen zichtbaar als je koppeling nog niet zichtbaar is. +**Risico / aandachtspunt** +De naam kan conflicteren met toekomstige meegeleverde GetConnectoren van AFAS. +**Oplossing** +Geef je GetConnector een naam volgens: +``` +_ +``` -### App Connector "Naam" +Gebruik nooit `Profit` of `AFAS` in de naam. -#### Checklist voor deze AppConnector +--- -3 Checklists waarbij je in één oogopslag ziet wat de status van je integratie is. Een vinkje gaat uit als er bij één of meerdere GetConnectoren een relevant aandachtspunt gevonden is. Uitgebreide uitleg van de punten in deze checklists vind je daarom bij de relevante aandachtspunten per GetConnector. +#### Deze GetConnector heeft 1 of meer velden met een punt in de naam. -##### Verplicht (Essentieel) +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -Alle punten in deze sectie moeten zijn aangevinkt. -In de basis heb je een **goede integratie** als alle punten een vinkje hebben, maar dat is niet sluitend. Ook als alle punten een vinkje hebben, kan het zijn dat AFAS nog wil dat je aanpassingen doorvoert. +**Waarom zie je dit?** +Deze GetConnector heeft 1 of meer velden met een punt in de naam. -> Als een klant in zijn eigen omgeving de auditor draait, ziet hij deze checklist ook. +**Risico / aandachtspunt** +Een veldnaam die een punt bevat kan onverwachte fouten geven bij het verwerken van je aanroep. -*Ben je van mening dat een vinkje onterecht uit staat? Neem dan [contact](#kom-in-gesprek) op met de SystemIntegrators. We werken aan mogelijkheden om afwijkingen vast te leggen bij een specifieke integratie. En misschien is er een goede reden waarom het vinkje uit staat.* +**Oplossing** +Pas de betreffende veldnamen aan en verwijder de punt. +--- -- [ ] **Een eigen set van GetConnectoren is in gebruik**: Gebruik geen meegeleverde GetConnectoren. -- [ ] **Alle GetConnectoren hebben een geldige naam**: Gebruik een duidelijk herkenbare, unieke naam voor een GetConnector. -- [ ] **Alle GetConnector-velden hebben een geldige naam**: Een punt in de naam van een veld is niet toegestaan. -- [ ] **Alleen bekende velden zijn aanwezig**: Houd je GetConnectoren *clean* en *up-to-date*. -- [ ] **Meerdere dienstverbanden worden correct verwerkt**: Ook aangevinkt als je niets met HRM doet. -- [ ] **Financiële mutaties worden correct verwerkt**: Ook aangevinkt als je niets met financiële mutaties doet. -- [ ] **Nacalculatie wordt correct verwerkt**: Ook aangevinkt als je niets met nacalculatie doet. -- [ ] **Filters zijn correct ingesteld**: Slechte filters kunnen een aanroep vertragen met een factor 100. +### Datamodel -##### Aanbevolen (Wenselijk) +#### Deze GetConnector haalt velden uit Actuele gegevens per arbeidsverhouding -Deze sectie is wat minder zwart/wit, omdat er een goede reden kan zijn om niet te voldoen aan de controles. Is dat bij jou het geval? [Kom in gesprek!](#kom-in-gesprek) +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -Een klant ziet deze checklist niet en zal er dus ook geen vragen over stellen. +**Waarom zie je dit?** +Deze GetConnector haalt velden uit `Actuele gegevens per arbeidsverhouding`, maar de integratie gebruikt gegevens per dienstverband. -- [ ] **Alle indexvelden zijn aanwezig in de GetConnectoren**: Deze controle kijkt naar de *Primary key* van de hoofdtabel. -- [ ] **Alle indexvelden zijn zichtbaar, zodat er gesorteerd en gefilterd kan worden**: +**Risico / aandachtspunt** +Bij meerdere gelijktijdige dienstverbanden worden onjuiste of onvolledige gegevens opgehaald. -##### Best practice (Optioneel, maar aanbevolen) +**Oplossing** +Gebruik `Actuele gegevens per dienstverband` of vermijd actuele tabellen volledig. Overleg bij twijfel met de Systemintegrators. -Informatief. Controleer of het klopt met je verwachtingen. +--- -Een klant ziet deze checklist niet en zal er dus ook geen vragen over stellen. +#### Deze GetConnector heeft 1 of meer onbekende velden -- [ ] **Geen vrije velden zijn aanwezig** -- [ ] **Geen velden met een speciaal formaat zijn aanwezig** +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -##### Mogelijke performance optimalisaties +**Waarom zie je dit?** +Deze GetConnector heeft 1 of meer onbekende velden. -Een goede aanroep naar een goede GetConnector is in principe binnen 1 seconde klaar. Ga je aan de slag met onderstaande punten? Maak het jezelf niet te moeilijk en [plan een afspraak in](#kom-in-gesprek). +**Risico / aandachtspunt** +Onbekende velden zijn niet meer gekoppeld aan een veld in de database. In het resultaat geven ze een vaste waarde "(vervangen)". -- [ ] **Eén of meer van de 10 grootste tabellen in de omgeving wordt uitgevraagd**: Alleen als er meer dan 1.000.000 regels in die tabel zitten. -- [ ] **Er zijn GetConnectoren met meer dan 10 joins**: Dit duidt vaak op redundante gegevens. Als deze GetConnector slecht presteert, overweeg dan om op te splitsen in meerdere GetConnectoren. -- [ ] **Er zijn GetConnectoren die meer dan 5 niveaus diep gegevens ophalen**: Als deze GetConnector slecht presteert, overweeg dan om op te splitsen in meerdere GetConnectoren. +**Oplossing** +Verwijder de onbekende velden, of koppel ze aan een veld in de database. -#### Checklist voor punten die je moet behandelen In je implementatiedocument +--- -Het is voor de klant belangrijk om geïnformeerd te worden over deze punten. Elke check is alleen zichtbaar als het van toepassing op jouw integratie. +#### Vrije velden gebruikt -- [ ] **Bied de vrije velden aan als .fie bestand en beschrijf hoe ze geïmporteerd moeten worden** -- [ ] **Vermeld welke autorisatie-filters van toepassing zijn** -- [ ] **Vermeld welke privacy-gevoelige velden er uitgewisseld worden** +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost of gedocumenteerd worden +**Waarom zie je dit?** +De integratie maakt gebruik van vrije velden. +**Wat betekent dit?** +Vrije velden bestaan niet standaard in elke klantomgeving. -### UpdateConnectoren +**Actie** -Deze sectie geeft een lijst van UpdateConnectoren die beschikbaar zijn om aan te roepen. +* Lever vrije velden aan als `.fie`-bestand +* Beschrijf in het implementatiedocument hoe klanten deze importeren +--- +#### Verdichting toegepast -### Overige Connectoren +**Niveau:** ℹ️ Informatief +**Certificerings-impact:** Geen -Deze sectie geeft een lijst van overige Connectoren die beschikbaar zijn om aan te roepen. Denk daarbij aan connectoren om bijlagen op te halen. +**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. +**Advies** +Gebruik verdichting alleen bewust. Bij twijfel: overleg met AFAS. -### GetConnectoren +--- -Dit is de belangrijkste sectie. Eerst worden er meldingen gegeven die te maken hebben met de samenhang tussen meerdere GetConnectoren. Daarna worden de GetConnectoren die beschikbaar zijn om aan te roepen stuk voor stuk getoond. +#### Velden met speciaal formaat -#### Er worden onbekende velden gebruikt. In de GetConnector geven die een vaste waarde "(vervangen)". +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost worden -Er worden velden gebruikt die niet in jouw omgeving beschikbaar zijn. Meestal gaat het om vrije velden die niet (meer) aanwezig zijn. Er zijn 2 mogelijke oplossingen: -1. Verwijder de verwijzing uit de GetConnector -2. Importeer het vrije veld. Pas daarna de GetConnector aan zodat het weer verwijst naar het juiste veld. +**Waarom zie je dit?** +Deze GetConnector heeft velden met een speciaal formaat. Op deze velden mag niet worden gefilterd of gesorteerd. -#### Er worden vrije velden gebruikt. +**Risico / aandachtspunt** +Sorteren of filteren op deze velden heeft grote performance-impact. -Zorg ervoor dat je deze ook aanbiedt en dat je in het implementatiedocument hier aandacht aan besteedt. [Vrije velden kun je vanuit jouw AFAS testomgeving exporteren](https://help.afas.nl/help/NL/SE/App_UDF_ExpImp.htm) en als downloadbare bestanden aanbieden, samen met de GetConnectoren. +**Oplossing** +Gebruik deze velden alleen voor presentatie en filter/sorteer nooit op deze velden. -#### De volgende autorisaties worden toegepast, zorg dat je dat noemt in je implementatiedocument. +--- -Veel GetConnectoren tonen alleen gegevens die door de eindgebruiker in de autorisatiefilters zijn toegestaan. Door in je implementatiedocument te vermelden welke filters van toepassing zijn op jouw integratie, kan de AFAS beheerder alles goed inrichten. -Dit is van groot belang voor een goede werking van de integratie! +### Performance -#### EnSe en DvSn worden beide gebruikt. +#### Cyclische verwijzing -Kort gezegd: AFAS Profit kent 2 verschillende nummers die het dienstverband aanduiden. Als je die door elkaar heen gebruikt, loop je eerder of later tegen lastig te traceren fouten aan. [Lees daarom dit artikel goed door](./howto-bi#medewerkers-en-dienstverband). Schroom niet om dit te overleggen tijdens een afspraak met een SystemIntegrator. +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost of onderbouwd worden -#### Er worden Financiële mutaties opgehaald, maar **Gewijzigde boekingsdagen** wordt niet gebruikt. +**Waarom zie je dit?** +Dezelfde tabel komt meerdere keren voor in het join-pad. -Haal je veel Financiële mutatie op? Gebruik dan ook de GetConnector `Gewijzigde boekingsdagen`. [Lees dit artikel goed door](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o79118). +**Risico / aandachtspunt** +Onnodige JOINs → performanceverlies. -Mogelijk ben je ook geïnteresseerd in het ophalen van verwijderde mutaties. [Lees daarvoor dit artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_Deleted_Data.htm#o124753). +**Oplossing** +Controleer of de verwijzing functioneel nodig is. +Zo niet: vereenvoudig de GetConnector. -#### Er wordt Nacalculatie opgehaald, maar **Gewijzigde boekingsdagen nacalculatie** wordt niet gebruikt. +--- -Haal je veel nacalculatieregels op? Gebruik dan ook de GetConnector `Gewijzigde boekingsdagen nacalculatie`. [Lees dit artikel goed door](https://help.afas.nl/help/NL/SE/App_Cnnct_View_Audit.htm#o95619). +#### Mogelijke subselect -Mogelijk ben je ook geïnteresseerd in het ophalen van verwijderde nacalculatie. [Lees daarvoor dit artikel](https://help.afas.nl/help/NL/SE/App_Cnnct_Deleted_Data.htm#o124754). +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Monitor performance -#### Hieronder staan de autorisaties die van toepassing zijn en hoe de rechten in jouw omgeving zijn toegekend. +**Waarom zie je dit?** +In de SQL-definitie komt meerdere keren `SELECT` voor. -Alleen zichtbaar in de klant-versie van de auditor. -Deze sectie geeft de AFAS beheerder inzicht in de inrichting van de autorisatie die effect heeft op jouw integratie. Elke klant zal dit anders hebben ingericht. +**Risico / aandachtspunt** +Subselects kunnen per rij worden uitgevoerd en zijn duur. +**Oplossing** +Alleen actie nodig bij performanceproblemen. Laat je adviseren door Systemintegrators. +--- -### GetConnectoren: Meldingen per GetConnector +#### Deze GetConnector haalt velden uit een tabel die ook als alias beschikbaar is. -#### Gebaseerd op gegevensverzameling "naam" +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Monitor en optimaliseer indien nodig -Informatief. +**Waarom zie je dit?** +De GetConnector haalt velden op uit een tabel die ook als alias (snelkoppeling) beschikbaar is. -#### Aantal velden, Aanbevolen take +**Risico / aandachtspunt** +Het gebruik van alias-tabellen is efficiënter. Het huidige pad kan performance beïnvloeden. -Informatief. De aanbevolen `take` is gebaseerd op best practices en berekend als 150.000 / \[Aantal velden\]. -De `take` bepaalt hoeveel regels je per call ophaalt. Als je teveel regels per keer ophaalt, kan dat geheugenproblemen geven op onze server. Daarmee belast je jezelf, de klant, maar ook andere klanten die op dezelfde gedeelde resources zitten. Door je te houden aan de aanbevolen `take` kunnen calls soepel worden afgehandeld. -In feite gaat het niet om de hoeveel regels, maar om de totale omvang (ongecomprimeerd) van de gegevens die je ophaalt. +**Oplossing** +Controleer of je de alias-tabel kunt gebruiken in plaats van het langere pad. Dit geeft betere performance. -#### Dit is een meegeleverde Profit GetConnector. Maak hier een eigen kopie van. +--- -*Checklist*: [Verplicht](#verplicht-essentieel), Een eigen set van GetConnectoren is in gebruik +#### Indexvelden ontbreken -Maak altijd voor elke integratie een eigen set GetConnectoren. -Het is verleidelijk om de standaard Profit-GetConnectoren te gebruiken, maar de nadelen wegen zwaarder: -- Er zitten velden in die je niet gebruikt, -- Je kunt ze niet aanpassen, dus als je een veld mist moet je daar alsnog een eigen GetConnector voor maken, -- Er kan geen filter worden toegepast. Jij kan nog een filter meegeven in de URL, maar de AFAS beheerder heeft niet de mogelijkheid om specifieke gegevens af te schermen, -- Je kan geen *versioning* toepassen. +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost worden -#### Ongeldige naam. Deze GetConnector heeft een naam die begint met "Profit_". +**Waarom zie je dit?** +Niet alle indexvelden zijn zichtbaar in de GetConnector. -*Checklist*: [Verplicht](#verplicht-essentieel), Alle GetConnectoren hebben een geldige naam +**Risico / aandachtspunt** +Sortering en filtering zijn inefficiënt. -Geef jouw GetConnectoren bij voorkeur een naam die begint met jouw bedrijfsnaam, of de naam van de app die je koppelt. Daarmee voorkom je dat er conflicten optreden als een klant meerdere integraties heeft. +**Oplossing** +Maak indexvelden zichtbaar en gebruik deze in sortering en filtering. -#### Deze GetConnector heeft 1 of meer velden met een punt in de naam. +--- -*Checklist*: [Verplicht](#verplicht-essentieel), Alle GetConnectoren hebben een geldige naam +#### Aanbevolen indexgebruik -Dat kan een probleem geven als je in de URL op deze velden wilt filteren of sorteren. Pas de naam aan zodat er geen punt in voorkomt. +**Niveau:** ℹ️ Informatief +**Certificerings-impact:** Best practice -#### Deze GetConnector heeft 1 of meer onbekende velden. +**Waarom zie je dit?** +De auditor toont aanbevolen indexen. -*Checklist*: [Verplicht](#verplicht-essentieel), Alleen bekende velden zijn aanwezig +**Wat kun je ermee?** +Gebruik deze indexen voor optimale performance. -Zie [hierboven](#er-worden-onbekende-velden-gebruikt-in-de-getconnector-geven-die-een-vaste-waarde-vervangen). +--- -#### De integratie gebruikt gegevens per dienstverband, maar deze GetConnector haalt velden uit Actuele gegevens per arbeidsverhouding. +### Selectie & filtering -*Checklist*: [Verplicht](#verplicht-essentieel), Meerdere dienstverbanden worden correct verwerkt +#### Langzaam filtertype gebruikt -Actuele gegevens per arbeidsverhouding toont enkel gegevens uit het hoofddienstverband. Aangezien jouw integratie op andere plekken gegevens per dienstverband ophaalt, kan het zijn dat deze GetConnector de verkeerde gegevens toont. Dit kan lastig te traceren fouten veroorzaken. [Lees daarom dit artikel goed door](./howto-bi#medewerkers-en-dienstverband). Schroom niet om te [overleggen met een SystemIntegrator](#kom-in-gesprek). +**Niveau:** ❌ Fout +**Certificerings-impact:** **Blokkeert certificering** -#### Deze GetConnector haalt velden uit een tabel met gegevens per dienstverband, maar nergens in de integratie wordt Dienstverbandnummer opgehaald. +**Waarom zie je dit?** +Het filter maakt gebruik van 'bevat (niet)', 'begint (niet) met' of 'eindigt (niet) op'. -*Checklist*: [Verplicht](#verplicht-essentieel), Meerdere dienstverbanden worden correct verwerkt +**Risico / aandachtspunt** +Indexen worden niet gebruikt → >100× langzamer. -Als een medewerker meerdere dienstverbanden heeft, kan dit dubbele regels tot gevolg hebben. [Lees dit artikel goed door](./howto-bi#medewerkers-en-dienstverband) voor meer informatie over meerdere dienstverbanden. Plan ook gerust een overleg in met een SystemIntegrator. +**Oplossing** +Gebruik gelijkheidsfilters (`=`, `>`, `<` etc.) op indexvelden. -#### Filters +--- -*Checklist*: [Verplicht](#verplicht-essentieel), Filters zijn correct ingesteld +#### Gebruikersfilter aanwezig -Deze sectie toont de filters die in de GetConnector zijn opgeslagen. Controleer of ze voor alle klanten van toepassing zijn. Zo niet, geef dan een filter mee bij de aanroep in de URL. Of besteed er aandacht aan in je implementatiedocument. -Omdat niet alle GetConnectoren de filterautorisatie in de klantomgeving respecteren, is het vaak nodig dat de klant zelf ook aanpassingen moet doen in het filter. +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost of gedocumenteerd worden -#### Langzaam filter +**Waarom zie je dit?** +De GetConnector bevat een vast filter. -*Checklist*: [Verplicht](#verplicht-essentieel), Filters zijn correct ingesteld +**Risico / aandachtspunt** +Het filter is mogelijk niet geschikt voor alle klanten. -Deze GetConnector heeft een filter dat slecht presteert. In een gecertificeerde koppeling is dat niet toegestaan; het is namelijk niet ondenkbaar dat door zo'n filter een GetConnector meer dan 100x zo langzaam wordt. +**Oplossing** +Maak filters dynamisch via URL-parameters of documenteer beperkingen. +--- -#### Indexen +## Autorisatie & Privacy -*Checklist*: [Aanbevolen](#aanbevolen-wenselijk), Alle indexvelden zijn aanwezig in de GetConnectoren -*Checklist*: [Aanbevolen](#aanbevolen-wenselijk), Alle indexvelden zijn zichtbaar, zodat er gesorteerd en gefilterd kan worden +#### Geautoriseerde GetConnector -In deze sectie zie je alle indexen die op de hoofdtabel liggen. Als dat een tabel is met veel regels, zorg er dan voor dat je zoveel mogelijk gebruik maakt van deze indexen. Dat geldt voor filteren en voor sorteren. Als je dat niet doet, kan dat een dramatische impact op de performance van de GetConnector hebben. +**Niveau:** ℹ️ Informatief +**Certificerings-impact:** Documenteren -Gebruik bij voorkeur index 1; dat is de geclusterde, unieke primary key van de tabel. De velden die hier in staan, geven een unieke identificatie van elke regel. Een paar vuistregels: -- Geef altijd een sortering mee in de URL -- Sorteer op zoveel mogelijk velden van index 1, in de opgegeven volgorde van de velden. Dus als er een index ligt op Medewerker, Begindatum: sorteer dan in ek geval op die 2 velden. -- Sommige velden zijn helaas niet direct beschikbaar. Een Systemintegrator kan jouw GetConnector eventueel aanpassen en de verborgen velden toevoegen. -- Als je filtert in de GetConnector, doe dat dan ook zoveel mogelijk op indexvelden. -- Is index 1 niet beschikbaar of niet logisch voor jou? Gebruik dan één van de andere indexen. Let op, die zijn niet altijd uniek. +**Waarom zie je dit?** +De GetConnector respecteert filterautorisatie. +**Wat kun je ermee?** +Bij onverwachte resultaten ligt de oorzaak vaak bij autorisatie. -#### Deze GetConnector heeft 1 of meer vrije velden. +**Actie** +Documenteer gebruikte autorisaties in het implementatiedocument. -*Checklist*: [Best practice](#best-practice-optioneel-maar-aanbevolen), Geen vrije velden zijn aanwezig -*Checklist*: [Implementatiedocument](#checklist-voor-punten-die-je-moet-behandelen-in-je-implementatiedocument), Bied de vrije velden aan als .fie bestand en beschrijf hoe ze geïmporteerd moeten worden +--- -Zie [hierboven](#er-worden-vrije-velden-gebruikt). +#### Autorisaties in implementatiedocument -#### Deze GetConnector heeft velden met een speciaal formaat. +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet opgelost of gedocumenteerd worden -*Checklist*: [Best practice](#best-practice-optioneel-maar-aanbevolen), Geen velden met een speciaal formaat zijn aanwezig +**Waarom zie je dit?** +De integratie maakt gebruik van filterautorisatie. -Je kan in een GetConnector een veld op een andere manier weergeven; bijvoorbeeld een datum/tijd als enkel datum of als een ander datumformaat. In veel gevallen wijzigt daardoor het veldtype. Dat is op zich geen probleem. Als je echter op dit gewijzigde veldtype gaat filteren of sorteren, maakt dat de GetConnector vele malen trager, vooral als er veel gegevens in de brontabel zitten. Dat kan oplopen tot meer dan een factor 100! +**Risico / aandachtspunt** +Als autorisaties niet goed zijn ingericht, krijgt de integratie te veel of te weinig gegevens. -#### Deze GetConnector gebruikt verdichting. Controleer of dat terecht is. +**Oplossing** +Noem in je implementatiedocument: -*Checklist*: [Best practice](#best-practice-optioneel-maar-aanbevolen), Geen velden met een speciaal formaat zijn aanwezig +* Welke autorisatiefilters van toepassing zijn +* Hoe klanten deze in hun omgeving moeten instellen +* Welke rechten de token-gebruiker nodig heeft -Verdichting is een fantastich hulpmiddel om totalen te laten bepalen, of om verdubbelingen te voorkomen. Maar als je je er niet van bewust bent, levert de GetConnector onverwachte resultaten op. -Op grote tabellen heeft het gebruik van verdichting invloed op de performance. +--- -#### Deze GetConnector is geautoriseerd. +#### Privacy-gevoelige velden -*Checklist*: [Implementatiedocument](#checklist-voor-punten-die-je-moet-behandelen-in-je-implementatiedocument), Vermeld welke autorisatie-filters van toepassing zijn +**Niveau:** ⚠️ Waarschuwing +**Certificerings-impact:** Moet gedocumenteerd en onderbouwd worden -Hier zie je welke autorisatiefilters van toepassing zijn op deze specifieke GetConnector. Als een bepaalde autorisatie er niet bij staat, dan wordt die autorisatie niet toegepast op de GetConnector. Mocht je toch gegevens willen tegenhouden, maak dan gebruik van een filter in de GetConnector zelf. +**Waarom zie je dit?** +Er worden velden opgehaald die als privacy-gevoelig zijn gemarkeerd. -#### Deze GetConnector heeft velden die zijn gemarkeerd als privacy-gevoelig. +**Risico / aandachtspunt** +Mogelijk AVG-risico. -*Checklist*: [Implementatiedocument](#checklist-voor-punten-die-je-moet-behandelen-in-je-implementatiedocument), Vermeld welke privacy-gevoelige velden er uitgewisseld worden +**Oplossing** -In Profit is een set met gegevens gekenmerkt als privacy-gevoelig. In deze sectie zie je welke van die velden gebruikt worden in de integratie. Kijk de lijst goed door; ga het gesprek aan met de leverancier als er velden tussen staan die de gekoppelde app niet noodzakelijkerwijs nodig heeft om goed te functioneren. +* Haal alleen strikt noodzakelijke gegevens op +* Benoem deze expliciet in het implementatiedocument +--- +## Afronding +Deze help is bedoeld als **naslagwerk en technische specificatie**, niet als vervanging van persoonlijk overleg. -## Kom in gesprek! +> Kom je een melding tegen die voor jou niet haalbaar is, of heb je een goed onderbouwde reden om hiervan af te wijken? +> Neem contact op met de Systemintegrators – afwijkingen kunnen samen worden beoordeeld en vastgelegd. -Heb je vragen, opmerkingen, bugreports, verbetersuggesties, klachten, etc? Kom bij ons in de lucht! De bedoeling van de auditor is dat het een hulpmiddel is voor jou als partner, voor AFAS zelf en natuurlijk uiteindelijk voor de klant. Ga daarom naar jouw eigen partner-pagina [https://partner.afas.nl/product-partner-portal](https://partner.afas.nl/product-partner-portal), log in met de link rechtsbovenin, en ga naar de tegel `Stel een vraag`. +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). -###### Heb je geen inlog? +*Happy coding!* -Een of meer van jouw collega's zijn beheerder op de klantportal en kunnen jou toevoegen als contactpersoon, zodat jij zelf ook in kunt loggen. \ No newline at end of file +--- \ No newline at end of file diff --git a/markdownpages/profit/nl/app-connector-auditor-partnergegevens.md b/markdownpages/profit/nl/app-connector-auditor-partnergegevens.md new file mode 100644 index 0000000..e24a566 --- /dev/null +++ b/markdownpages/profit/nl/app-connector-auditor-partnergegevens.md @@ -0,0 +1,87 @@ +--- +author: Eric Zwaal +date: 2026-01-25 +index: true +tags: Partner, Administratie, Certificering, Partnergegevens +title: Partnergegevens en koppelingen +--- + +# Partnergegevens en koppelingen + +Dit hoofdstuk beschrijft de secties **Partnergegevens** en **Koppelingen** zoals die bovenaan het AppConnector Auditor-rapport worden getoond. Deze informatie is bedoeld om jou als partner inzicht te geven in je administratieve status bij AFAS en in de voortgang en status van je certificeringen. + +> Deze gegevens zijn alleen zichtbaar voor jou, in de omgeving(en) die horen bij jouw partnerabonnement. Klanten kunnen deze gegevens niet inzien. De gegevens worden rechtstreeks uit de AFAS-partneradministratie gehaald en zijn losgekoppeld van de technische analyse die de AppConnector Auditor uitvoert op je koppelingen. + +--- + +## Partnergegevens + +Deze sectie toont de gegevens die AFAS van jouw organisatie gebruikt binnen het partnerprogramma. Bovenaan staat een korte checklist. + +**Checklist** + +* **Je gegevens bij AFAS zijn compleet** + Dit vinkje is groen als je als partner bekend bent bij AFAS en een actief abonnement hebt. + +* **Je hebt 2 of meer contacten voor partner-/expertcommunicatie** + Deze contactpersonen gebruiken wij voor technische vragen, nieuws en issues rondom jouw koppelingen. + Beheer deze via de [klantportal](https://klant.afas.nl). + +* **Je pentest is geldig** + Dit vinkje is groen zolang de geldigheid van je meest recente pentest niet is verlopen. + +**Getoonde gegevens** + +* **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. +* **Einddatum geldigheid pentest** – Na deze datum voldoe je formeel niet meer aan de partnervereisten. + +> ⚠️ Is je pentest verlopen of dreigt deze te verlopen? Laat tijdig een nieuwe test uitvoeren om gevolgen voor je partnerschap te voorkomen. + +--- + +## Koppelingen + +Onder de partnergegevens worden alle door jou aangemelde koppelingen afzonderlijk getoond. Elke koppeling heeft een eigen sectie en een eigen certificeringstraject. + +**Titel** – `Naam van de koppeling` zoals die op de partnerportal staat. + +**Checklist per koppeling** + +* **Je 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** + Je koppeling wordt getoond op [https://partner.afas.nl/koppelingen](https://partner.afas.nl/koppelingen) als die gecertificeerd is. Je moet de gegevens hebben aangeleverd op [https://partner.afas.nl/mijn-paginas](https://partner.afas.nl/mijn-paginas). + +**Getoonde gegevens per koppeling** + +* **IntegrationId** – Technische identificatie van de koppeling (`_` of `_`). +* **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. +* **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. + +--- + +## Relatie met de AppConnector Auditor + +De AppConnector Auditor combineert deze administratieve gegevens met de technische analyse van je AppConnectoren: + +* Partner- en koppelingstatus bepalen **of** en **hoe** de auditor beschikbaar is. +* De technische meldingen bepalen **wat** er nodig is om certificering te behalen of te behouden. + +Samen vormen ze één geheel: **administratieve randvoorwaarden + technische kwaliteit**. + +--- \ No newline at end of file diff --git a/markdownpages/profit/nl/partner-certification-steps.md b/markdownpages/profit/nl/partner-certification-steps.md index 7e61f68..7f90609 100644 --- a/markdownpages/profit/nl/partner-certification-steps.md +++ b/markdownpages/profit/nl/partner-certification-steps.md @@ -6,23 +6,28 @@ tags: Partner, IntegrationId, Certification, Integration, Configuration title: Certificeringsstappen voor partners --- -*[For English click here](../en/partner-certification-steps)* +[*For English click here*](../en/partner-certification-steps) ## Inleiding Welkom bij het certificeringstraject voor partners! In dit document nemen we je stap voor stap mee op weg naar een succesvolle, gecertificeerde koppeling met AFAS. Volg de stappen in de aanbevolen volgorde en ontdek hoe eenvoudig, leerzaam en waardevol het proces kan zijn. Zet vandaag nog de eerste stap richting certificering en maak van jouw integratie een succesverhaal! -## Beschrijving van de stappen +--- + +## Fase 1: Certificeringstraject starten ### 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). + 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) +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). Uiteraard gaan wij vertrouwelijk om met de resultaten van de pentest of Security Quickscan. Al onze medewerkers zijn gebonden aan een geheimhoudingsverklaring en hebben een Verklaring omtrent gedrag. +--- + ### Contactpersonen aanmaken Log in op de [klantportal](https://klant.afas.nl/contactpersonen-prs/overzicht) en zorg ervoor dat elke collega die betrokken is bij dit traject, als contactpersoon is toegevoegd. Daardoor kunnen ze zelf vragen stellen en acties uitvoeren op de AFAS portals. @@ -30,11 +35,17 @@ Log in op de [klantportal](https://klant.afas.nl/contactpersonen-prs/overzicht) Moet de nieuw toegevoegde contactpersoon de stappen kunnen inzien en afhandelen? Dat moet jouw contactpersoon bij AFAS regelen. +--- + ### Support+ activeren -Door het kostenloos activeren van Support+ geef jij de Systemintegrators automatisch toegang tot jouw testomgeving als je een vraag instuurt. Daardoor kunnen wij je sneller helpen. +Door het kostenloos activeren van Support+ geef jij de Systemintegrators het recht tot toegang tot jouw testomgeving als je een vraag instuurt. Daardoor kunnen wij je sneller helpen. Ga naar https://klant.afas.nl/supportplus en activeer het! +--- + +## Fase 2: Bouwen! + ### Begin met bouwen @@ -46,13 +57,15 @@ Ga naar https://klant.afas.nl/supportplus en activeer het! - Ga naar [AFAS Connect](https://connect.afas.nl/tools/restget) en test de GetConnector door velden in te vullen en op Uitvoeren te klikken. -- Je ziet daar de URL die je moet aanroepen je kunt testen met filters en sortering. +- Je ziet daar de URL die je moet aanroepen en je kunt testen met filters en sortering. - Nu je de basis weet, lees je https://help.afas.nl/help/NL/SE/App_Cnr_Rest_Api.htm voor alle nitty-gritty details. *Happy coding*! +--- + ### Specialisatiecursus: Connectoren Schrijf je in voor een cursus waarin je alles leert over de aanroep van onze API. Er is veel aandacht voor het maken van je eigen [GetConnectoren](#getconnectoren-aanleveren). @@ -61,6 +74,8 @@ Deze cursus is gratis voor 1 collega. Kijk op https://klant.afas.nl/opleiding/sp **Maak je integraties voor andere partners?** In dat geval moet er in jouw bedrijf minimaal 1 collega de experttoets "Integraties" met ten minste een 7 afgerond hebben. Neem contact op met de Systemintegrator als dit voor jou van toepassing is. +--- + ### IntegrationId meesturen Stuur een speciale HTTP-header mee bij alle aanroepen naar de AFAS API. Deze header identificeert de aanroepen vanuit jouw integratie en is dus altijd hetzelfde. @@ -69,18 +84,19 @@ Stuur een speciale HTTP-header mee bij alle aanroepen naar de AFAS API. Deze hea Het specifieke IntegrationId voor jouw integratie vind je in de taak en in de [AppConnector Auditor](./app-connector-auditor-partner). +--- ### GetConnectoren aanleveren -Om gegevens uit Profit te halen, heb je GetConnectoren nodig. In AFAS Profit worden veel GetConnectoren standaard meegeleverd, maar voor een gecertificeerde integratie moet je een eigen set GetConnectoren maken. [Lees hier waarom.](./app-connector-auditor-partner#dit-is-een-meegeleverde-profit-getconnector-maak-hier-een-eigen-kopie-van) +Om gegevens uit Profit te halen, heb je GetConnectoren nodig. In AFAS Profit worden veel GetConnectoren standaard meegeleverd, maar voor een gecertificeerde integratie moet je een eigen set GetConnectoren maken. [Lees hier waarom.](./app-connector-auditor-partner#STRUCT-27) -#### 1. Bepaal welke gegevens je nodig hebt +#### Bepaal welke gegevens je nodig hebt De koppeling met AFAS moet zoveel mogelijk standaard zijn, anders is certificering niet mogelijk. Zorg ervoor dat jouw klanten hooguit 10% af hoeven te wijken van de gecertificeerde GetConnectoren. Houd daarbij in gedachten dat het eenvoudiger is om niet-gebruikte velden uit te schakelen in de GetConnector of te negeren in het resultaatset. Nieuwe velden toevoegen kost veel meer tijd en moeite. Bovendien bestaat de kans dat je fouten introduceert. -#### 2. Maak je eigen GetConnectoren +#### Maak je eigen GetConnectoren Een eigen GetConnector maken is niet moeilijk ([lees dit help artikel maar](https://help.afas.nl/help/NL/SE/App_Cnr_XML_Get_Build.htm)), maar het vinden van de juiste velden kan best een uitdaging zijn. AFAS Profit bevat bijna 4.000 tabellen met bijna 200.000 velden. En dat aantal groeit jaarlijks! - Werk je samen met een *launching customer* of met iemand die ervaring heeft in het bouwen van een GetConnector? Maak gebruik van die kennis! @@ -88,19 +104,20 @@ Een eigen GetConnector maken is niet moeilijk ([lees dit help artikel maar](http - Heb je voor jouw koppeling maar een paar GetConnectoren nodig of kom je er niet uit? Wij helpen je graag met bouwen. Vaak is een uur al voldoende, waarin we in een Teams sessie samen in jouw omgeving ([dankzij Support+](#support-activeren)) de juiste GetConnectoren maken. [Stuur een aanvraag in](#contact) als je van onze hulp gebruik wilt maken. -#### 3. Controleer de GetConnectoren +#### Controleer de GetConnectoren met de **AppConnector Auditor** -De GetConnectoren maak je beschikbaar voor de API door in jouw eigen testomgeving een AppConnector in te richten; net zoals een klant dat zou doen. Vanuit die AppConnector run je de [AppConnector Auditor](./app-connector-auditor-partner) en los je de gevonden issues op. Kom je er niet uit? [Stuur een aanvraag in](#contact). +De GetConnectoren maak je beschikbaar voor de API door in jouw eigen testomgeving een AppConnector in te richten; net zoals een klant dat zou doen. Vanuit die AppConnector run je de [**AppConnector Auditor**](./app-connector-auditor-partner) en los je de gevonden fouten op. De waarschuwingen moet je oplossen of kunnen onderbouwen. -#### 4. Wij doen een laatste controle +#### Wij doen een laatste controle Zijn alle punten in de AppConnector Auditor aangevinkt? Lever de GetConnectoren dan bij ons aan voor een laatste controle. Stuur ze op als bijlage bij een reactie op de taak. -#### 5. Maak je GetConnectoren beschikbaar voor de klant +#### Maak je GetConnectoren beschikbaar voor de klant Zorg ervoor dat onze gezamenlijke klanten gebruikmaken van de gecontroleerde GetConnectoren. Dus maak ze bijvoorbeeld beschikbaar als download en geef die aan de klanten om te importeren, zie [Implementatiedocument aanleveren](#implementatiedocument-aanleveren). +--- ### Implementatiedocument aanleveren @@ -111,6 +128,9 @@ Als basis voor het document gebruik je deze help pagina: https://partner.afas.nl Lever het document in als bijlage bij een reactie op de taak. Of nog beter: maak er een webpagina van, die je altijd up to date kunt houden. Zet de link in een reactie. +--- + +## Fase 3: Opleveren! ### Demo geven @@ -120,6 +140,8 @@ Ben je zover? Dan zijn wij heel benieuwd naar het resultaat en krijgen graag een Als de demo akkoord is kun je door naar het volgende onderdeel. +--- + ### Publicatie op de partnerportal Is de [demo](#demo-geven) akkoord? @@ -131,6 +153,8 @@ Ga dan naar https://partner.afas.nl/mijn-paginas en volg de instructies zodat jo Je mag vanaf nu ook naam en logo van AFAS op jouw website gebruiken. Op [www.afas.nl/huisstijl](www.afas.nl/huisstijl) lees je hoe dat werkt en waar je op moet letten. Ook kun je daar de juiste logo's downloaden. +--- + ### 5 referenties aanleveren Een koppeling zonder klanten is geen koppeling. Om onze gezamenlijke klanten zekerheid te bieden dat de integratie goed getest is en soepel loopt, is je certificering pas compleet als je 5 of meer gezamenlijke klanten met jouw koppeling bedient. Dit controleren we aan de hand van het IntegrationId ([zie hierboven](#integrationid-meesturen)). @@ -138,13 +162,17 @@ Een koppeling zonder klanten is geen koppeling. Om onze gezamenlijke klanten zek Ben je trots op je klanten? Stuur dan referenties in van de klanten waar de koppeling naar tevredenheid loopt. Dat doe je op https://partner.afas.nl/aanmaken-aanvraag-partnerportal/referentie. -### Datastroomdiagram van de API-integratie +--- + +### Datastroomdiagram van de API-integratie aanleveren Een datastroomdiagram van een API‑integratie laat zien hoe gegevens tussen systemen bewegen. Het richt zich niet op de interne werking van de systemen, maar op welke data wordt uitgewisseld (bijvoorbeeld medewerkergegevens of verlofboekingen), in welke richting, via welke API‑aanroepen en door welke gebeurtenis of planning dit wordt gestart. Zo wordt helder welke endpoints gebruikt worden, wie de bron is, wie de ontvanger is en onder welke omstandigheden de uitwisseling plaatsvindt. Dit is belangrijk omdat het misverstanden voorkomt over wie welke data levert en ontvangt, en omdat het ontwikkelaars en beheerders helpt de integratie goed te ontwerpen, bouwen en beheren. Het diagram maakt impactanalyses bij wijzigingen eenvoudiger, omdat je direct ziet welke stromen geraakt worden, en het fungeert als duidelijke, blijvende documentatie voor beheer en toekomstige uitbreidingen. Bovendien biedt het een concreet hulpmiddel om de koppeling te optimaliseren, bijvoorbeeld door overbodige datastromen te schrappen of efficiëntere uitwisselmomenten te kiezen. +--- + ## Contact Wij staan voor je klaar om ervoor te zorgen dat jouw koppeling soepel loopt en de juiste gegevens ophaalt. Ook bij andere vragen helpen we je graag. Stuur geen mail, maar maak een aanvraag via de portal! Dat werkt eenvoudig: