ANAF PHP is a PHP API client that allows you to interact with the ANAF Web Services.
Requires PHP 8.1+
First, install ANAF via the Composer package manager:
composer require andalisolutions/anaf-php
Then, you can create ANAF
client in two ways:
/*
* Client used for unauthenticated requests
*/
$client = Anaf::client();
/*
* Client used for authenticated requests
*/
$authorizedClient = Anaf::authorizedClient($apiKey);
/*
* Build a client with a specific base URI, staging and more. Example:
*/
$factoryClient = Anaf::factory()
->withApiKey($apiKey)
->staging()
->withBaseUri('https://webservicesp.anaf.ro')
->make();
You can obtain API key using oauth2-anaf package.
- Obtaining public information in the financial statements/annual accounting reports related to economic agents. (Docs)
- Get info about companies using
TAX IDENTIFICATION NUMBER
(CUI/Vat Number). (Docs) - Get info about taxpayers who are registered in the Register of farmers who apply the special regime (Docs)
- Get info about taxpayers who are registered in the Register of religious entities/units (Docs)
- Accessing the functionalities offered by the SPV (Docs)
- The national system regarding the electronic invoice RO e-Factura (Docs)
- The integrated electronic system RO e-Transport (Docs)
Balance Sheet Resource
Get public information in the financial statements/annual accounting reports related to economic agents
$balanceSheet = $client()->balanceSheet()->create([
'cui' => '12345678',
'an' => 2019,
]);
$balanceSheet->year;
$balanceSheet->tax_identification_number;
$balanceSheet->company_name;
$balanceSheet->activity_code;
$balanceSheet->activity_name;
$balanceSheet->indicators; // array
$balanceSheet->indicators['AVERAGE_NUMBER_OF_EMPLOYEES']->value;
$balanceSheet->indicators['NET_LOSS']->value;
$balanceSheet->indicators['NET_PROFIT']->value;
$balanceSheet->indicators['GROSS_LOSS']->value;
$balanceSheet->indicators['GROSS_PROFIT']->value;
$balanceSheet->indicators['TOTAL_EXPENSES']->value;
$balanceSheet->indicators['TOTAL_INCOME']->value;
$balanceSheet->indicators['NET_TURNOVER']->value;
$balanceSheet->indicators['HERITAGE_OF_THE_KINGDOM']->value;
$balanceSheet->indicators['PAID_SUBSCRIBED_CAPITAL']->value;
$balanceSheet->indicators['CAPITAL_TOTAL']->value;
$balanceSheet->indicators['PROVISIONS']->value;
$balanceSheet->indicators['ADVANCE_INCOME']->value;
$balanceSheet->indicators['LIABILITIES']->value;
$balanceSheet->indicators['PREPAYMENTS']->value;
$balanceSheet->indicators['HOME_AND_BANK_ACCOUNTS']->value;
$balanceSheet->indicators['DEBT']->value;
$balanceSheet->indicators['INVENTORIES']->value;
$balanceSheet->indicators['CURRENT_ASSETS']->value;
$balanceSheet->indicators['FIXED_ASSETS']->value;
$balanceSheet->toArray(); // ['year' => '', 'tax_identification_number' => '', 'company_name' => '' ...]
For balance sheets, the indicators may vary depending on the type of company, as specified by ANAF. I recommend you to use var_dump to observe the type of indicators. The vast majority of companies have the indicators from the example above
Info Resource
Get info about the company or multiple companies.
$companyInfo = $client->info()->create([
[
'cui' => '12345678',
'data' => '2021-01-01',
],
[
'cui' => '222222',
'data' => '2021-01-01',
]
]);
/*
* If you send one array, for one company, you will receive a CreateResponse object with the structure below.
* If you send multiple arrays, for multiple companies, you will receive a CreateResponses object with an array
* with CreateResponse objects.
*/
$companyInfo->generalData;
/* Accessible information in general data */
$companyInfo->generalData->companyName;
$companyInfo->generalData->address;
$companyInfo->generalData->registrationNumber;
$companyInfo->generalData->phone;
$companyInfo->generalData->fax;
$companyInfo->generalData->postalCode;
$companyInfo->generalData->document;
$companyInfo->generalData->registrationStatus;
$companyInfo->generalData->registrationDate;
$companyInfo->generalData->activityCode;
$companyInfo->generalData->bankAccount;
$companyInfo->generalData->roInvoiceStatus;
$companyInfo->generalData->authorityName;
$companyInfo->generalData->formOfOwnership;
$companyInfo->generalData->organizationalForm;
$companyInfo->generalData->legalForm;
$companyInfo->vatRegistration;
/* Accessible information in vat registration */
$companyInfo->vatRegistration->status;
//vatPeriods is an array from ANAF v8
$companyInfo->vatRegistration->vatPeriods[0]->startDate
$companyInfo->vatRegistration->vatPeriods[0]->stopDate;
$companyInfo->vatRegistration->vatPeriods[0]->stopEffectiveDate;
$companyInfo->vatRegistration->vatPeriods[0]->message;
$companyInfo->vatAtCheckout;
/* Accessible information in vat at checkout */
$companyInfo->vatAtCheckout->startDate;
$companyInfo->vatAtCheckout->stopDate;
$companyInfo->vatAtCheckout->updateDate;
$companyInfo->vatAtCheckout->publishDate;
$companyInfo->vatAtCheckout->updatedType;
$companyInfo->vatAtCheckout->status;
$companyInfo->inactiveState;
/* Accessible information in inactive state */
$companyInfo->inactiveState->inactivationDate;
$companyInfo->inactiveState->reactivationDate;
$companyInfo->inactiveState->publishDate;
$companyInfo->inactiveState->deletionDate;
$companyInfo->inactiveState->status;
$companyInfo->splitVat;
/* Accessible information in split tva */
$companyInfo->splitVat->startDate;
$companyInfo->splitVat->stopDate;
$companyInfo->splitVat->status;
$companyInfo->hqAddress;
/* Accessible information in hq address */
$companyInfo->hqAddress->street;
$companyInfo->hqAddress->no;
$companyInfo->hqAddress->city;
$companyInfo->hqAddress->cityCode;
$companyInfo->hqAddress->county;
$companyInfo->hqAddress->countyCode;
$companyInfo->hqAddress->countyShort;
$companyInfo->hqAddress->country;
$companyInfo->hqAddress->details;
$companyInfo->hqAddress->postalCode;
$companyInfo->fiscalAddress;
/* Accessible information in fiscal address */
$companyInfo->fiscalAddress->street;
$companyInfo->fiscalAddress->no;
$companyInfo->fiscalAddress->city;
$companyInfo->fiscalAddress->cityCode;
$companyInfo->fiscalAddress->county;
$companyInfo->fiscalAddress->countyCode;
$companyInfo->fiscalAddress->countyShort;
$companyInfo->fiscalAddress->country;
$companyInfo->fiscalAddress->details;
$companyInfo->fiscalAddress->postalCode;
// You can use all resources as array
$companyInfo->toArray(); // ["general_data" => ["tax_identification_number" => '', "company_name" => ''...]..]
// or
$companyInfo->generalData->toArray(); // ['tax_identification_number' => '', 'company_name' => ''...]
Ngo Resource
Checking NGO taxpayers who are registered in the Register of religious entities/units
$entityInfo = $client->ngo()->create([
[
'cui' => '12345678',
'data' => '2021-01-01',
]
]);
$entityInfo->taxIdentificationNumber;
$entityInfo->searchDate;
$entityInfo->entityName;
$entityInfo->address;
$entityInfo->phone;
$entityInfo->postalCode;
$entityInfo->document;
$entityInfo->registrationStatus;
$entityInfo->startDate;
$entityInfo->endDate;
$entityInfo->status;
// You can use all resources as array
$entityInfo->toArray(); // ["tax_identification_number" => '', "entity_name" => ''...]
eFactura Resource
Upload Resource
Upload an XML (eFactura) file to the SPV
TODO: improve error handling
$upload = $authorizedClient->efactura()->upload(
xml_path: $pathToXmlFile,
taxIdentificationNumber: '12345678',
//standard: UploadStandard::UBL, // default value is UBL
//extern: false, // default value is false
//selfInvoice: false, // default value is false
);
$upload->responseDate, // 202401011640
$upload->executionStatus,
$upload->uploadIndex,
Status Resource
TODO: implement status
from here
Messages Resource
TODO: implement paginated messages
from here
Get the list of available messages
$spvMessages = $authorizedClient->efactura()->messages([
'zile' => 30, // between 1 and 60
'cif' => '12345678',
]);
$spvMessages->messages; // array
$spvMessages->serial;
$spvMessages->taxIdentificationNumbers;
$spvMessages->title;
$message = $spvMessages->messages[0];
$message->creationDate,
$message->taxIdentificationNumber,
$message->solicitationId,
$message->details,
$message->type,
$message->id,
Download - eFactura XML Resource
Get a file from the SPV identified by the id
received from the messages endpoint
$file = $authorizedClient->efactura()->download([
'id' => '12345678',
]);
$file->getContent(); // string - You can save/download the content to a file
Validate Resource
TODO: implement validate
from here
XmlToPdf Resource
Convert XML eFactura to PDF. For this endpoint you need to use unauthenticated client
/*
* $xmlStandard can be one of the following: 'FACT1', 'FCN'.
* The default value is 'FACT1'
*/
$file = $client->efactura()->xmlToPdf($pathToXmlFile, $xmlStandard);
$file->getContent(); // string - You can save the pdf content to a file
ANAF PHP is an open-sourced software licensed under the MIT license.