Report Filing Service

<back to all web services

BatchSignReports

SignReportsBatchSync

Represents a request to sign a batch of reports.

Requires Authentication
The following routes are available for this service:
POST/sync/elma/reports/batch/sign
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


/** @description Represents an ELMA report. */
// @Api(Description="Represents an ELMA report.")
class Report implements JsonSerializable
{
    public function __construct(
        /** @description The conventional ELMA file name of the report.  The format of the ELMA formula is as follows:  m5_<pb>_<BZSt-Nr>_<AccountID>_<DateiId>.xml  where:  m5 is a constant for all reporting types.  pb is a constant that represents the ELMA product designation e.g. CC, DC, FC etc.  BZSt-Nr is the 11-character BZSt (Bundeszentralamt für Steuern) - tax number of the ELMA user e.g. bz123456789  AccountID is the 10-digit account identifier of the BZSt-Online Portal (BOP) user e.g. 1234567890  DateiId is the 1 - 12 character internal short name for the data file. */
        // @ApiMember(Description="The conventional ELMA file name of the report.  The format of the ELMA formula is as follows:  m5_<pb>_<BZSt-Nr>_<AccountID>_<DateiId>.xml  where:  m5 is a constant for all reporting types.  pb is a constant that represents the ELMA product designation e.g. CC, DC, FC etc.  BZSt-Nr is the 11-character BZSt (Bundeszentralamt für Steuern) - tax number of the ELMA user e.g. bz123456789  AccountID is the 10-digit account identifier of the BZSt-Online Portal (BOP) user e.g. 1234567890  DateiId is the 1 - 12 character internal short name for the data file.", IsRequired=true, Name="Id")
        /** @var string */
        public string $id='',

        /** @description The XML-content of the report. */
        // @ApiMember(Description="The XML-content of the report.", IsRequired=true, Name="Data")
        /** @var string */
        public string $data=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['data'])) $this->data = $o['data'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->data)) $o['data'] = $this->data;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Represents a PEM-encoded certificate. */
// @Api(Description="Represents a PEM-encoded certificate.")
class PemCertificate implements JsonSerializable
{
    public function __construct(
        /** @description The unique identifier (e.g. the file name) of the certificate. */
        // @ApiMember(Description="The unique identifier (e.g. the file name) of the certificate.", IsRequired=true, Name="Id")
        /** @var string */
        public string $id='',

        /** @description The PEM-encoded content of the certificate. */
        // @ApiMember(Description="The PEM-encoded content of the certificate.", IsRequired=true, Name="Content")
        /** @var string */
        public string $content='',

        /** @description The description of the certificate. */
        // @ApiMember(Description="The description of the certificate.", Name="Description")
        /** @var string|null */
        public ?string $description=null,

        /** @description Tags to label or identify the certificate. */
        // @ApiMember(Description="Tags to label or identify the certificate.", Name="Tags")
        /** @var array<string>|null */
        public ?array $tags=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['content'])) $this->content = $o['content'];
        if (isset($o['description'])) $this->description = $o['description'];
        if (isset($o['tags'])) $this->tags = JsonConverters::fromArray('string', $o['tags']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->content)) $o['content'] = $this->content;
        if (isset($this->description)) $o['description'] = $this->description;
        if (isset($this->tags)) $o['tags'] = JsonConverters::toArray('string', $this->tags);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Represents the credentials of a user to authenticate the access of an ELMA server. */
// @Api(Description="Represents the credentials of a user to authenticate the access of an ELMA server.")
class ElmaCredential implements IElmaCredential, JsonSerializable
{
    public function __construct(
        /** @description The unique identifier of this instance.  This identifer is only relevant in the context of data storage and retrieval. */
        // @ApiMember(Description="The unique identifier of this instance.  This identifer is only relevant in the context of data storage and retrieval.", IsRequired=true, Name="Id")
        /** @var string */
        public string $id='',

        /** @description The security certificate to authenticate the user and grant access to the ELMA server.  This certificate is generated from the BZSt-issued *.pfx BOP certificate. More details on BOP (BZSt-Online Portal - https://www.elster.de/bportal/start) */
        // @ApiMember(Description="The security certificate to authenticate the user and grant access to the ELMA server.  This certificate is generated from the BZSt-issued *.pfx BOP certificate. More details on BOP (BZSt-Online Portal - https://www.elster.de/bportal/start)", IsRequired=true, Name="Certificate")
        // @Required()
        // @StringLength(2147483647)
        /** @var PemCertificate|null */
        public ?PemCertificate $certificate=null,

        /** @description The BZSt (Bundeszentralamt für Steuern) - tax number of the user. 11-character text field that may only consist of two capital letters and 9 digits (0-9).  The fiscal authority BZSt provides this number during registration at the BOP (BZSt-Online Portal - https://www.elster.de/bportal/start).  The number is available in the private area of the BOP user account under "My BOP" under the "Registration Information" */
        // @ApiMember(Description="The BZSt (Bundeszentralamt für Steuern) - tax number of the user. 11-character text field that may only consist of two capital letters and 9 digits (0-9).  The fiscal authority BZSt provides this number during registration at the BOP (BZSt-Online Portal - https://www.elster.de/bportal/start).  The number is available in the private area of the BOP user account under \"My BOP\" under the \"Registration Information\"", IsRequired=true, Name="AuthSteuernummer")
        // @Required()
        // @StringLength(11)
        /** @var string */
        public string $authSteuernummer='',

        /** @description The account identifier of a BZSt-Online Portal (BOP) user. 10-character text field that may only contain numbers (0-9). */
        // @ApiMember(Description="The account identifier of a BZSt-Online Portal (BOP) user. 10-character text field that may only contain numbers (0-9).", IsRequired=true, Name="AccountId")
        // @Required()
        // @StringLength(10)
        /** @var string */
        public string $accountId='',

        /** @description The password to protect the certificate from unauthorized access. */
        // @ApiMember(Description="The password to protect the certificate from unauthorized access.", IsRequired=true, Name="Password")
        /** @var string */
        public string $password=''
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['certificate'])) $this->certificate = JsonConverters::from('PemCertificate', $o['certificate']);
        if (isset($o['authSteuernummer'])) $this->authSteuernummer = $o['authSteuernummer'];
        if (isset($o['accountId'])) $this->accountId = $o['accountId'];
        if (isset($o['password'])) $this->password = $o['password'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->certificate)) $o['certificate'] = JsonConverters::to('PemCertificate', $this->certificate);
        if (isset($this->authSteuernummer)) $o['authSteuernummer'] = $this->authSteuernummer;
        if (isset($this->accountId)) $o['accountId'] = $this->accountId;
        if (isset($this->password)) $o['password'] = $this->password;
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Specifies a request to sign a batch of reports using the security certificate from the provided credential. */
// @Api(Description="Specifies a request to sign a batch of reports using the security certificate from the provided credential.")
class BatchSignReportsBase implements IPost, JsonSerializable
{
    public function __construct(
        /** @description The reports to sign. */
        // @ApiMember(Description="The reports to sign.", IsRequired=true, Name="Report")
        /** @var array<Report>|null */
        public ?array $reports=null,

        /** @description The credential to gain access on the ELMA server. */
        // @ApiMember(Description="The credential to gain access on the ELMA server.", IsRequired=true, Name="Credential")
        /** @var ElmaCredential|null */
        public ?ElmaCredential $credential=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['reports'])) $this->reports = JsonConverters::fromArray('Report', $o['reports']);
        if (isset($o['credential'])) $this->credential = JsonConverters::from('ElmaCredential', $o['credential']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->reports)) $o['reports'] = JsonConverters::toArray('Report', $this->reports);
        if (isset($this->credential)) $o['credential'] = JsonConverters::to('ElmaCredential', $this->credential);
        return empty($o) ? new class(){} : $o;
    }
}

/** @description Represents a request to sign a batch of reports. */
// @Api(Description="Represents a request to sign a batch of reports.")
class BatchSignReports extends BatchSignReportsBase implements JsonSerializable
{
    /**
     * @param array<Report>|null $reports
     * @param ElmaCredential|null $credential
     */
    public function __construct(
        ?array $reports=null,
        ?ElmaCredential $credential=null
    ) {
        parent::__construct($reports,$credential);
    }

    /** @throws Exception */
    public function fromMap($o): void {
        parent::fromMap($o);
        if (isset($o['reports'])) $this->reports = JsonConverters::fromArray('Report', $o['reports']);
        if (isset($o['credential'])) $this->credential = JsonConverters::from('ElmaCredential', $o['credential']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = parent::jsonSerialize();
        if (isset($this->reports)) $o['reports'] = JsonConverters::toArray('Report', $this->reports);
        if (isset($this->credential)) $o['credential'] = JsonConverters::to('ElmaCredential', $this->credential);
        return empty($o) ? new class(){} : $o;
    }
}

PHP BatchSignReports DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /sync/elma/reports/batch/sign HTTP/1.1 
Host: reportfiling.staging.pwc.de 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<BatchSignReports xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Services.Contracts.Requests">
  <Credential xmlns:d2p1="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Domain.Concretes.Models">
    <d2p1:AccountId>String</d2p1:AccountId>
    <d2p1:AuthSteuernummer>String</d2p1:AuthSteuernummer>
    <d2p1:Certificate xmlns:d3p1="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Domain.Contracts.Models">
      <d3p1:Content>String</d3p1:Content>
      <d3p1:Description>String</d3p1:Description>
      <d3p1:Id>String</d3p1:Id>
      <d3p1:Tags xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:string>String</d4p1:string>
      </d3p1:Tags>
    </d2p1:Certificate>
    <d2p1:Password>String</d2p1:Password>
  </Credential>
  <Reports xmlns:d2p1="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Domain.Contracts.Models">
    <d2p1:Report>
      <d2p1:Data>String</d2p1:Data>
      <d2p1:Id>String</d2p1:Id>
    </d2p1:Report>
  </Reports>
</BatchSignReports>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<ArrayOfSigningResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Services.Contracts.Responses">
  <SigningResponse>
    <Report xmlns:d3p1="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Domain.Contracts.Models">
      <d3p1:Data>String</d3p1:Data>
      <d3p1:Id>String</d3p1:Id>
    </Report>
    <ResponseStatus xmlns:d3p1="http://schemas.servicestack.net/types">
      <d3p1:ErrorCode>String</d3p1:ErrorCode>
      <d3p1:Message>String</d3p1:Message>
      <d3p1:StackTrace>String</d3p1:StackTrace>
      <d3p1:Errors>
        <d3p1:ResponseError>
          <d3p1:ErrorCode>String</d3p1:ErrorCode>
          <d3p1:FieldName>String</d3p1:FieldName>
          <d3p1:Message>String</d3p1:Message>
          <d3p1:Meta xmlns:d6p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d6p1:KeyValueOfstringstring>
              <d6p1:Key>String</d6p1:Key>
              <d6p1:Value>String</d6p1:Value>
            </d6p1:KeyValueOfstringstring>
          </d3p1:Meta>
        </d3p1:ResponseError>
      </d3p1:Errors>
      <d3p1:Meta xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringstring>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value>String</d4p1:Value>
        </d4p1:KeyValueOfstringstring>
      </d3p1:Meta>
    </ResponseStatus>
    <Signature xmlns:d3p1="http://schemas.datacontract.org/2004/07/PwC.Elmaas.Core.Domain.Contracts.Models">
      <d3p1:Data>AA==</d3p1:Data>
      <d3p1:Id>String</d3p1:Id>
    </Signature>
  </SigningResponse>
</ArrayOfSigningResponse>