Missing / incorrect functionality for DomesticHotWaterProduction (io:AtlanticDomesticHotWaterProductionV2_CE_FLAT_C2_IOComponent)

Describe the bug
Can't enable/disable the away mode (UI button changes, but no change on the heater)
Even switching to auto does not force quit the away mode, I need to do it with the heater buttons.
Enabling Away mode enables it for both heaters (is not applied only to the selected one)
Boost option is not displayed
No # of showers (target nor remaining)
To Reproduce
Steps to reproduce the behavior:

Click Away Mode so it appears as ON
Click Away Mode so it appears as OFF

Expected behavior
Away Mode should turn ON or OFF
Environment (please complete the following information):

Hub: Cozytouch
ha-tahoma version: 2.4.8
Device: Thermor Malicio 2

{
	"commands": [{
		"commandName": "delayedStopIdentify",
		"nparams": 1
	}, {
		"commandName": "getName",
		"nparams": 0
	}, {
		"commandName": "identify",
		"nparams": 0
	}, {
		"commandName": "refreshAbsenceEndDate",
		"nparams": 0
	}, {
		"commandName": "refreshAbsenceMode",
		"nparams": 0
	}, {
		"commandName": "refreshAbsenceStartDate",
		"nparams": 0
	}, {
		"commandName": "refreshBoostEndDate",
		"nparams": 0
	}, {
		"commandName": "refreshBoostMode",
		"nparams": 0
	}, {
		"commandName": "refreshBoostStartDate",
		"nparams": 0
	}, {
		"commandName": "refreshBottomTankWaterTemperature",
		"nparams": 0
	}, {
		"commandName": "refreshManufacturerName",
		"nparams": 0
	}, {
		"commandName": "refreshMiddleWaterTemperatureIn",
		"nparams": 0
	}, {
		"commandName": "refreshTargetTemperature",
		"nparams": 0
	}, {
		"commandName": "refreshWaterConsumption",
		"nparams": 0
	}, {
		"commandName": "refreshWaterTargetTemperature",
		"nparams": 0
	}, {
		"commandName": "refreshWaterTemperature",
		"nparams": 0
	}, {
		"commandName": "setAbsenceEndDate",
		"nparams": 1
	}, {
		"commandName": "setAbsenceMode",
		"nparams": 1
	}, {
		"commandName": "setAbsenceStartDate",
		"nparams": 1
	}, {
		"commandName": "setBoostEndDate",
		"nparams": 1
	}, {
		"commandName": "setBoostMode",
		"nparams": 1
	}, {
		"commandName": "setBoostStartDate",
		"nparams": 1
	}, {
		"commandName": "setComfortTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setDateTime",
		"nparams": 1
	}, {
		"commandName": "setEcoTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setExpectedNumberOfShower",
		"nparams": 1
	}, {
		"commandName": "setFrostProtectionTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setName",
		"nparams": 1
	}, {
		"commandName": "setTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setWaterTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setWaterTemperature",
		"nparams": 1
	}, {
		"commandName": "startIdentify",
		"nparams": 0
	}, {
		"commandName": "stopIdentify",
		"nparams": 0
	}, {
		"commandName": "wink",
		"nparams": 1
	}, {
		"commandName": "refreshExpectedNumberOfShower",
		"nparams": 0
	}, {
		"commandName": "pairOneWayController",
		"nparams": 2
	}, {
		"commandName": "refreshAntiLegionellosis",
		"nparams": 0
	}, {
		"commandName": "refreshAwayModeDuration",
		"nparams": 0
	}, {
		"commandName": "refreshBoilerInstallationOption",
		"nparams": 0
	}, {
		"commandName": "refreshBoostModeDuration",
		"nparams": 0
	}, {
		"commandName": "refreshCurrentOperatingMode",
		"nparams": 0
	}, {
		"commandName": "refreshDHWCapacity",
		"nparams": 0
	}, {
		"commandName": "refreshDHWError",
		"nparams": 0
	}, {
		"commandName": "refreshDHWMode",
		"nparams": 0
	}, {
		"commandName": "refreshElectricalExtraManagement",
		"nparams": 0
	}, {
		"commandName": "refreshExtractionOption",
		"nparams": 0
	}, {
		"commandName": "refreshInstallation",
		"nparams": 0
	}, {
		"commandName": "refreshMiddleWaterTemperature",
		"nparams": 0
	}, {
		"commandName": "refreshOperatingModeCapabilities",
		"nparams": 0
	}, {
		"commandName": "refreshOperatingRange",
		"nparams": 0
	}, {
		"commandName": "refreshOperatingTime",
		"nparams": 0
	}, {
		"commandName": "refreshProgrammingSlots",
		"nparams": 0
	}, {
		"commandName": "refreshRateManagement",
		"nparams": 0
	}, {
		"commandName": "refreshSmartGridOption",
		"nparams": 0
	}, {
		"commandName": "setAntiLegionellosis",
		"nparams": 1
	}, {
		"commandName": "setAwayModeDuration",
		"nparams": 1
	}, {
		"commandName": "setBoilerInstallationOption",
		"nparams": 1
	}, {
		"commandName": "setBoostModeDuration",
		"nparams": 1
	}, {
		"commandName": "setCurrentOperatingMode",
		"nparams": 1
	}, {
		"commandName": "setDHWMode",
		"nparams": 1
	}, {
		"commandName": "setElectricalExtraManagement",
		"nparams": 1
	}, {
		"commandName": "setExtractionOption",
		"nparams": 1
	}, {
		"commandName": "setHaltedTargetTemperature",
		"nparams": 1
	}, {
		"commandName": "setInstallation",
		"nparams": 1
	}, {
		"commandName": "setOperatingRange",
		"nparams": 1
	}, {
		"commandName": "setProgrammingSlots",
		"nparams": 1
	}, {
		"commandName": "setRateManagement",
		"nparams": 1
	}, {
		"commandName": "setSmartGridOption",
		"nparams": 1
	}, {
		"commandName": "unpairAllOneWayControllers",
		"nparams": 0
	}, {
		"commandName": "unpairOneWayController",
		"nparams": 2
	}],
	"states": [{
		"type": "DataState",
		"qualifiedName": "core:AbsenceEndDateState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:AbsenceStartDateState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:BoostElectricPowerConsumptionState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:BoostEndDateState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:BoostModeDurationState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:BoostStartDateState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:BottomTankWaterTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:ComfortTargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:ControlWaterTargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:DHWPSoftwareVersionState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:DateTimeState"
	}, {
		"values": ["good", "low", "normal", "verylow"],
		"type": "DiscreteState",
		"qualifiedName": "core:DiscreteRSSILevelState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:EcoTargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:ExpectedNumberOfShowerState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:FrostProtectionTargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:HaltedTargetTemperatureState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:HeatingStatusState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:ManufacturerNameState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:MaximalShowerManualModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:MaximalTemperatureManualModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:MiddleWaterTemperatureInState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:MinimalShowerManualModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:MinimalTemperatureManualModeState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:NameState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:NumberOfShowerRemainingState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:NumberOfTankState"
	}, {
		"values": ["antifreeze", "auto", "away", "boost", "eco", "frostprotection", "manual", "max", "normal", "off", "on", "prog", "program"],
		"type": "DiscreteState",
		"qualifiedName": "core:OperatingModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:PowerHeatElectricalInState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:PriorityLockTimerState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:ProgrammingAvailableState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:RSSILevelState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:SecuredPositionTemperatureState"
	}, {
		"values": ["available", "unavailable"],
		"type": "DiscreteState",
		"qualifiedName": "core:StatusState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:StopRelaunchState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:TargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:TemperatureState"
	}, {
		"type": "DataState",
		"qualifiedName": "core:V40WaterVolumeEstimationState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:VersionState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:WaterConsumptionState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:WaterTargetTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "core:WaterTemperatureState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:AntiLegionellosisState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:AwayModeDurationState"
	}, {
		"values": ["boilerOptimising", "boilerPriority", "heatPumpOptimising", "heatPumpPriority"],
		"type": "DiscreteState",
		"qualifiedName": "io:BoilerInstallationOptionState"
	}, {
		"values": ["off", "on", "prog"],
		"type": "DiscreteState",
		"qualifiedName": "io:DHWAbsenceModeState"
	}, {
		"values": ["off", "on", "prog"],
		"type": "DiscreteState",
		"qualifiedName": "io:DHWBoostModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:DHWCapacityState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:DHWErrorState"
	}, {
		"values": ["autoMode", "manualEcoActive", "manualEcoInactive"],
		"type": "DiscreteState",
		"qualifiedName": "io:DHWModeState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:ElectricBoosterOperatingTimeState"
	}, {
		"values": ["auto", "deactive"],
		"type": "DiscreteState",
		"qualifiedName": "io:ElectricalExtraManagementState"
	}, {
		"values": ["fastExtractionSpeed", "lowExtractionSpeed", "noExtraction"],
		"type": "DiscreteState",
		"qualifiedName": "io:ExtractionOptionState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:HeatPumpOperatingTimeState"
	}, {
		"values": ["extraBoiler", "extraSolar", "onlyThermodynamic"],
		"type": "DiscreteState",
		"qualifiedName": "io:InstallationState"
	}, {
		"type": "ContinuousState",
		"qualifiedName": "io:MiddleWaterTemperatureState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:OperatingModeCapabilitiesState"
	}, {
		"values": ["pac24h_elec24h", "pacProg_elecProg"],
		"type": "DiscreteState",
		"qualifiedName": "io:OperatingRangeState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:PowerConsumptionFanState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:PowerHeatElectricalState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:PowerHeatPumpState"
	}, {
		"values": ["comfortLevel1", "comfortLevel2", "comfortLevel3", "comfortLevel4", "environmentProtection", "humanProtection", "userLevel1", "userLevel2"],
		"type": "DiscreteState",
		"qualifiedName": "io:PriorityLockLevelState"
	}, {
		"values": ["LSC", "SAAC", "SFC", "UPS", "externalGateway", "localUser", "myself", "rain", "security", "temperature", "timer", "user", "wind"],
		"type": "DiscreteState",
		"qualifiedName": "io:PriorityLockOriginatorState"
	}, {
		"type": "DataState",
		"qualifiedName": "io:ProgrammingSlotsState"
	}, {
		"values": ["forbidden", "no", "recommended", "unsuitable", "wanted"],
		"type": "DiscreteState",
		"qualifiedName": "io:RateManagementState"
	}, {
		"values": ["active", "deactive"],
		"type": "DiscreteState",
		"qualifiedName": "io:SmartGridOptionState"
	}],
	"dataProperties": [{
		"value": "500",
		"qualifiedName": "core:identifyInterval"
	}],
	"widgetName": "DomesticHotWaterProduction",
	"uiClass": "WaterHeatingSystem",
	"qualifiedName": "io:AtlanticDomesticHotWaterProductionV2_CE_FLAT_C2_IOComponent",
	"type": "ACTUATOR"
}

Thanks for reporting. Could you perhaps turn on debug mode and share your device strings?
See https://github.com/iMicknl/ha-tahoma#device-not-working-correctly.

Sure :
For the DHWP Actuator:
Firmware: io:AtlanticDomesticHotWaterProductionV2_CE_FLAT_C2_IOComponent
For the Cozytouch hub:
Firmware: 2020.7.4

I have the same behavior with my water heater (io:AtlanticDomesticHotWaterProductionIOComponent) and cozytouch hub.

@tillstaff are you able to add the right commands here perhaps? :)

Here are some commands :
Away mode :
                    {
                        "command": "setCurrentOperatingMode",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NO_FAILURE",
                        "parameters": [
                            {
                                "absence": "on",
                                "relaunch": "off"
                            }
                        ],
                        "rank": 2,
                        "state": "COMPLETED"
                    },
                    {
                        "command": "setAwayModeDuration",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NO_FAILURE",
                        "parameters": [
                            2
                        ],
                        "rank": 3,
                        "state": "COMPLETED"
                    },

Away mode off :
                    {
                        "command": "setCurrentOperatingMode",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NONEXEC_OTHER",
                        "parameters": [
                            {
                                "absence": "off",
                                "relaunch": "off"
                            }
                        ],
                        "rank": 3,
                        "state": "FAILED"
                    },
                    {
                        "command": "setAwayModeDuration",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NO_FAILURE",
                        "parameters": [
                            0
                        ],
                        "rank": 4,
                        "state": "COMPLETED"
                    },

Boost mode for 2 days (you can select from 1 to 7 days) :
                    {
                        "command": "setCurrentOperatingMode",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NONEXEC_OTHER",
                        "parameters": [
                            {
                                "absence": "off",
                                "relaunch": "on"
                            }
                        ],
                        "rank": 0,
                        "state": "FAILED"
                    }
                    {
                        "command": "setBoostModeDuration",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NO_FAILURE",
                        "parameters": [
                            2
                        ],
                        "rank": 0,
                        "state": "COMPLETED"
                    }

Boost mode off :
                    {
                        "command": "setCurrentOperatingMode",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NONEXEC_OTHER",
                        "parameters": [
                            {
                                "absence": "off",
                                "relaunch": "off"
                            }
                        ],
                        "rank": 0,
                        "state": "FAILED"
                    }
                    {
                        "command": "setBoostModeDuration",
                        "deviceURL": "io://xxxx-xxxx-xxxx/14301872#1",
                        "dynamic": false,
                        "failureType": "NO_FAILURE",
                        "parameters": [
                            0
                        ],
                        "rank": 0,
                        "state": "COMPLETED"
                    }

@tillstaff do you want to give this a try, or should I make the changes? :)

@iMicknl I give a try but I don't know why the "turn away mode off" is not working : https://github.com/iMicknl/ha-tahoma/blob/98e88de33ca16adae231cd91b842bf2db975c3b2/custom_components/tahoma/water_heater_devices/domestic_hot_water_production.py#L126-L134
The command is ok but it seems the command is not sent.
And for the boost command, I don't know how to add a preset!
So you should make the changes!

@iMicknl  First of all, thanks for your work!
Here's the status with the latest version:

Boost mode cannot be turned on from HA.
If Boost mode is turned on via Cozytouch app (or on the heater directly) turning off Boost mode is unreliable from HA (I managed only once out of 30+ tries).
Away Mode does not work

As a suggestion, wouldn't it be easier to have the Boost mode as an I/O switch (same as for the away mode)?
I'm at your disposal if you need more testing.

Hi,
I saw the water heater on away mode this morning (not good for the WAF as you can imagine).
I’ll do more testing to find out where the issue is (request delay, display issue on HA and Cozytouch, etc).

Hi,
Was the change removed? On the master I can't seem to find the boost option anymore.
Thanks,

@creativeosmose "boost" option is only available with the test build of the PR #407 and is not working well for now

Indeed, it is not yet in the main build. We will only include it when it is fully functional, and as mentioned it isn't yet..
We don't have a lot of bandwidth currently to fix this, especially since we don't own this device.

Hi,
No problem, I understand. Thanks again for your work.
I tried just now with the latest #407 changes:

High demand does not activate boost mode on the water heater (HA UI works, sometimes requires selecting twice)
Away mode does not activate boost mode on the water heater (HA UI works, first try)
Manual/Eco and Auto still work

How can I help you? (logs? specific tests?)
Thanks,

Hi,
Quick addition, setting the water heater to boost from the Cozytouch app does apply high demand on HA.

Hi, Issue is still present.

Hi @iMicknl,
Thanks for reopening this issue.
I can confirm the previous issues are still present.
I understand that the config is specific per device - I can provide testing results if you have the bandwidth to implement the fixes.
Thanks,

Issue is still present.

Would you be able to work with me via Discord (iMick #1903) so we can speed up the development? Easiest would be if you could temporary change your password and send your credentials, so I can do some live debugging on my machine.
I have some time this week, so perhaps I can finally tackle this for you. 😉

@iMicknl sorry for the delayed feedback.
Sure we can discuss on discord if you want.
For the credential sharing, let's say the WAF will be low, especially if we cut off the hot water :)

@creativeosmose could you give https://github.com/iMicknl/ha-tahoma/pull/617 a try :)

@iMicknl strange, on master I get : "Invalid authentication" for all versions (master, 2.9, etc) 2.8.2 works.
Trying with 2.8.2, everything works perfectly! 👍
Some remarks : it's possible to change the expected # while being in Auto (so it doesn't change anything) - not an issue, more a UX question.
PS.
By the way, do you know if these can be applied as a button using the homekit integration? (currently dhwp appears with a temperature scroller (ie. 50°C) - I can open a dedicated ticket, it'll be easier to track.


add hideUpload permission to hide the Upload page from the user

Similar to the hideFiles and hideStats permission, this would be a hideUpload permission that would hide the Upload page from the user.

Generally, yes. In my particular case, I would set hideUpload for all users as don't want any users to be able to upload PCAP, but I thought if it worked like hideFiles and hideStats it would satisfy my case as well.

If you don't enable upload it is already hidden for all users.

Well how about that. I guess somebody should RTFM. If you don't think this ability (some users being able to upload but not others) is useful outside of my use case, then feel free to close this. Thanks.

https://arkime.com/settings#uploadRoles added to 5.0


Add feature to automatically clear the cache when version upgrade changes format

We've run into an issue a couple of times now where a structure change causes the cache to become invalid/corrupt. It would be good if we could have a "cache format version", and automatically clean the cache if the format changes. See #282

I think may be by some way we can automate have a hash version of an empty struct, then we can use it as version hash, and this new implementation should store this hash to the cached data. Anytime, we can generate a new hash for current struct and compare with the hash of struct which is storing in cache. So we can conclude to clear cache or just keep it by the result of comparison.

How does golang hashing (of struct instances) work?  Would the hash change if a field changed name, but not format?
Could we hash the type object?   Or use reflection to generate a unique description of the struct, maybe hashing that, and compare that?

Oh, sorry because that was a draft thought.
I just tried and seems it could use for both field change and field type, by reflection. Please play with it: https://goplay.tools/snippet/95AlZD8EVmA
The idea of collecting field name came from here: https://stackoverflow.com/a/61465755/1155318

Closed by https://github.com/cointop-sh/cointop/pull/302


Incoming Documents Overview

For the uninitiated, this 'overview' is pretty vague on the overall process.  It tends to direct people to the fact that 'incoming documents' relate to General Ledger transactions (i.e. the setup requires GL batch info), but within BC itself there's a number of areas where incoming documents are referenced (i.e. sales order & purchase order).
What is unclear in this overview is the various 'pathways' into incoming documents.
For example:

Can I email an incoming SALES ORDER document directly into BC?  If so how and to what address?  Is there a different address for sales documents vs purchase documents?
Are Incoming Documents ONLY sent to General Ledger Journals or can they be used to create sales orders and purchase invoices?  (I don't think this is the case, but it's unclear)
If my incoming document is a PDF in TEXT format (i.e. it's already 'readable') does an incoming document need to go through the OCR pathway or is there an alternative?

Seems like a really great feature, to be able to 'receive' incoming documents into an inbox and then either automatically or manually process these, but the implementation steps outlined on this page (and the 'setup incoming documents' page) don't really establish an easy pathway.  Most people are going to want to ingest via email.  Given you can ingest by taking a photo - surely email is an option (or is it not?).

Document details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 7e0acd95-5498-9acf-1d97-698e76d99d7d
Version Independent ID: 55e87498-2992-45cb-2956-53ddbec08d7e
Content: Work with Incoming Documents - Business Central
Content Source: business-central/across-income-documents.md
Service: dynamics365-business-central
GitHub Login: @SorenGP
Microsoft Alias: edupont

Hello Chris,
Thank you for your feedback! This particular feature is not well described in the docs, I admit, but unless you make changes to it, it's designed to process OCR documents, very specifically. It is not intended to support email or other ways of sharing content. You can get some more information about that here: https://docs.microsoft.com/dynamics365/business-central/across-how-use-ocr-pdf-images-files.
This process starts with connecting to a service that can scan artifacts and turn them into OCR documents. You can use the feature to convert G/L journal lines ("incoming documents") into purchase invoices, for example: https://docs.microsoft.com/dynamics365/business-central/purchasing-how-to-receive-and-convert-electronic-documents
You can exchange documents with the OCR service provider by email if they support that.
I agree that there is no easy pathway with this feature. The docs don't really help either, I'll admit. I'll ask someone to consolidating the content and maybe even find someone who can help with core scenarios later this year. I know that's not what you're asking for, but it's the best I can offer at this time.....
You can get an overview of the different ways the base application can process electronic data here: https://docs.microsoft.com/dynamics365/business-central/across-exchange-data
But in many cases, you might want to take a look at sharing documents and other files using OneDrive: https://docs.microsoft.com/dynamics365/business-central/across-onedrive-overview

Well, in all fairness, you rarely need to scan sales documents because you generate those yourself in whatever format you need. It's then, at least conceptually, up to your customers to convert your sales documents into purchase documents on their side. And if they use Business Central, then they can use this feature to do that for them.
Anyway, you might want to ask the community for tips on how to support your scenarios. For example, you could use Power Automate flows to create sales documents based on received purchase orders, which becomes even easier with the May update (20.1).
I'm closing this Issue, not because it's resolved, but because the docs do (kind of) say what is supported out-of-the-box, and you need other scenarios that are not covered.

@chris7777au I've talked to one of our product owners, and they suggest that you submit a feature request here: https://aka.ms/businesscentralfeedback


test_pr_bot

Issue #, if available:
Will use this to test pr bot functionality. Please do not merge.
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/do-e2e-tests


error when trying to install the playbooks in the master node

ERROR! the playbook: /home/vagrant/openshift-ansible/playbooks/prerequisites.yml could not be found
*Could you please provide me with both playbooks so i can put them manually in the master node and thank you .

Please provide the following information:

openshift release version that you choose to deploy
Did you oc-up.sh to deploy your cluster?

Hello @eliu  thanks for the reply, no i did it manually as the guide shows
I choose the 3.9 release

The prerequisites.yml should be there if you choose to deploy release-3.9 unless you failed to clone the openshift-ansible repo into your virtual machine. could you please check if the folder openshift-ansible exists in /home/vagrant ?