I need to be able to have an initial “setup” time when a vehicle arrives at any site. Think of it as finding a car park or dealing with the paper work. It is kind of an “activity” level constraint although it only occurs on the first activity on the site if multiple activities are scheduled. So regardless of how many activities are scheduled for that vehicle at that site at that time there will be just one setup time added at the start.
I had a similar problem and did what @braktar suggested.
You can even manage more complext scenarios with it like having a
Preparation time before tour start
Rework time at tour end
Load / unload time at depots
Setup times at services (individually or generally)
…
Create your own AbstractForwardVehicleRoutingTransportCosts. Have a look at the FastVehicleRoutingTransportCostsMatrix.java for a high performant implementation. Overwrite the getTransportTime / getTransportCost methods and add your specific times on top depening on the current Location.