File: user_web_services

package info (click to toggle)
libisds 0.9-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 5,348 kB
  • ctags: 1,659
  • sloc: ansic: 24,898; sh: 11,772; makefile: 393; xml: 375; sed: 16
file content (751 lines) | stat: -rw-r--r-- 26,968 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
User web services specification
===============================

Source: Provozní řád ISDS, version 2010-11-28, Pages 15–16
Source: Webové služby rozhraní ISDS pro manipulaci s datovými zprávami,
    version 2.32 (2012-10-05)
Source: Webové služby ISDS pro vyhledávání datových schránek,
    version 2.37 (2014-01-14)


These services are intended for working with messages inside a box by
a regular user.

SOAP web services defined in: dm_operations.wsdl, dm_info.wsdl, db_search.wsdl
(Appendix 2 of Provozní řád ISDS)

Data types: dmBaseTypes.xsd (Appendix 1)

Documentation: DataMessage_ws.pdf, DBSearch_ws.pdf (Appendix 2)

List of SOAP requests follows. Those marked with asterisk DO NOT MARK incoming
messages as delivered. Those marked with plus has access to envelopes of
deleted messages.


dm_operations.wsdl
==================

URL postfix: dz
Constraints: Client must be authenticated in Access Manager

CreateMessage (*)
    Create and send a message
CreateMultipleMessage (*)
    Create and send a message to multiple recipients
MessageDownload
    Download incoming message
SignedMessageDownload
    Download incoming message with digital signature of ministry of interiors
SignedSentMessageDownload
    Download outgoing message with digital signature of ministry of interiors
AuthenticateMessage (*+)
    Submit local message copy to ISDS to confirm message authenticity
Re-signISDSDocument (*)
    Replace CMS signature of old message signed without time stamp
DummyOperation
    Void operation used to log in and to keep connection alive


dm_info.wsdl
============

URL postfix: dx
Constraints: Client must be authenticated in Access Manager

VerifyMessage (*+)
    Verify local copy of message with remote original stored in ISDS
MessageEnvelopeDownload (+)
    Download envelope of incoming message
MarkMessageAsDownloaded (*)
    Mark message as read
ConfirmDelivery
    Mark commercial message as accepted by recipient
EraseMessage (*)
    Remove message from long term storage
GetDeliveryInfo (+)
    Download info-sheet about message post and delivery
GetSignedDeliveryInfo (+)
    Download info-sheet about message post and delivery with signature of
    ministry of interiors
GetListOfRecievedMessages
    Download list of incoming messages
GetListOfSentMessages
    Download list of outgoing messages
GetMessageAuthor
    Get details about sender
GetMessageStateChanges
    Download list of outgoing messages that changed state


db_search.wsdl
==============

URL postfix: df

FindDataBox (*)
    Find boxes conforming to search criteria
CheckDataBox (*)
    Return state of given box
GetDataBoxList (*)
    Get list of all boxes
PDZInfo
    Get rules for sending commercial messages from given box
DataBoxCreditInfo (*)
    Get details about credit for comercial services


CreateMessage (*)
=============

Create and send a message.

Envelope of outgoing message must contain dbIDRecipient and dmAnnotation.
Other elements are optional (dmRecipientOrgUnit, dmRecipientOrgUnitNum,
dmSenderOrgUnit, dmSenderOrgUnitNum, dmToHands, dmPersonalDelivery,
dmAllowSubstDelivery, dmRecipientRefNumber, dmRecipientIdent,
dmSenderRefNumber, dmSenderIdent, dmLegalTitleLaw, dmLegalTitleYear,
dmLegalTitleSect, dmLegalTitlePar, dmLegalTitlePoint, dmOVM, dmPublishOwnID).

Outgoing message envelope can specify dmType to declare subtype of commercial
message. If dmType is `I', then dmSenderRefNumber must be defined. If dmType
is `O', then dmRecipientRefNumber must be defined.

Constraints: Sender must have PRIVIL_CREATE_DM permission.
Constraints: Exactly one document in message must be main type.
Constraints: Total size of all documents must not be bigger than 10 MB.

Identifier of just sent message assigned by system is returned.

Error codes:
    0000    Message sent successfully
Non-normative error codes:
    1214    Document description is not a file name with acceptable file name
            extension
    1214    Document description extension does not match document content
    1214    Provided MIME type does not match document
    2010    First document structure invalid
    2032    Message does not carry any document
    9005    Message not valid (probably)

In case of positive virus detection (processed after sending), infected
document is removed, message state is set to value 3 (from point of view of
recipient) and sender get new message originated by server.


CreateMultipleMessage (*)
=====================

Create and send a message to multiple recipients.

Input composes of nonempty list of recipients (maximal count is 50),
one envelope (different from envelope for CreateMessage, misses elements from
dmRecipient) and list of documents to send to all of them to each recipient.

Only dbIDRecipient and dmToHands are mandatory. Other dmRecipient children are
optional.

Structure:
CreateMultipleMessage
    + dmRecipients
    |   + dmRecipient
    |   |   + dbIDRecipient – recipient box ID
    |   |   + dmRecipientOrgUnit
    |   |   + dmRecipientOrgUnitNum
    |   |   + dmToHands – can be empty, but must not missing
    |   + dmRecipient
    |   ⋮ 
    + dmEnvelope
    |   + <other elements, usually empty>: dmSenderOrgUnit, dmSenderOrgUnitNum,
    |   |   dmAnnotation, dmRecipientRefNumber, dmSenderRefNumber,
    |   |   dmRecipientIdent, dmSenderIdent, dmLegalTitleLaw,
    |   |   dmLegalTitleYear, dmLegalTitleSect, dmLegalTitlePar,
    |   |   dmLegalTitlePoint, dmPersonalDelivery, dmAllowSubstDelivery
    |   + dmOVM – optional
    |   + dmPublishOwnID – optional
    + dmFiles

It's not possible to send commercial message to multiple recipients. Though the
dmEnvelope has @dmType attribute, so it should be possible to send a commercial
message to one recient using CreateMultipleMessage service.

ISDS outputs list of assigned message IDs (each copy gets independent ID),
list of sent status for each message ID and one cumulative status of
whole CreateMultipleMessage operation.

If operation fails before replicating messages for each recipient
(i.e. sending), global error code will be non-zero. If operation fails on some
message copies (i.e. while sending) special global error code 0004 will be
returned and erroneous recipients can be gather by recipient specific error
code (failed ones will have non-zero code). If all messages are sent
successfully, global error code will be 0000.

Structure:
CreateMultipleMessageResponse
    + dmMultipleStatus
    |   + dmSingleStatus
    |   |   + dmID – assigned message ID, optional, missing if error occurred
    |   |   + dmStatus – message local error code and textual description
    |   + dmSingleStatus
    |   ⋮
    + dmStatus – global error code and textual description

Global error codes:
    0000    Messages sent successfully
    0004    Some message failed while sending


MessageDownload
===============

Retrieve incoming message identified by message ID.

This service can return message without digital time-stamp (more precisely
with empty dmQTimesamp element, see schema). 

Commercial message has set dmReturnedMessage/@dmType="K".

Error codes:
    0000    Message sent successfully
Non-normative error codes:
    1219    Message with ID does not exist in ISDS in current box.


SignedMessageDownload
=====================

Download incoming message with digital signature of ministry of interiors
identified by message ID.

Return PKCS#7 structure containing data as defined in MessageDownload and
digital signature of the message by ministry.

The data are XML document with mangled ISDS name space:
http://isds.czechpoint.cz/v20/ vs. http://isds.czechpoint.cz/v20/message:

<q:MessageDownloadResponse
     xmlns:q="http://isds.czechpoint.cz/v20/message">
  <q:dmReturnedMessage>
     <p:dmDm xmlns:p="http://isds.czechpoint.cz/v20">
         <p:dmID>151916</p:dmID>
         ...
     </p:dmDm>
     <q:dmHash algorithm="SHA-1">...</q:dmHash>
     ...
     <q:dmAttachmentSize>260</q:dmAttachmentSize>
  </q:dmReturnedMessage>
</q:MessageDownloadResponse>


SignedSentMessageDownload
=========================

Download outgoing message with digital signature of ministry of interiors
identified by ID.

Return PKCS#7 structure containing data as defined in MessageDownload and
digital signature of the message by ministry.

The data are XML document with mangled ISDS name space:
http://isds.czechpoint.cz/v20/ vs. http://isds.czechpoint.cz/v20/SentMessage:

<q:MessageDownloadResponse
     xmlns:q="http://isds.czechpoint.cz/v20/SentMessage">
  <q:dmReturnedMessage>
     <p:dmDm xmlns:p="http://isds.czechpoint.cz/v20">
         <p:dmID>151916</p:dmID>
         ...
     </p:dmDm>
     <q:dmHash algorithm="SHA-1">...</q:dmHash>
     ...
     <q:dmAttachmentSize>260</q:dmAttachmentSize>
  </q:dmReturnedMessage>
</q:MessageDownloadResponse>


GetListOfRecievedMessages
=========================

Download list of incoming messages matching search criteria.

See GetListOfSentMessages for more details.


GetListOfSentMessages
=====================

Download list of outgoing messages matching search criteria.

Criteria are: delivery time not before, not after, organisation unit number of
sender, message status filter, offset of first message in a list and limit on 
number of messages to get.

Message status filter is union of distinct message states expressed as
exponents of 2. Effectively it's a polynom \sum_{x \in message_statux} 2^x.
Special value -1 means all messages. Meaning for value 1 or 0 is undefined.

Messages are sorted in order of delivery time. Message type is stored in
dmRecord/@dmType.

Offset starts on 1. Limit defaults to 1000.

Non-normative error codes:
    2017    Syntax error in date-time


GetMessageAuthor
================

Get information about sender as un user of given message.

Input is mandatory message identifier. Output is optional userType and
optional authorName.

userType (unknown and undefined for older messages) is type of user who has
sent the message. Be ware there is special additional type `VIRTUAL'. Be ware
the userType is a string unconstrained by XML schema:

Value               Description
--------------------------------------------------------------------------
PRIMARY_USER        The sender was a owner of the box
ENTRUSTED_USER      The sender was an entrusted user associated to the box
ADMINISTRATOR       The sender was administrator assiciated to the box
OFFICIAL            The sender was ISDS (for system messages)
VIRTUAL             The sender was an application authenticated by `system'
                    certificate

Non-normative: New user types OFFICIAL_CERT and LIQUIDATOR are not listed in
official documentation for this service. However LIQUIDATOR is said to be
equivalent to PRIMARY_USER and PRIMARY_USER can send messages, thus I conclude
these two now user types can occur in output of this service.

authorName is a name of user logged into senders box (not a login name) if
sender allowed to reveal his name explicitely.


GetMessageStateChanges
======================

Download list of outgoing messages that changed state in given time range.

If a message changed state multiple times, it is listed more times. Only
changes from state 2 to 4, from 4 to {5, 6, 8} are reported. Only recent
changes (not older than 15 days currently) are reported.

This service is designed for polling state changes of sent messages.

Input are start (dmFromTime element) and end (dmToTime element) ISO times.
Empty dmFromTime meands since last 15 days, empty dmToTime means till now.

Non-normative: Server does not report changes recent more than one hour.

Output is list of records with message state changes. The order of records is
undefined.

Structure:
GetMessageStateChangesResponse
    + dmRecords – optional, possibly empty element
    |   + dmRecord – one state change
    |   |   + dmId – identifier of message that changed state
    |   |   + dmEventTime – ISO time of state change
    |   |   + dmMessageStatus – new message state in numeric notation
    |   + dmRecord
    |   ⋮
    + dmStatus – global error code and textual description


AuthenticateMessage (*+)
===================

Allows to verify message authenticity by providing copy to ISDS.

Only signed message encapsuleted into CMS structure with digital signature can
be verified by this service. Client pass the raw message in Base64 encoding to
ISDS, system performs checks and return boolean value: true if message has
not been modified and has been delivered through ISDS, false if message
has is unkown to ISDS. In both cases 0000 error code will be returned.

If message cannot be processed (e.g. broken CMS or XML syntax) or message
contains has been signed by non-ISDS certificate or other error, non-zero
error code will be returned.


Re-signISDSDocument (*)
===================

Re-sign old message or delivery info that has been generated with CMS without
time stamp. These messages have been produced before 2011-04-16.

Input is dmDoc element carrying Base64-encoded original signed message or
delivery info in text node.

Output is dmResultDoc element with Base64-encoded re-signed message or
delivery info supplied in request, optional dmValidTo element of xs:date type,
and dmStatus of tStatus type. dmValidTo advertises end of validity of
time stamp added into CMS.

Error codes:
    0000    Message has been re-signed and returned in CadES-T CMS format
    2200    Input message is bad
    2201    Input message is not original (see AuthenticateMessage service)
    2204    Input message already contains time stamp in CAdES-EPES or CAdES-T
            CMS envelope
    2207    Time stamp could not been generated in time


VerifyMessage (*+)
=============

Retrieve message hash (dmHash element) for given message from ISDS.

Works for not yet deleted messages only.

Only SHA-1 algorithm is in use currently. SHA-2 family is expected after
2010 year beginning.

Hash input is isds:dmDM subtree processed as raw bit stream without XML
canonicalization. Authoritative isds:dmDM element can be get via
MessageDownload service. God bless ISDS developers to not change XML
serialization.

Non-normative error codes:
    1219    Message with ID does not exist in ISDS.


MessageEnvelopeDownload (+)
=======================

Download envelope of incoming message. That is message without documents.
Message type is stored in dmReturnedMessageEnvelope/@dmType.

Returned hash and time-stamp are computed from whole message. You must get
complete message including documents to be able to verify them.


MarkMessageAsDownloaded (*)
=======================

Change status of a message identified by its ID as read.

That means next GetListOfRecievedMessages service can exclude such message if
only unread messages requested.


ConfirmDelivery
===============

Mark commercial message as accepted by recipient.

XXX: This service has been removed from ISDS because commercial messages get
accepted by logging-in (since 2011-11).

Changes message state from delivered (4) to accepted (6). Applicable only to
commercial messages. Messages from public offices (municipalities, government
etc.) are accepted automatically by log-in on interactive web portal or by
triggering most of SOAP operations.

Must be called before downloading (signed or unsigned) incoming message
[Signed]MessageDownload.


EraseMessage (*)
============

Delete a message from long term storage (know as data safe formerly).

Input is message ID in `dmID' element and boolean in `dmIncoming' element
(true for incoming message, false for outgoing mesage).

Output is standard `dmStatus' subtree.

Only message in long term storage can be removed on user request through
this service. Other message cannot be removed on request, they get removed
automatically after 90-days period.

Error codes:
    1211    The message belongs to other (= not currently logged-in user) box
    1218    Insufficient permissions (PRIVIL_ERASE_VAULT) to remove the message
    1219    The message is not in long term storage or is not incoming or
            outgoing as requested.


GetDeliveryInfo (+)
===============

Download info-sheet about incoming or outgoing message post and delivery or
deliver impossibility. The message is specified by message ID.

It returns complete message envelope, hash, time-stamp. Delivery time and
acceptance time only if message has been delivered to recipient box or
accepted by recipient. Precise status of message is returned too.

In addition, non-empty list of events is attached. Each event compounds of
ISO time and text description. The text description has well-known prefix to
distinguish the event meaning. Following prefixes are defined:

    Prefix  Meaning
    -----------------------------------------------------
    EV0:    Message enterend into ISDS
    EV1:    Message has been accepted by recipient action
    EV2:    Message has been delivered to box and is considered as accepted by
            no-user-action time out (through fiction)
    EV3:    Recipient box has been made inaccessible retrospectively
            (even after successful delivery or acceptance,
            this event is retroactive). In this case special system-generated
            message is sent to sender in addition.
    EV4:    Commercial message has been accepted by recipient confirmation
    EV5:    Message has been delivered into recipent box
    EV11:   Primary user has logged into his box
    EV12:   Entrusted user havin permission to read this message has logged in
    EV13:   Application (not a human) has logged into box using `system'
            certificate 


GetSignedDeliveryInfo (+)
=====================

Download info-sheet about incoming or outgoing message post and delivery or
deliver impossibility as signed PKCS#7 structure. See GetDeliveryInfo for
details about returned data.

The PKCS#7 structure carries digital signature made by ministry of interiors.

There is mangled namespace again: http://isds.czechpoint.cz/v20/ vs.
http://isds.czechpoint.cz/v20/delivery:

<q:GetDeliveryInfoResponse xmlns:q="http://isds.czechpoint.cz/v20/delivery">
  <q:dmDelivery>
    <p:dmDm xmlns:p="http://isds.czechpoint.cz/v20">
      <p:dmID>170272</p:dmID>
      ...
    </p:dmDm>
    <q:dmHash algorithm="SHA-1">...</q:dmHash>
    ...
    </q:dmEvents>...</q:dmEvents>
  </q:dmDelivery>
</q:GetDeliveryInfoResponse>
             

FindDataBox (*)
===========

Find boxes conforming to search criteria or exact ID and return corresponding
(possibly truncated) list of boxes.

Returned boxes exist, but it does not mean they can receive messages. Use
CheckDataBox to figure out.

There are three different search cases distinguished in this order:

    – If dbID is filled in request, it will search for exact box only, other
    criteria will be ignored.

    – If identifier and registryCode are filled, it will search for exact
    box only, other criteria will be ignored.

    – Otherwise search against other criteria.

Returns list of boxes (possibly empty).

List can be truncated or search request refused because of not enough
specific criteria to protect user privacy. There are following constrains
differentiated by box type now:

Gross Box type  Constraints (required search criteria)
------------------------------------------------------
FO              pnLastName or pnLastNameAtBirth
PFO             ic or pnLastName or pnLastNameAtBirth
PO              ic or prefix (at least 3 characters) of firmName
OVM             ic or prefix of firmName

String search criteria are matched case insensitive (except dbID). Strings are
compared to prefix. Except firmName, adCity, adStreet and biCity that are
matched as substrings.

Search results depends or logged-in user type. Users of boxes with open
addressing can search other open-addressing boxes, otherwise only OVM type
boxes can be searched. Search based on exact box identifier finder unlimited.

Error codes:
    0002    No box suits to search request (by other criteria)
    0003    To much boxes suit to search request (by other criteria),
            response truncated. Returned list of boxes is still valid.
    1109    More than one box matches the search request
    5001    No such box exists (by box ID or registry identifier)
Non-normative error codes:
    1101    Box type (dbType) must be specified
    2017    Syntax error in date (biDate)


CheckDataBox (*)
============

Return state of one box identified by dbID.

State of the box is stored in dbStatus element. Only state 1 means box is
capable of receiving messages.

Error codes:
    5001    Box does not exist
    1007    Box ID malformed
    2011    Box ID malformed


GetDataBoxList (*)
==============

Get comma-separate list of all boxes of given type.

Input is type of boxes of interrest (dblType element):

Value   Description             File name           Permission
-------------------------------------------------------------------------------
ALL     All active boxes        actdsYYYYMMDD.csv   OVM or OVM_REQ user
                                                    authenticated by commercial
                                                    certificate or user with
                                                    PRIVIL_BILLING permission
UPG     Effectively OVM active  effovmYYYYMMDD.csv  Anybody
        boxes

Non-normative: Following types are not documented anymore.

Value   Description             File name           Permission
-------------------------------------------------------------------------------
OVM     OVM gross type boxes    ovmYYYYMMDD.csv     PRIVIL_BILLING only
OPN     Boxes that allow to     opendsYYYYMMDD.csv  PRIVIL_BILLING only
        receive commercial
        messages

Output is Base64-encoded ZIP file containing a file with name from the table.
The Base64 string is stored in dblData element. The name of the file embeds
date of list creation (Y is year digit, M is month, D is day).

The file is created once per a day and its format is following comma-separate
value table:

Key 
----------------------
dbID
dbType
pnFirstName
pnMiddleName
pnLastName
pnLastNameAtBirth
biDate
firmName
ic
adCity
adStreet
adNumberInStreet
adNumberInMunicipality
adZipCode
adState
nationality
lastChangeDate

The inner file is encoded in UTF-8. First line of the file is a header. Each
next line is a box. If a value is undefined, it will be empty. Values in
a line are separated by a comma (`,'). If a value contains comma or quotation
(`"'), the value will be enclosed into quotes (`"'). If value contains quotes,
they will be escaped by a quotes (e.g. `"lazy, ""fox""' means `lazy, "fox"').

Error codes:
    1004    Operation not permitted


PDZInfo
=======

Return posibilities of sending commerical messages. Only if one of the
possibility is the payer is the recipient (PDZType is `O'), then calling this
service will cause marking messages as delivered.

Input is `PDZSender' element with a box ID as the only text node child.

Ouput is orderer list of rules for sending commercial messages wrapped in
dbPDZRecords element. The list can be empty what means no permission is
available. Each list item is a subtree:

dbPDZRecord
    + PDZType – rule type; see below for known values
    + PDZRecip – only this recipient box ID is possible. Empty value means no
    |   restriction on the recipient.
    + PDZPayer – the message is payed by this box ID owner
    + PDZExpire – expiration time of this rule. Empty value means no
    |   expiration.
    + PDZCnt – number of remaining commecrial messages that can be sent based
    |   on thid rule. Empty value means no limit.
    + ODZIdent – identifier referring to message enabling sending pre-paid
        answer. Must be added as dmRecipientRefNumber into sent message.

PDZType     Meaning
-------------------------------------------------------------------------------
D           Externally subsidized (undocumented)
E           Commercial message pre-paid by the sender
G           PDZPayer owner pays for all commercial messages
K           Commercial message paid by sender based on an agreement with the
            Czech Post.
O           Answer on a commercial message is pre-paid by PDZPayer. ODZIdent
            value must be added into an outgoing message to bind the message to
            the payer and requesting message.
Z           Limitedly subsidized (undocumented)


DataBoxCreditInfo
=================

Return current credit value and and history of credit changes for given box
and time interval.

Input is `dbID' element with box ID whose credit you want to obtain and
possibly empty elements `ciFromDate' and `ciTodate' carrying start and end
date (inclusive) for history records to obtain.

Output is `currentCredit' element delivering current credit value,
`notifEmail' element delivering e-mail address to send notifications
about changes in the commercial services to, and `ciRecords' tree with history
of changes that occurred in the given interval. All these elements are optional.

The `ciRecords' element contains possibly (if interval is not defined) empty
time-sorted list of `ciRecord' trees:

ciRecord
    + ciEventTime – time of the change
    + ciEventType – type of the change expressed as an integer
    + ciCreditChange – value of the credit change
    + ciCreditAfter – value of the credit after the change

ciEventType     Meaning                 
------------------------------------------
1               Charge credit
2               Discharge credit
3               Sending commercial message
4               Setting long term storage
5               Credit expiration

`ciRecord' contains other elements depending on `ciEventType':

Element         ciEventType     Meaning
------------------------------------------------------------------
ciTransID       1, 2            String; not specified
ciRecipientID   3               Recipient's box ID of the sent message
ciPDZID         3               ID of the sent message
ciNewCapacity   4               Integer; new capacity of storage in messages
ciNewFrom       4               Date when the new capacity is effective
ciNewTo         4               Date when the new capacity expires
ciOldCapacity   4               Integer, optional; former capacity in messages
ciOldFrom       4               Date, optional
ciOldTo         4               Date, optional
ciDoneBy        4               String, optional; Name of user who initiated
                                the change

All credit values are integers in hundredths of Czech Crowns.

Output carries standard `dbStatus' tree with status code and status message.

Error codes (codes are not normative):
    1004    Insufficient priviledges for the box
    2011    The box does not exist
    1093    Date is too long (history is not available after 15 months)
    1137    Interval is too long (limit is 3 months)
    1058    Invalid date