components:

    schemas:

        HsOfficeContact:
            type: object
            properties:
                uuid:
                    type: string
                    format: uuid
                caption:
                    type: string
                postalAddress:
                    $ref: '#/components/schemas/HsOfficeContactPostalAddress'
                emailAddresses:
                    $ref: '#/components/schemas/HsOfficeContactEmailAddresses'
                phoneNumbers:
                    $ref: '#/components/schemas/HsOfficeContactPhoneNumbers'

        HsOfficeContactInsert:
            type: object
            properties:
                caption:
                    type: string
                postalAddress:
                    $ref: '#/components/schemas/HsOfficeContactPostalAddress'
                emailAddresses:
                    $ref: '#/components/schemas/HsOfficeContactEmailAddresses'
                phoneNumbers:
                    $ref: '#/components/schemas/HsOfficeContactPhoneNumbers'
            required:
                - caption

        HsOfficeContactPatch:
            type: object
            properties:
                caption:
                    type: string
                    nullable: true
                postalAddress:
                    $ref: '#/components/schemas/HsOfficeContactPostalAddress'
                emailAddresses:
                    $ref: '#/components/schemas/HsOfficeContactEmailAddresses'
                phoneNumbers:
                    $ref: '#/components/schemas/HsOfficeContactPhoneNumbers'

        HsOfficeContactPostalAddress:
            # forces generating a java.lang.Object containing a Map, instead of a class with fixed properties
            anyOf:
                - type: object
                  properties:
                      firm:
                          type: string
                          nullable: true
                      name:
                          type: string
                          nullable: true
                      co:
                          type: string
                          nullable: true
                      street:
                          type: string
                          nullable: true
                      zipcode:
                          type: string
                          nullable: true
                      city:
                          type: string
                          nullable: true
                      country:
                          type: string
                          nullable: true
                  additionalProperties: true

        HsOfficeContactEmailAddresses:
            # forces generating a java.lang.Object containing a Map, instead of a class with fixed properties
            anyOf:
                - type: object
                  additionalProperties: true

        HsOfficeContactPhoneNumbers:
            # forces generating a java.lang.Object containing a Map, instead of a class with fixed properties
            anyOf:
                - type: object
                  properties:
                      phone_office:
                            type: string
                            nullable: true
                      phone_private:
                          type: string
                          nullable: true
                      phone_mobile:
                          type: string
                          nullable: true
                      fax:
                          type: string
                          nullable: true
                  additionalProperties: false