common-gateway/zgw-to-open-belasting-bundle
Installation Add the bundle to your Symfony project via Composer:
composer require common-gateway/zgw-to-open-belasting-bundle
Enable the bundle in config/bundles.php:
return [
// ...
CommonGateway\ZgwToOpenBelastingBundle\ZgwToOpenBelastingBundle::class => ['all' => true],
];
Configuration Publish the default configuration:
php bin/console config:dump-reference CommonGateway\ZgwToOpenBelastingBundle
Configure the bundle in config/packages/zgw_to_open_belasting.yaml:
zgw_to_open_belasting:
api_client: '%env(OPEN_BELASTINGEN_API_URL)%'
api_token: '%env(OPEN_BELASTINGEN_API_TOKEN)%'
zgw_client: '@zgw_client' # Your ZGW client service ID
First Use Case: Transform a ZGW Case to Open Belasting Use the transformer service to convert a ZGW case to an Open Belasting API payload:
use CommonGateway\ZgwToOpenBelastingBundle\Service\ZgwToOpenBelastingTransformer;
class MyController extends AbstractController
{
public function transformZGWCase(ZgwToOpenBelastingTransformer $transformer, ZGWCase $zgwCase): JsonResponse
{
$openBelastingPayload = $transformer->transformCase($zgwCase);
return $this->json($openBelastingPayload);
}
}
Case Transformation
ZgwToOpenBelastingTransformer to convert ZGW cases (e.g., ZGWCase, ZGWObjection) into Open Belasting API-compatible payloads.$objectionPayload = $transformer->transformObjection($zgwObjection);
API Integration
OpenBelastingApiClient service to send transformed data to the Open Belasting API:
$client = $this->container->get('zgw_to_open_belasting.api_client');
$response = $client->createAssessment($payload);
Event-Driven Processing
ZGWCaseCreatedEvent) and trigger transformations automatically:
// In a listener
public function onCaseCreated(ZGWCaseCreatedEvent $event)
{
$transformer = $this->container->get(ZgwToOpenBelastingTransformer::class);
$payload = $transformer->transformCase($event->getCase());
$this->openBelastingApiClient->createAssessment($payload);
}
ZgwToOpenBelastingTransformer service:
# config/services.yaml
services:
App\Service\CustomZgwToOpenBelastingTransformer:
decorates: 'zgw_to_open_belasting.transformer'
arguments: ['@.inner']
BatchTransformer:
$batchPayloads = $transformer->transformBatch($zgwCases);
API Rate Limits
OpenBelastingApiClient calls.use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
try {
$response = $client->request('POST', '/assessments', [
'json' => $payload,
]);
} catch (TransportExceptionInterface $e) {
// Retry logic here
}
Schema Mismatches
SchemaValidator to catch issues early:
$validator = $this->container->get('zgw_to_open_belasting.schema_validator');
$errors = $validator->validateCase($zgwCase);
if (!empty($errors)) {
throw new \RuntimeException('Invalid ZGW case for Open Belasting: ' . implode(', ', $errors));
}
Token Expiry
401 Unauthorized responses by refreshing the token or reconfiguring the client.debug: true in the bundle config to log detailed transformation steps:
zgw_to_open_belasting:
debug: true
$this->logger->info('Open Belasting payload', ['payload' => $payload]);
Custom Transformers
ZgwToOpenBelastingTransformerInterface:
class CustomObjectionTransformer implements ZgwToOpenBelastingTransformerInterface
{
public function transform($zgwData): array
{
// Custom logic
return $mappedData;
}
}
zgw_to_open_belasting.transformer.Additional API Endpoints
OpenBelastingApiClient to support custom endpoints:
class ExtendedApiClient extends OpenBelastingApiClient
{
public function customEndpoint(array $data): ResponseInterface
{
return $this->client->request('POST', '/custom', ['json' => $data]);
}
}
config/services.yaml.Event Listeners
ZgwToOpenBelastingTransformedEvent to intercept or modify transformed data:
public static function getSubscribedEvents()
{
return [
ZgwToOpenBelastingTransformedEvent::class => 'onTransformed',
];
}
public function onTransformed(ZgwToOpenBelastingTransformedEvent $event)
{
$event->setPayload($this->modifyPayload($event->getPayload()));
}
How can I help you explore Laravel packages today?