view pkg/soap/erdms2/service.go @ 5615:f6179b31e0a9 erdms2

Use a type alias on date type to not loose XML serialisation.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 10 Nov 2022 19:19:21 +0100
parents 135145f7ca0f
children 57c655b93ba8
line wrap: on
line source

// This is Free Software under GNU Affero General Public License v >= 3.0
// without warranty, see README.md and license for details.
//
// SPDX-License-Identifier: AGPL-3.0-or-later
// License-Filename: LICENSES/AGPL-3.0.txt
//
// Copyright (C) 2018 by via donau
//   – Österreichische Wasserstraßen-Gesellschaft mbH
// Software engineering by Intevation GmbH
//
// Author(s):
//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>

package erdms2

import (
	"context"
	"encoding/xml"

	"gemma.intevation.de/gemma/pkg/soap"
)

type AnyType struct {
	InnerXML string `xml:",innerxml"`
}

type AnyURI string

type NCName string

// adn (dgs goods) internal adn code (unnr + seqnr: to
// make each adn good unique)
//

type AdnCodeType string

// adn class and classifications codes
//

type AdnClassType string

type AdnClassIfType string

type AdnImoClassType string

// adn (dgs) labels applicable for a dgs good
//

type AdnLabelType string

// adn aquatic toxicity, tanker transports (indication
// for dgs, usuallly liquids)
//

type AquaticToxicityType string

// Older CBS (number) code (3 digits) use by
// statistics organisations (backw comp) but replaced by newer iso 3166
// (2 letters).
//

type CbscountryCodeType string

// adn chemical stability (indication), tanker
// transports
//

type ChemicalStabilityType string

// adn CMR properties (tanker transports)
//

type CmrPropertyType string

// iso 6346 container type (code)

type ContIdType string

// containertype textual description
//

type ContNameType string

// indication (flag) wheater shiptype code is a single
// ship or a transport combination
//

type CombinationFlagType bool

// Country iso 3166 code (2 alpha)

type CountryCodeType string

// Country iso 3166 code (3 alpha)

type CountryCode3Type string

// Countryname type (name of the country)
//

type CountryNameType string

// Country iso 3166 numcode (3 digits)
//

type CountryIsoNumType string

// techn directive craft type code (eu hull db)
//

type CraftTypeType string

// inland cones 0,1,2,3,V (as used for DGS goods and
// cones calculations)
//

type ConesType string

const (
	ConesType0 ConesType = "0"

	ConesType1 ConesType = "1"

	ConesType2 ConesType = "2"

	ConesType3 ConesType = "3"

	ConesTypeV ConesType = "V"
)

// dimension type (length, width, draught etc) in [cm]
// (no decimals)
//

type DimType int64

// older 2 digit dvk shiptype code (replaced by unrec)
//

type DvkTypeType string

// record erased (not actual anymore) flag type
//

type ErasedType bool

// eri location code type as used for eri_locations
//

type ErilocCodeType string

// eri location name type as used in eri_locations
//

type ErilocNameType string

// flags 0,B,V (dang goods indication seagoing
// vessels)
//

type FlagsType string

const (
	FlagsType0 FlagsType = "0"

	FlagsTypeB FlagsType = "B"

	FlagsTypeV FlagsType = "V"
)

// adn floater or sinker (indication), tanker
// transports
//

type FloatersinkerType string

// fairway code (text)

type FwCodeType string

// ADN dangerous goodnames, description
//

type AdnCodeNameType string

// non-dangerous goodnames, description
//

type HsCodeNameType string

// ADN dangerous good synonym name,description
//

type GoodSynType string

// HS code as used by customs

type HsCodeType string

// hectometre code (hectomere in [hm] (no decimals) on
// the fairway)
//

type KmCodeType string

// lastupdate, last modification date time of this
// record
//

type LastupdateType = soap.XSDDateTime

// one of the supported languages (basic and
// additional set), based on ISO 639-1
//

type LangType string

const (
	LangTypeEmptyString LangType = "%%"

	LangTypeLc LangType = "lc"

	LangTypeNl LangType = "nl"

	LangTypeDe LangType = "de"

	LangTypeFr LangType = "fr"

	LangTypeEn LangType = "en"

	LangTypeBg LangType = "bg"

	LangTypeCs LangType = "cs"

	LangTypeDa LangType = "da"

	LangTypeEl LangType = "el"

	LangTypeEs LangType = "es"

	LangTypeEt LangType = "et"

	LangTypeFi LangType = "fi"

	LangTypeHu LangType = "hu"

	LangTypeIt LangType = "it"

	LangTypeLt LangType = "lt"

	LangTypeLv LangType = "lv"

	LangTypePl LangType = "pl"

	LangTypePt LangType = "pt"

	LangTypeRo LangType = "ro"

	LangTypeSk LangType = "sk"

	LangTypeSl LangType = "sl"

	LangTypeSv LangType = "sv"

	LangTypeHr LangType = "hr"

	LangTypeRu LangType = "ru"

	LangTypeSr LangType = "sr"
)

// lat long (WGS decimal [.] coordinates) coordinate
// type
//

type LatlonType float64

// un locode (2 country + 3 location code)
//

type LoCodeType string

// Number of possible (departure) exist (routes) for a
// location
//

type LocExitsType int32

type LocExitsCodeType string

type LocSbbLoCodeType string

type LocSbbCodeType string

// location type, terminal type (a number indicating
// type of location,terminal)
//

type LocTypeType int32

// lloyds flag code for a certain country (seagoing)
//

type LloydsflagType string

// NST code (corresponing nst2007 EU statistics codes
// for goods).
//

type NstCodeType string

// NtS (Notices to Skippers) code/Value datatype
//

type NtsCodeType string

// NtS name/description (belonging to a ntsCode)
// datatype
//

type NtsNameType string

// NtS subtype (sub data type, there are several nts
// tables)
//

type NtstypeType string

// ADN dangerous good packing group I, II, III
//

type PackGrpType string

// UN rec 21 inner package code

type PackIdType string

// Un rec 21 inner package name/description
//

type PackNameType string

type IvsType string

// VTS/IVS code = Provider ID active in certain area
// and acting as a reporting point = receiving system (when departing
// from that location)
//

type ProviderIdType string

type IvsNameType string

type IvsTermType string

type IvsReportType bool

// quay type (terminals), indicating quay nrs/id's
//

type QuayType string

// record counter (nr of records available or in a
// set)
//

type RecCountType int64

// reftype Type (reftool data reftype, such as:
// risidx, eri_location, eri_hscode, nts_data)
//

type ReftypeType string

const (
	ReftypeTypeRis_idx ReftypeType = "ris_idx"

	ReftypeTypeEri_location ReftypeType = "eri_location"

	ReftypeTypeEri_hscode ReftypeType = "eri_hscode"

	ReftypeTypeEri_adncode ReftypeType = "eri_adncode"

	ReftypeTypeEri_conttype ReftypeType = "eri_conttype"

	ReftypeTypeEri_packtype ReftypeType = "eri_packtype"

	ReftypeTypeEri_shiptype ReftypeType = "eri_shiptype"

	ReftypeTypeEri_country ReftypeType = "eri_country"

	ReftypeTypeEri_error_code_erirsp ReftypeType = "eri_error_code_erirsp"

	ReftypeTypeNts_barrage ReftypeType = "nts_barrage"

	ReftypeTypeNts_communication ReftypeType = "nts_communication"

	ReftypeTypeNts_country ReftypeType = "nts_country"

	ReftypeTypeNts_dimension_code ReftypeType = "nts_dimension_code"

	ReftypeTypeNts_direction ReftypeType = "nts_direction"

	ReftypeTypeNts_direction_max ReftypeType = "nts_direction_max"

	ReftypeTypeNts_direction_min ReftypeType = "nts_direction_min"

	ReftypeTypeNts_gui_labels ReftypeType = "nts_gui_labels"

	ReftypeTypeNts_ice_accessibility ReftypeType = "nts_ice_accessibility"

	ReftypeTypeNts_ice_condition ReftypeType = "nts_ice_condition"

	ReftypeTypeNts_ice_classification ReftypeType = "nts_ice_classification"

	ReftypeTypeNts_ice_situation ReftypeType = "nts_ice_situation"

	ReftypeTypeNts_indication ReftypeType = "nts_indication"

	ReftypeTypeNts_interval ReftypeType = "nts_interval"

	ReftypeTypeNts_language ReftypeType = "nts_language"

	ReftypeTypeNts_limitation ReftypeType = "nts_limitation"

	ReftypeTypeNts_measure ReftypeType = "nts_measure"

	ReftypeTypeNts_position ReftypeType = "nts_position"

	ReftypeTypeNts_reason ReftypeType = "nts_reason"

	ReftypeTypeNts_reference ReftypeType = "nts_reference"

	ReftypeTypeNts_regime ReftypeType = "nts_regime"

	ReftypeTypeNts_reporting ReftypeType = "nts_reporting"

	ReftypeTypeNts_subject ReftypeType = "nts_subject"

	ReftypeTypeNts_tag ReftypeType = "nts_tag"

	ReftypeTypeNts_target_group ReftypeType = "nts_target_group"

	ReftypeTypeNts_type ReftypeType = "nts_type"

	ReftypeTypeNts_weather_category ReftypeType = "nts_weather_category"

	ReftypeTypeNts_weather_class ReftypeType = "nts_weather_class"

	ReftypeTypeNts_weather_direction ReftypeType = "nts_weather_direction"

	ReftypeTypeNts_weather_item ReftypeType = "nts_weather_item"
)

// RefData record version numbering (automaically,
// starts with 1 and increments on updates, requesting version 0=dont
// care)
//

type RefrecVersionType int64

// remarks string (remarks about the maintance of a
// record or any other remarks)
//

type RemarksType string

// return status info string

type ReturnStatusType string

// ris idx applicability from / to km (in hectometres
// (no decimals))
//

type RisapplikmType int64

// ris index (ISRS) code type (full ris index code)
//

type RisCodeType string

// ris idx communication information TXTDSC
//

type RiscomminfoType string

// ris idx category of time schedule (cattab)
//

type RiscatoftimeschedType string

// ris idx for ship type

type RisforshiptypeType string

// ris idx national Gauge Code type (can be utilised
// to store any national coding/id/link for gauges)
//

type RisgaugeidType string

// ris idx geod reference

type RisgeodrefType string

// ris idx link to external XML file
//

type RislinkextxmlType string

// locationames as used in the ris index
//

type RislocNameType string

// ris idx object code type (single code for a
// junction, termcode etc padded), subpart of the ris idx.
//

type RisobjCodeType string

// ris idx object function code type (junction, berths
// etc)
//

type RisobjfuncType string

// ris idx position on the fairway code
//

type RispostionCodeType string

// ris idx related ENC's type as used in ris idx (list
// of ENC id's)
//

type RisrelencType string

// route names, descriptions as used in the ris index
//

type RisrouteNameType string

// ris idx section node id

type RissectnodeType string

// ris idx reference level code (indicating the ref
// level)
//

type RisreflevelcodeType string

// ris idx reference level value [cm]
//

type RisreflevelvalueType int64

// ris idx use of ship useshp

type RisuseofshipType string

// ris idx zero point [cm]

type RiszeropointType int64

// UNrec 28 shiptype (4 digits)

type ShipTypeType string

// shiptype name (textual) description
//

type ShiptypeNameType string

// source string, to specify the source of this
// record/data or the update.
//

type SourceType string

// ADN signal code (to group dgs for cones/flags
// calculations)
//

type SignalCodeType string

// terminal code type (remark: termcode is the only
// part of eri locs with variable length, historical reasons).
//

type TermCodeType string

// unlocode countrycode part (first 2 of unlocode) as
// used in ris idx
//

type UnlocCCType string

// unlocode location code part (last 3 of unlocode) as
// used in ris idx
//

type UnlocLCType string

// UN nr (4 digits) adn nr for identifying ADN
// dangerous goods (according CCNR)
//

type UnnrType string

// Username which makes the call
//

type UserNameType string

// cargo weight type, integer nr (units [tons], [kg])
// depending on element)
//

type WeightType int64

// adn warning (dgs) card id

type WarnIdType string

// adn warning card

type WarnCardType string

//
// Page code, last record id in given page
//

type PageCodeType string

type PageSizeType uint32

type EcErrorCodeType string

type EcErrorGroupType uint32

type EcNameType string

type NtsIceConditionCodeThicknessType string

type AggrStatusType string

type TechNameType uint32

type MatchByCode struct {
	XMLName xml.Name `xml:"http://rwsreftool/ matchByCode"`

	*MatchByCodeType
}

type MatchByCodeResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ matchByCodeResponse"`

	*MatchByCodeResponseType
}

type MatchByName struct {
	XMLName xml.Name `xml:"http://rwsreftool/ matchByName"`

	*MatchByNameType
}

type MatchByNameResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ matchByNameResponse"`

	*MatchByNameResponseType
}

type GetDataXML struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getDataXML"`

	*GetDataXMLType
}

type GetDataXMLResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getDataXMLResponse"`

	*GetDataXMLResponseType
}

type GetMutatedTables struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getMutatedTables"`

	*GetMutatedTablesType
}

type GetMutatedTablesResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getMutatedTablesResponse"`

	*GetMutatedTablesResponseType
}

type GetMutations struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getMutations"`

	*GetMutationsType
}

type GetMutationsResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getMutationsResponse"`

	*GetMutationsResponseType
}

type GetRisDataXML struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXML"`

	*GetRisDataXMLType
}

type GetRisDataXMLResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXMLResponse"`

	*GetRisDataXMLResponseType
}

type MutateDataXML struct {
	XMLName xml.Name `xml:"http://rwsreftool/ mutateDataXML"`

	*MutateDataXMLType
}

type MutateDataXMLResponse struct {
	XMLName xml.Name `xml:"http://rwsreftool/ mutateDataXMLResponse"`

	*MutateDataXMLResponseType
}

type Exception ExceptionType

type MatchByCodeType struct {
	Reftype *ReftypeType `xml:"reftype,omitempty" json:"reftype,omitempty"`

	Code string `xml:"code,omitempty" json:"code,omitempty"`

	Page *PageRequestType `xml:"page,omitempty" json:"page,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`
}

type MatchByCodeResponseType struct {
	PageDetails *PageDetailsType `xml:"pageDetails,omitempty" json:"pageDetails,omitempty"`

	RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty" json:"refdataReturn,omitempty"`
}

type MatchByNameType struct {
	Reftype *ReftypeType `xml:"reftype,omitempty" json:"reftype,omitempty"`

	Lang *LangType `xml:"lang,omitempty" json:"lang,omitempty"`

	Name string `xml:"name,omitempty" json:"name,omitempty"`

	Page *PageRequestType `xml:"page,omitempty" json:"page,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`
}

type MatchByNameResponseType struct {
	PageDetails *PageDetailsType `xml:"pageDetails,omitempty" json:"pageDetails,omitempty"`

	RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty" json:"refdataReturn,omitempty"`
}

type GetMutatedTablesType struct {

	// fromDate and toDate in datetime format in UTC time
	//
	FromDate soap.XSDDateTime `xml:"fromDate,omitempty" json:"fromDate,omitempty"`

	ToDate soap.XSDDateTime `xml:"toDate,omitempty" json:"toDate,omitempty"`
}

type GetMutatedTablesResponseType struct {

	// Indicate how many mutated tables are
	// available/were found.
	//
	RecCount *RecCountType `xml:"recCount,omitempty" json:"recCount,omitempty"`

	// Generic status info field, to return (any) status
	// info
	//
	ReturnStatus *ReturnStatusType `xml:"returnStatus,omitempty" json:"returnStatus,omitempty"`

	MutatedTables []*MutatedTableReturnType `xml:"mutatedTables,omitempty" json:"mutatedTables,omitempty"`
}

type GetMutationsType struct {
	Reftype *ReftypeType `xml:"reftype,omitempty" json:"reftype,omitempty"`

	// from, to in datetime format in UTC time
	//
	FromDate soap.XSDDateTime `xml:"fromDate,omitempty" json:"fromDate,omitempty"`

	ToDate soap.XSDDateTime `xml:"toDate,omitempty" json:"toDate,omitempty"`

	Page *PageRequestType `xml:"page,omitempty" json:"page,omitempty"`
}

type GetMutationsResponseType struct {
	PageDetails *PageDetailsType `xml:"pageDetails,omitempty" json:"pageDetails,omitempty"`

	RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty" json:"refdataReturn,omitempty"`
}

type GetDataXMLType struct {
	Reftype *ReftypeType `xml:"reftype,omitempty" json:"reftype,omitempty"`

	Page *PageRequestType `xml:"page,omitempty" json:"page,omitempty"`

	Subcode *RisCodeType `xml:"subcode,omitempty" json:"subcode,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`
}

type GetDataXMLResponseType struct {
	PageDetails *PageDetailsType `xml:"pageDetails,omitempty" json:"pageDetails,omitempty"`

	RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty" json:"refdataReturn,omitempty"`
}

type GetRisDataXMLType struct {
	Funcode string `xml:"funcode,omitempty" json:"funcode,omitempty"`

	CountryCode *CountryCodeType `xml:"countryCode,omitempty" json:"countryCode,omitempty"`

	Page *PageRequestType `xml:"page,omitempty" json:"page,omitempty"`

	Subcode *RisCodeType `xml:"subcode,omitempty" json:"subcode,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`
}

type GetRisDataXMLResponseType struct {
	PageDetails *PageDetailsType `xml:"pageDetails,omitempty" json:"pageDetails,omitempty"`

	RisdataReturn []*Ris_idxType `xml:"risdataReturn,omitempty" json:"risdataReturn,omitempty"`
}

type MutateDataXMLType struct {
	Username *UserNameType `xml:"username,omitempty" json:"username,omitempty"`

	RefData *RefdataReturnType `xml:"refData,omitempty" json:"refData,omitempty"`
}

type MutateDataXMLResponseType struct {
	*StatReturnType
}

type ExceptionType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ exception"`

	// exception code
	Exception int32 `xml:"exception,omitempty" json:"exception,omitempty"`

	// exception message in English
	Message string `xml:"message,omitempty" json:"message,omitempty"`
}

type RefdataReturnType struct {
	Reftype struct {
		Value *ReftypeType `xml:",chardata" json:"-,"`
	} `xml:"reftype,omitempty" json:"reftype,omitempty"`

	Ris_idx *Ris_idxType `xml:"ris_idx,omitempty" json:"ris_idx,omitempty"`

	Eri_location *Eri_locationType `xml:"eri_location,omitempty" json:"eri_location,omitempty"`

	Eri_hscode *Eri_hscodeType `xml:"eri_hscode,omitempty" json:"eri_hscode,omitempty"`

	Eri_adncode *Eri_adncodeType `xml:"eri_adncode,omitempty" json:"eri_adncode,omitempty"`

	Eri_conttype *Eri_conttypeType `xml:"eri_conttype,omitempty" json:"eri_conttype,omitempty"`

	Eri_packtype *Eri_packtypeType `xml:"eri_packtype,omitempty" json:"eri_packtype,omitempty"`

	Eri_shiptype *Eri_shiptypeType `xml:"eri_shiptype,omitempty" json:"eri_shiptype,omitempty"`

	Eri_country *Eri_countryType `xml:"eri_country,omitempty" json:"eri_country,omitempty"`

	Eri_errorCodeRsp *Eri_errorCodeRspType `xml:"eri_errorCodeRsp,omitempty" json:"eri_errorCodeRsp,omitempty"`

	// NtS element is only available in the return
	// refdata structure.
	// It is not available in the Req Mutation datastructure because we
	// can not mutate nts data (not allowed)!
	//
	Nts_data *Nts_dataType `xml:"nts_data,omitempty" json:"nts_data,omitempty"`
}

type MutatedTableReturnType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ mutatedTables"`

	// This table (refType) has mutations (>0)
	//
	RefType *ReftypeType `xml:"refType,omitempty" json:"refType,omitempty"`

	// Indicates how many (>0) mutations (records) are
	// available for THIS table.
	//
	RecCount *RecCountType `xml:"recCount,omitempty" json:"recCount,omitempty"`
}

type StatReturnType struct {

	// 0=ok, 1=warning, 2=error

	Err int32 `xml:"err,omitempty" json:"err,omitempty"`

	Message struct {
	} `xml:"message,omitempty" json:"message,omitempty"`
}

type Ris_idxType struct {
	RisidxCode *RisCodeType `xml:"risidxCode,omitempty" json:"risidxCode,omitempty"`

	CodeOld *RisCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	UnlocCC *UnlocCCType `xml:"unlocCC,omitempty" json:"unlocCC,omitempty"`

	UnlocLC *UnlocLCType `xml:"unlocLC,omitempty" json:"unlocLC,omitempty"`

	WwsectCode *FwCodeType `xml:"wwsectCode,omitempty" json:"wwsectCode,omitempty"`

	Objcode *RisobjCodeType `xml:"objcode,omitempty" json:"objcode,omitempty"`

	Hectomt *KmCodeType `xml:"hectomt,omitempty" json:"hectomt,omitempty"`

	Objfunc *RisobjfuncType `xml:"objfunc,omitempty" json:"objfunc,omitempty"`

	Objname struct {

		// Without diacritics (to be used in EDIfact
		// msgs)
		//
		Loc *RislocNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		// in UTF8
		LocNational *RislocNameType `xml:"locNational,omitempty" json:"locNational,omitempty"`
	} `xml:"objname,omitempty" json:"objname,omitempty"`

	Locname struct {
		Loc *RislocNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		LocNational *RislocNameType `xml:"locNational,omitempty" json:"locNational,omitempty"`
	} `xml:"locname,omitempty" json:"locname,omitempty"`

	Wwname struct {
		Loc *RislocNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		LocNational *RislocNameType `xml:"locNational,omitempty" json:"locNational,omitempty"`
	} `xml:"wwname,omitempty" json:"wwname,omitempty"`

	Routename struct {
		Loc *RisrouteNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		LocNational *RisrouteNameType `xml:"locNational,omitempty" json:"locNational,omitempty"`
	} `xml:"routename,omitempty" json:"routename,omitempty"`

	PositionCode *RispostionCodeType `xml:"positionCode,omitempty" json:"positionCode,omitempty"`

	Relrisindex *RisCodeType `xml:"relrisindex,omitempty" json:"relrisindex,omitempty"`

	Sectionnode *RissectnodeType `xml:"sectionnode,omitempty" json:"sectionnode,omitempty"`

	Lat *LatlonType `xml:"lat,omitempty" json:"lat,omitempty"`

	Lon *LatlonType `xml:"lon,omitempty" json:"lon,omitempty"`

	Relenc *RisrelencType `xml:"relenc,omitempty" json:"relenc,omitempty"`

	Comminfo *RiscomminfoType `xml:"comminfo,omitempty" json:"comminfo,omitempty"`

	Gaugeid *RisgaugeidType `xml:"gaugeid,omitempty" json:"gaugeid,omitempty"`

	Vesselconvlength *DimType `xml:"vesselconvlength,omitempty" json:"vesselconvlength,omitempty"`

	Vesselconvbreadth *DimType `xml:"vesselconvbreadth,omitempty" json:"vesselconvbreadth,omitempty"`

	Vesselconvdraught *DimType `xml:"vesselconvdraught,omitempty" json:"vesselconvdraught,omitempty"`

	Vesselconvairdraught *DimType `xml:"vesselconvairdraught,omitempty" json:"vesselconvairdraught,omitempty"`

	Availablelength *DimType `xml:"availablelength,omitempty" json:"availablelength,omitempty"`

	Clearancewidth *DimType `xml:"clearancewidth,omitempty" json:"clearancewidth,omitempty"`

	Availabledepthcode *RisreflevelcodeType `xml:"availabledepthcode,omitempty" json:"availabledepthcode,omitempty"`

	Availabledepth *DimType `xml:"availabledepth,omitempty" json:"availabledepth,omitempty"`

	Clearanceheightcode *RisreflevelcodeType `xml:"clearanceheightcode,omitempty" json:"clearanceheightcode,omitempty"`

	Clearanceheight *DimType `xml:"clearanceheight,omitempty" json:"clearanceheight,omitempty"`

	ReferencegaugeISRS *RisCodeType `xml:"referencegaugeISRS,omitempty" json:"referencegaugeISRS,omitempty"`

	Applicabilityfromkm *RisapplikmType `xml:"applicabilityfromkm,omitempty" json:"applicabilityfromkm,omitempty"`

	Applicabilitytokm *RisapplikmType `xml:"applicabilitytokm,omitempty" json:"applicabilitytokm,omitempty"`

	Reflevel1code *RisreflevelcodeType `xml:"reflevel1code,omitempty" json:"reflevel1code,omitempty"`

	Reflevel1value *RisreflevelvalueType `xml:"reflevel1value,omitempty" json:"reflevel1value,omitempty"`

	Reflevel2code *RisreflevelcodeType `xml:"reflevel2code,omitempty" json:"reflevel2code,omitempty"`

	Reflevel2value *RisreflevelvalueType `xml:"reflevel2value,omitempty" json:"reflevel2value,omitempty"`

	Reflevel3code *RisreflevelcodeType `xml:"reflevel3code,omitempty" json:"reflevel3code,omitempty"`

	Reflevel3value *RisreflevelvalueType `xml:"reflevel3value,omitempty" json:"reflevel3value,omitempty"`

	Zeropoint *RiszeropointType `xml:"zeropoint,omitempty" json:"zeropoint,omitempty"`

	Geodref *RisgeodrefType `xml:"geodref,omitempty" json:"geodref,omitempty"`

	Catoftimesched *RiscatoftimeschedType `xml:"catoftimesched,omitempty" json:"catoftimesched,omitempty"`

	Forshiptype *RisforshiptypeType `xml:"forshiptype,omitempty" json:"forshiptype,omitempty"`

	Foruseofship *RisuseofshipType `xml:"foruseofship,omitempty" json:"foruseofship,omitempty"`

	LnktoextXMfiletimesched *RislinkextxmlType `xml:"lnktoextXMfiletimesched,omitempty" json:"lnktoextXMfiletimesched,omitempty"`

	LnktoextXMfilepastime *RislinkextxmlType `xml:"lnktoextXMfilepastime,omitempty" json:"lnktoextXMfilepastime,omitempty"`

	Vesselconvlength2 *DimType `xml:"vesselconvlength2,omitempty" json:"vesselconvlength2,omitempty"`

	Vesselconvbreadth2 *DimType `xml:"vesselconvbreadth2,omitempty" json:"vesselconvbreadth2,omitempty"`

	Vesselconvdraught2 *DimType `xml:"vesselconvdraught2,omitempty" json:"vesselconvdraught2,omitempty"`

	Vesselconvairdraught2 *DimType `xml:"vesselconvairdraught2,omitempty" json:"vesselconvairdraught2,omitempty"`

	Availablelength2 *DimType `xml:"availablelength2,omitempty" json:"availablelength2,omitempty"`

	Clearancewidth2 *DimType `xml:"clearancewidth2,omitempty" json:"clearancewidth2,omitempty"`

	Availabledepth2code *RisreflevelcodeType `xml:"availabledepth2code,omitempty" json:"availabledepth2code,omitempty"`

	Availabledepth2 *DimType `xml:"availabledepth2,omitempty" json:"availabledepth2,omitempty"`

	Clearanceheight2code *RisreflevelcodeType `xml:"clearanceheight2code,omitempty" json:"clearanceheight2code,omitempty"`

	Clearanceheight2 *DimType `xml:"clearanceheight2,omitempty" json:"clearanceheight2,omitempty"`

	Referencegauge2ISRS *RisCodeType `xml:"referencegauge2ISRS,omitempty" json:"referencegauge2ISRS,omitempty"`

	Vesselconvlength3 *DimType `xml:"vesselconvlength3,omitempty" json:"vesselconvlength3,omitempty"`

	Vesselconvbreadth3 *DimType `xml:"vesselconvbreadth3,omitempty" json:"vesselconvbreadth3,omitempty"`

	Vesselconvdraught3 *DimType `xml:"vesselconvdraught3,omitempty" json:"vesselconvdraught3,omitempty"`

	Vesselconvairdraught3 *DimType `xml:"vesselconvairdraught3,omitempty" json:"vesselconvairdraught3,omitempty"`

	Availablelength3 *DimType `xml:"availablelength3,omitempty" json:"availablelength3,omitempty"`

	Clearancewidth3 *DimType `xml:"clearancewidth3,omitempty" json:"clearancewidth3,omitempty"`

	Availabledepth3code *RisreflevelcodeType `xml:"availabledepth3code,omitempty" json:"availabledepth3code,omitempty"`

	Availabledepth3 *DimType `xml:"availabledepth3,omitempty" json:"availabledepth3,omitempty"`

	Clearanceheight3code *RisreflevelcodeType `xml:"clearanceheight3code,omitempty" json:"clearanceheight3code,omitempty"`

	Clearanceheight3 *DimType `xml:"clearanceheight3,omitempty" json:"clearanceheight3,omitempty"`

	Referencegauge3ISRS *RisCodeType `xml:"referencegauge3ISRS,omitempty" json:"referencegauge3ISRS,omitempty"`

	Catoftimesched2 *RiscatoftimeschedType `xml:"catoftimesched2,omitempty" json:"catoftimesched2,omitempty"`

	Forshiptype2 *RisforshiptypeType `xml:"forshiptype2,omitempty" json:"forshiptype2,omitempty"`

	Foruseofship2 *RisuseofshipType `xml:"foruseofship2,omitempty" json:"foruseofship2,omitempty"`

	LnktoextXMfiletimesched2 *RislinkextxmlType `xml:"lnktoextXMfiletimesched2,omitempty" json:"lnktoextXMfiletimesched2,omitempty"`

	LnktoextXMfilepastime2 *RislinkextxmlType `xml:"lnktoextXMfilepastime2,omitempty" json:"lnktoextXMfilepastime2,omitempty"`

	Catoftimesched3 *RiscatoftimeschedType `xml:"catoftimesched3,omitempty" json:"catoftimesched3,omitempty"`

	Forshiptype3 *RisforshiptypeType `xml:"forshiptype3,omitempty" json:"forshiptype3,omitempty"`

	Foruseofship3 *RisuseofshipType `xml:"foruseofship3,omitempty" json:"foruseofship3,omitempty"`

	LnktoextXMfiletimesched3 *RislinkextxmlType `xml:"lnktoextXMfiletimesched3,omitempty" json:"lnktoextXMfiletimesched3,omitempty"`

	LnktoextXMfilepastime3 *RislinkextxmlType `xml:"lnktoextXMfilepastime3,omitempty" json:"lnktoextXMfilepastime3,omitempty"`

	Startdate *LastupdateType `xml:"startdate,omitempty" json:"startdate,omitempty"`

	Enddate *LastupdateType `xml:"enddate,omitempty" json:"enddate,omitempty"`

	Infodate *LastupdateType `xml:"infodate,omitempty" json:"infodate,omitempty"`

	// specific (RIS) source of this information
	//
	RisidxSource *RemarksType `xml:"risidxSource,omitempty" json:"risidxSource,omitempty"`

	// specific Ris idx remarks, reasons for change
	// (descriptions as received with the ris idx)
	//
	RisidxRemarks *RemarksType `xml:"risidxRemarks,omitempty" json:"risidxRemarks,omitempty"`

	// source of mutation
	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	// remarks regarding the maintance of the ris idx
	//
	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_locationType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_location"`

	ErilocCode *ErilocCodeType `xml:"erilocCode,omitempty" json:"erilocCode,omitempty"`

	CodeOld *ErilocCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	RisCode *RisCodeType `xml:"risCode,omitempty" json:"risCode,omitempty"`

	LoCode *LoCodeType `xml:"loCode,omitempty" json:"loCode,omitempty"`

	FwCode *FwCodeType `xml:"fwCode,omitempty" json:"fwCode,omitempty"`

	KmCode *KmCodeType `xml:"kmCode,omitempty" json:"kmCode,omitempty"`

	Name struct {
		Loc *ErilocNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		NL *ErilocNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *ErilocNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *ErilocNameType `xml:"FR,omitempty" json:"FR,omitempty"`

		EN *ErilocNameType `xml:"EN,omitempty" json:"EN,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	LocType *LocTypeType `xml:"locType,omitempty" json:"locType,omitempty"`

	Lat *LatlonType `xml:"lat,omitempty" json:"lat,omitempty"`

	Lon *LatlonType `xml:"lon,omitempty" json:"lon,omitempty"`

	TermCode *TermCodeType `xml:"termCode,omitempty" json:"termCode,omitempty"`

	Termname struct {
		Loc *ErilocNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		NL *ErilocNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *ErilocNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *ErilocNameType `xml:"FR,omitempty" json:"FR,omitempty"`

		EN *ErilocNameType `xml:"EN,omitempty" json:"EN,omitempty"`
	} `xml:"termname,omitempty" json:"termname,omitempty"`

	TermType *LocTypeType `xml:"termType,omitempty" json:"termType,omitempty"`

	QuayFrom *QuayType `xml:"quayFrom,omitempty" json:"quayFrom,omitempty"`

	QuayTo *QuayType `xml:"quayTo,omitempty" json:"quayTo,omitempty"`

	Ivs *IvsType `xml:"ivs,omitempty" json:"ivs,omitempty"`

	// VTS/IVS (code) acting as the default reporting
	// (receiving) point (when departing from this location)
	//
	IvsVTSCode *ProviderIdType `xml:"ivsVTSCode,omitempty" json:"ivsVTSCode,omitempty"`

	IvsName *IvsNameType `xml:"ivsName,omitempty" json:"ivsName,omitempty"`

	IvsTerm *IvsTermType `xml:"ivsTerm,omitempty" json:"ivsTerm,omitempty"`

	IvsReport *IvsReportType `xml:"ivsReport,omitempty" json:"ivsReport,omitempty"`

	// Nr of possible exits (routes) when departing from
	// this location >1 means a reporting or routepoint has to be
	// specified.
	//
	Exits *LocExitsType `xml:"exits,omitempty" json:"exits,omitempty"`

	Exit0 *LocExitsCodeType `xml:"exit0,omitempty" json:"exit0,omitempty"`

	Exit1 *LocExitsCodeType `xml:"exit1,omitempty" json:"exit1,omitempty"`

	Exit2 *LocExitsCodeType `xml:"exit2,omitempty" json:"exit2,omitempty"`

	Exit3 *LocExitsCodeType `xml:"exit3,omitempty" json:"exit3,omitempty"`

	Exit4 *LocExitsCodeType `xml:"exit4,omitempty" json:"exit4,omitempty"`

	Exit5 *LocExitsCodeType `xml:"exit5,omitempty" json:"exit5,omitempty"`

	Exit6 *LocExitsCodeType `xml:"exit6,omitempty" json:"exit6,omitempty"`

	Exit7 *LocExitsCodeType `xml:"exit7,omitempty" json:"exit7,omitempty"`

	Exit8 *LocExitsCodeType `xml:"exit8,omitempty" json:"exit8,omitempty"`

	Exit9 *LocExitsCodeType `xml:"exit9,omitempty" json:"exit9,omitempty"`

	SbbLoCode *LocSbbLoCodeType `xml:"sbbLoCode,omitempty" json:"sbbLoCode,omitempty"`

	SbbCode *LocSbbCodeType `xml:"sbbCode,omitempty" json:"sbbCode,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_hscodeType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_hscode"`

	// Harmonised System type
	HsCode *HsCodeType `xml:"hsCode,omitempty" json:"hsCode,omitempty"`

	CodeOld *HsCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	Name struct {
		Loc *HsCodeNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *HsCodeNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *HsCodeNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *HsCodeNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *HsCodeNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	NstCode *NstCodeType `xml:"nstCode,omitempty" json:"nstCode,omitempty"`

	// English (NST2007) description.
	NstName *HsCodeNameType `xml:"nstName,omitempty" json:"nstName,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_adncodeType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_adncode"`

	// Be sure to edit, change the basic Simpletypes,
	// dont edit any of the (sub)elements from here!!!
	//
	AdnCode *AdnCodeType `xml:"adnCode,omitempty" json:"adnCode,omitempty"`

	CodeOld *AdnCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	Unnr *UnnrType `xml:"unnr,omitempty" json:"unnr,omitempty"`

	AdnClass *AdnClassType `xml:"adnClass,omitempty" json:"adnClass,omitempty"`

	AdnClassif *AdnClassIfType `xml:"adnClassif,omitempty" json:"adnClassif,omitempty"`

	ImoClass *AdnImoClassType `xml:"imoClass,omitempty" json:"imoClass,omitempty"`

	PackGrp *PackGrpType `xml:"packGrp,omitempty" json:"packGrp,omitempty"`

	Name struct {
		Loc *AdnCodeNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *AdnCodeNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *AdnCodeNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *AdnCodeNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *AdnCodeNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Syn struct {
		Loc *GoodSynType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		NL *GoodSynType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *GoodSynType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *GoodSynType `xml:"FR,omitempty" json:"FR,omitempty"`

		EN *GoodSynType `xml:"EN,omitempty" json:"EN,omitempty"`
	} `xml:"syn,omitempty" json:"syn,omitempty"`

	HsCode *HsCodeType `xml:"hsCode,omitempty" json:"hsCode,omitempty"`

	NstCode *NstCodeType `xml:"nstCode,omitempty" json:"nstCode,omitempty"`

	// 0, 1, 2, 3, V
	ConesBulk *ConesType `xml:"conesBulk,omitempty" json:"conesBulk,omitempty"`

	ConesTank *ConesType `xml:"conesTank,omitempty" json:"conesTank,omitempty"`

	ConesCont *ConesType `xml:"conesCont,omitempty" json:"conesCont,omitempty"`

	// 0, B, V
	FlagsBulk *FlagsType `xml:"flagsBulk,omitempty" json:"flagsBulk,omitempty"`

	FlagsTank *FlagsType `xml:"flagsTank,omitempty" json:"flagsTank,omitempty"`

	WarnCard *WarnCardType `xml:"warnCard,omitempty" json:"warnCard,omitempty"`

	WarnId *WarnIdType `xml:"warnId,omitempty" json:"warnId,omitempty"`

	Label1 *AdnLabelType `xml:"label1,omitempty" json:"label1,omitempty"`

	Label2 *AdnLabelType `xml:"label2,omitempty" json:"label2,omitempty"`

	Label3 *AdnLabelType `xml:"label3,omitempty" json:"label3,omitempty"`

	Label4 *AdnLabelType `xml:"label4,omitempty" json:"label4,omitempty"`

	AquaticToxicity *AquaticToxicityType `xml:"aquaticToxicity,omitempty" json:"aquaticToxicity,omitempty"`

	ChemicalStability *ChemicalStabilityType `xml:"chemicalStability,omitempty" json:"chemicalStability,omitempty"`

	CmrProperties *CmrPropertyType `xml:"cmrProperties,omitempty" json:"cmrProperties,omitempty"`

	Floater *FloatersinkerType `xml:"floater,omitempty" json:"floater,omitempty"`

	MaxWeightCodeInlandBulkCont *SignalCodeType `xml:"maxWeightCodeInlandBulkCont,omitempty" json:"maxWeightCodeInlandBulkCont,omitempty"`

	// max weight in kg
	MaxWeightInlandBulkCont *WeightType `xml:"maxWeightInlandBulkCont,omitempty" json:"maxWeightInlandBulkCont,omitempty"`

	SignalCodeInlandCont *SignalCodeType `xml:"signalCodeInlandCont,omitempty" json:"signalCodeInlandCont,omitempty"`

	// min weight in kg
	MinWeightInlandCont *WeightType `xml:"minWeightInlandCont,omitempty" json:"minWeightInlandCont,omitempty"`

	SignalCodeInlandExcemp *SignalCodeType `xml:"signalCodeInlandExcemp,omitempty" json:"signalCodeInlandExcemp,omitempty"`

	// min weight in kg
	MinWeightInlandExcemp *WeightType `xml:"minWeightInlandExcemp,omitempty" json:"minWeightInlandExcemp,omitempty"`

	SignalCodeSeaBulk *SignalCodeType `xml:"signalCodeSeaBulk,omitempty" json:"signalCodeSeaBulk,omitempty"`

	// min weight in kg
	MinWeightSeaBulk *WeightType `xml:"minWeightSeaBulk,omitempty" json:"minWeightSeaBulk,omitempty"`

	AggrStatus *AggrStatusType `xml:"aggrStatus,omitempty" json:"aggrStatus,omitempty"`

	TechName *TechNameType `xml:"techName,omitempty" json:"techName,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_conttypeType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_conttype"`

	ContId *ContIdType `xml:"contId,omitempty" json:"contId,omitempty"`

	CodeOld *ContIdType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	// dimensions in cm
	Length *DimType `xml:"length,omitempty" json:"length,omitempty"`

	Width *DimType `xml:"width,omitempty" json:"width,omitempty"`

	Height *DimType `xml:"height,omitempty" json:"height,omitempty"`

	// empty weight in kg
	Weight *WeightType `xml:"weight,omitempty" json:"weight,omitempty"`

	Name struct {
		Loc *ContNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		NL *ContNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *ContNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *ContNameType `xml:"FR,omitempty" json:"FR,omitempty"`

		EN *ContNameType `xml:"EN,omitempty" json:"EN,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_packtypeType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_packtype"`

	PackId *PackIdType `xml:"packId,omitempty" json:"packId,omitempty"`

	CodeOld *PackIdType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	Name struct {
		Loc *PackNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *PackNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *PackNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *PackNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *PackNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_shiptypeType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_shiptype"`

	ShipType *ShipTypeType `xml:"shipType,omitempty" json:"shipType,omitempty"`

	CodeOld *ShipTypeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	DvkType *DvkTypeType `xml:"dvkType,omitempty" json:"dvkType,omitempty"`

	CraftType *CraftTypeType `xml:"craftType,omitempty" json:"craftType,omitempty"`

	// True = transport cominination type, false=single
	// ship
	//
	Combination *CombinationFlagType `xml:"combination,omitempty" json:"combination,omitempty"`

	Name struct {
		Loc *ShiptypeNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *ShiptypeNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *ShiptypeNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *ShiptypeNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *ShiptypeNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_countryType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_country"`

	// UN country ISO code 2 chars.
	//
	CountryCode *CountryCodeType `xml:"countryCode,omitempty" json:"countryCode,omitempty"`

	CodeOld *CountryCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	CbsCode *CbscountryCodeType `xml:"cbsCode,omitempty" json:"cbsCode,omitempty"`

	CountryIsoCode3 *CountryCode3Type `xml:"countryIsoCode3,omitempty" json:"countryIsoCode3,omitempty"`

	CountryIsoNum *CountryIsoNumType `xml:"countryIsoNum,omitempty" json:"countryIsoNum,omitempty"`

	LloydsFlag *LloydsflagType `xml:"lloydsFlag,omitempty" json:"lloydsFlag,omitempty"`

	Name struct {
		Loc *CountryNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *CountryNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *CountryNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *CountryNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *CountryNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type Eri_errorCodeRspType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ eri_errorCodeRsp"`

	ErrorCode *EcErrorCodeType `xml:"errorCode,omitempty" json:"errorCode,omitempty"`

	ErrorCodeOld *EcErrorCodeType `xml:"errorCodeOld,omitempty" json:"errorCodeOld,omitempty"`

	ErrorGroup *EcErrorGroupType `xml:"errorGroup,omitempty" json:"errorGroup,omitempty"`

	Name struct {
		Loc *EcNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		EN *EcNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		NL *EcNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *EcNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		FR *EcNameType `xml:"FR,omitempty" json:"FR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type NtsIceConditionCodeType struct {
	*Nts_dataType

	Thickness *NtsIceConditionCodeThicknessType `xml:"thickness,omitempty" json:"thickness,omitempty"`
}

type Nts_dataType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ nts_data"`

	// Just a string (no enum) to return nts data type
	// of the nts_data returned!
	// reftype already contains datatype.
	//
	Ntstype *NtstypeType `xml:"ntstype,omitempty" json:"ntstype,omitempty"`

	Ntscode *NtsCodeType `xml:"ntscode,omitempty" json:"ntscode,omitempty"`

	CodeOld *NtsCodeType `xml:"codeOld,omitempty" json:"codeOld,omitempty"`

	Name struct {
		Loc *NtsNameType `xml:"Loc,omitempty" json:"Loc,omitempty"`

		NL *NtsNameType `xml:"NL,omitempty" json:"NL,omitempty"`

		DE *NtsNameType `xml:"DE,omitempty" json:"DE,omitempty"`

		EN *NtsNameType `xml:"EN,omitempty" json:"EN,omitempty"`

		FR *NtsNameType `xml:"FR,omitempty" json:"FR,omitempty"`

		BG *NtsNameType `xml:"BG,omitempty" json:"BG,omitempty"`

		CS *NtsNameType `xml:"CS,omitempty" json:"CS,omitempty"`

		DA *NtsNameType `xml:"DA,omitempty" json:"DA,omitempty"`

		EL *NtsNameType `xml:"EL,omitempty" json:"EL,omitempty"`

		ES *NtsNameType `xml:"ES,omitempty" json:"ES,omitempty"`

		ET *NtsNameType `xml:"ET,omitempty" json:"ET,omitempty"`

		FI *NtsNameType `xml:"FI,omitempty" json:"FI,omitempty"`

		HU *NtsNameType `xml:"HU,omitempty" json:"HU,omitempty"`

		IT *NtsNameType `xml:"IT,omitempty" json:"IT,omitempty"`

		LT *NtsNameType `xml:"LT,omitempty" json:"LT,omitempty"`

		LV *NtsNameType `xml:"LV,omitempty" json:"LV,omitempty"`

		MT *NtsNameType `xml:"MT,omitempty" json:"MT,omitempty"`

		PL *NtsNameType `xml:"PL,omitempty" json:"PL,omitempty"`

		PT *NtsNameType `xml:"PT,omitempty" json:"PT,omitempty"`

		RO *NtsNameType `xml:"RO,omitempty" json:"RO,omitempty"`

		SK *NtsNameType `xml:"SK,omitempty" json:"SK,omitempty"`

		SL *NtsNameType `xml:"SL,omitempty" json:"SL,omitempty"`

		SV *NtsNameType `xml:"SV,omitempty" json:"SV,omitempty"`

		HR *NtsNameType `xml:"HR,omitempty" json:"HR,omitempty"`

		RU *NtsNameType `xml:"RU,omitempty" json:"RU,omitempty"`

		SR *NtsNameType `xml:"SR,omitempty" json:"SR,omitempty"`
	} `xml:"name,omitempty" json:"name,omitempty"`

	Source *SourceType `xml:"source,omitempty" json:"source,omitempty"`

	Remarks *RemarksType `xml:"remarks,omitempty" json:"remarks,omitempty"`

	Version *RefrecVersionType `xml:"version,omitempty" json:"version,omitempty"`

	Erased *ErasedType `xml:"erased,omitempty" json:"erased,omitempty"`

	Lastupdate *LastupdateType `xml:"lastupdate,omitempty" json:"lastupdate,omitempty"`
}

type PageRequestType struct {
	XMLName xml.Name `xml:"http://rwsreftool/ page"`

	PageCode *PageCodeType `xml:"pageCode,omitempty" json:"pageCode,omitempty"`

	PageSize *PageSizeType `xml:"pageSize,omitempty" json:"pageSize,omitempty"`
}

type PageDetailsType struct {
	//XMLName xml.Name `xml:"http://rwsreftool/ pageDetails"`
	XMLName xml.Name `xml:"pageDetails"`

	PageCode *PageCodeType `xml:"pageCode,omitempty" json:"pageCode,omitempty"`

	PageSize *PageSizeType `xml:"pageSize,omitempty" json:"pageSize,omitempty"`

	TotalElements *PageSizeType `xml:"totalElements,omitempty" json:"totalElements,omitempty"`

	TotalPages *PageSizeType `xml:"totalPages,omitempty" json:"totalPages,omitempty"`
}

type RefWeb interface {

	// Error can be either of the following types:
	//
	//   - Exception

	MutateDataXML(request *MutateDataXML) (*MutateDataXMLResponse, error)

	MutateDataXMLContext(ctx context.Context, request *MutateDataXML) (*MutateDataXMLResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	MatchByCode(request *MatchByCode) (*MatchByCodeResponse, error)

	MatchByCodeContext(ctx context.Context, request *MatchByCode) (*MatchByCodeResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	GetMutations(request *GetMutations) (*GetMutationsResponse, error)

	GetMutationsContext(ctx context.Context, request *GetMutations) (*GetMutationsResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	GetRisDataXML(request *GetRisDataXML) (*GetRisDataXMLResponse, error)

	GetRisDataXMLContext(ctx context.Context, request *GetRisDataXML) (*GetRisDataXMLResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	MatchByName(request *MatchByName) (*MatchByNameResponse, error)

	MatchByNameContext(ctx context.Context, request *MatchByName) (*MatchByNameResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	GetMutatedTables(request *GetMutatedTables) (*GetMutatedTablesResponse, error)

	GetMutatedTablesContext(ctx context.Context, request *GetMutatedTables) (*GetMutatedTablesResponse, error)

	// Error can be either of the following types:
	//
	//   - Exception

	GetDataXML(request *GetDataXML) (*GetDataXMLResponse, error)

	GetDataXMLContext(ctx context.Context, request *GetDataXML) (*GetDataXMLResponse, error)
}

type refWeb struct {
	client *soap.SOAPClient
}

func NewRefService(url string, tls bool, auth soap.Auth) RefWeb {
	return NewRefWeb(soap.NewSOAPClient(url, tls, auth))
}

func NewRefWeb(client *soap.SOAPClient) RefWeb {
	return &refWeb{
		client: client,
	}
}

func (service *refWeb) MutateDataXMLContext(ctx context.Context, request *MutateDataXML) (*MutateDataXMLResponse, error) {
	response := new(MutateDataXMLResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) MutateDataXML(request *MutateDataXML) (*MutateDataXMLResponse, error) {
	return service.MutateDataXMLContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) MatchByCodeContext(ctx context.Context, request *MatchByCode) (*MatchByCodeResponse, error) {
	response := new(MatchByCodeResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) MatchByCode(request *MatchByCode) (*MatchByCodeResponse, error) {
	return service.MatchByCodeContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) GetMutationsContext(ctx context.Context, request *GetMutations) (*GetMutationsResponse, error) {
	response := new(GetMutationsResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) GetMutations(request *GetMutations) (*GetMutationsResponse, error) {
	return service.GetMutationsContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) GetRisDataXMLContext(ctx context.Context, request *GetRisDataXML) (*GetRisDataXMLResponse, error) {
	response := new(GetRisDataXMLResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) GetRisDataXML(request *GetRisDataXML) (*GetRisDataXMLResponse, error) {
	return service.GetRisDataXMLContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) MatchByNameContext(ctx context.Context, request *MatchByName) (*MatchByNameResponse, error) {
	response := new(MatchByNameResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) MatchByName(request *MatchByName) (*MatchByNameResponse, error) {
	return service.MatchByNameContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) GetMutatedTablesContext(ctx context.Context, request *GetMutatedTables) (*GetMutatedTablesResponse, error) {
	response := new(GetMutatedTablesResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) GetMutatedTables(request *GetMutatedTables) (*GetMutatedTablesResponse, error) {
	return service.GetMutatedTablesContext(
		context.Background(),
		request,
	)
}

func (service *refWeb) GetDataXMLContext(ctx context.Context, request *GetDataXML) (*GetDataXMLResponse, error) {
	response := new(GetDataXMLResponse)
	err := service.client.CallContext(ctx, "''", request, response)
	if err != nil {
		return nil, err
	}

	return response, nil
}

func (service *refWeb) GetDataXML(request *GetDataXML) (*GetDataXMLResponse, error) {
	return service.GetDataXMLContext(
		context.Background(),
		request,
	)
}