eCoC file schema definition

XML Schema Documentation

Table of Contents

top

Schema Document Properties

Target Namespace http://www.escis.com.au/2013/XML/CoC
Version 1.1
Element and Attribute Namespaces
  • Global element and attribute declarations belong to this schema's target namespace.
  • By default, local element declarations belong to this schema's target namespace.
  • By default, local attribute declarations have no namespace.
Schema Composition
  • This schema imports schema(s) from the following namespace(s):
    • http://www.escis.com.au/2013/XML (at ESdatFileType.xsd)
Documentation The eCoC (electronic chain of custody) files are generated by LSPECS and sent to the Laboratories from the user interface of the application. After submitting the physical samples to the lab, the user will enter all associated information (chain of custody information, sample details, requested analyses, associated lab quote details, billing…) into the system and ‘submit’ this information to the lab. The generated file (xml format) contains all this information and is sent as an email attachment to the designated lab email address. Upon receiving this file the lab can process the contained information and automatically import it into their LIMS (or equivalent) system.

Declared Namespaces

Prefix Namespace
xml http://www.w3.org/XML/1998/namespace
xsi http://www.w3.org/2001/XMLSchema-instance
xs http://www.w3.org/2001/XMLSchema
local http://www.escis.com.au/2013/XML/CoC
Schema Component Representation
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.escis.com.au/2013/XML/CoC" version="1.1">
<xs:import namespace="http://www.escis.com.au/2013/XML" schemaLocation="ESdatFileType.xsd"/>
...
</xs:schema>
top

Global Definitions

Complex Type: Additional_Contacts

Super-types: None
Sub-types: None
Name Additional_Contacts
Abstract no
Documentation Collection of additional client contacts. All contacts will be notified of the reception of the eSRN and the eLabReport form the lab depending on the attribute flags.
XML Instance Representation
<...>
<local:Contact> local:Contact </local:Contact> [0..*] ?
</...>
Schema Component Representation
<xs:complexType name="Additional_Contacts">
<xs:sequence>
<xs:element name="Contact" type=" local:Contact " minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Analysis_Group

Super-types: None
Sub-types: None
Name Analysis_Group
Abstract no
Documentation First level of the hierarchy in terms of analysis organisation. One analysis group can contain one or many suites.
XML Instance Representation
<...
WasSelectedAtThisLevel=" xs:boolean [1] ?"
Name=" xs:string [1] ?"
Description=" xs:string [0..1] ?" >
<local:Schedule_Suites> local:Schedule_Suites </local:Schedule_Suites> [0..1] ?
</...>
Schema Component Representation
<xs:complexType name="Analysis_Group">
<xs:sequence>
<xs:element name="Schedule_Suites" type=" local:Schedule_Suites " minOccurs="0"/>
</xs:sequence>
<xs:attribute name="WasSelectedAtThisLevel" type=" xs:boolean " use="required"/>
<xs:attribute name="Name" type=" xs:string " use="required"/>
<xs:attribute name="Description" type=" xs:string " use="optional"/>
</xs:complexType>
top

Complex Type: Analysis_Groups

Super-types: None
Sub-types: None
Name Analysis_Groups
Abstract no
XML Instance Representation
<...>
<local:Analysis_Group> local:Analysis_Group </local:Analysis_Group> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Analysis_Groups">
<xs:sequence>
<xs:element name="Analysis_Group" type=" local:Analysis_Group " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Analysis_Request

Super-types: None
Sub-types: None
Name Analysis_Request
Abstract no
XML Instance Representation
<...>
<local:Analysis_Groups> local:Analysis_Groups </local:Analysis_Groups> [1]
</...>
Schema Component Representation
<xs:complexType name="Analysis_Request">
<xs:sequence>
<xs:element name="Analysis_Groups" type=" local:Analysis_Groups "/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Analysis_Requests

Super-types: None
Sub-types: None
Name Analysis_Requests
Abstract no
XML Instance Representation
<...>
<local:Analysis_Request> local:Analysis_Request </local:Analysis_Request> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Analysis_Requests">
<xs:sequence>
<xs:element name="Analysis_Request" type=" local:Analysis_Request " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Analyte

Super-types: None
Sub-types: None
Name Analyte
Abstract no
XML Instance Representation
<...
WasSelectedAtThisLevel=" xs:boolean [1] ?"
Name=" xs:string [1] ?"
ESdat_Code=" xs:string [1] ?"
Unit=" xs:string [1] ?"
Detection_Limit=" xs:decimal [0..1] ?"
Quatitiation_Limit=" xs:decimal [0..1] ?"
Quantitiation_Limit=" xs:decimal [0..1] ?" />
Schema Component Representation
<xs:complexType name="Analyte">
<xs:attribute name="WasSelectedAtThisLevel" type=" xs:boolean " use="required"/>
<xs:attribute name="Name" type=" xs:string " use="required"/>
<xs:attribute name="ESdat_Code" type=" xs:string " use="required"/>
<xs:attribute name="Unit" type=" xs:string " use="required"/>
<xs:attribute name="Detection_Limit" type=" xs:decimal " use="optional"/>
<xs:attribute name="Quatitiation_Limit" type=" xs:decimal " use="optional"/>
<xs:attribute name="Quantitiation_Limit" type=" xs:decimal " use="optional"/>
</xs:complexType>
top

Complex Type: Analytes

Super-types: None
Sub-types: None
Name Analytes
Abstract no
Documentation Collection of Analytes.
XML Instance Representation
<...>
<local:Analyte> local:Analyte </local:Analyte> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Analytes">
<xs:sequence>
<xs:element name="Analyte" type=" local:Analyte " minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Contact

Super-types: None
Sub-types: None
Name Contact
Abstract no
XML Instance Representation
<...
Email=" xs:string [1] ?"
Send_SRN=" xs:boolean [1] ?"
Send_COA=" xs:boolean [1] ?"
Send_QC=" xs:boolean [1] ?"
Send_QCI=" xs:boolean [1] ?" />
Schema Component Representation
<xs:complexType name="Contact">
<xs:attribute name="Email" type=" xs:string " use="required"/>
<xs:attribute name="Send_SRN" type=" xs:boolean " use="required"/>
<xs:attribute name="Send_COA" type=" xs:boolean " use="required"/>
<xs:attribute name="Send_QC" type=" xs:boolean " use="required"/>
<xs:attribute name="Send_QCI" type=" xs:boolean " use="required"/>
</xs:complexType>
top

Complex Type: Container

Super-types: None
Sub-types: None
Name Container
Abstract no
XML Instance Representation
<...
Name=" xs:string [1] ?"
Lab_Ref=" xs:string [0..1] ?"
Colour=" xs:string [0..1] ?"
Preservative=" xs:string [0..1] ?"
Filtered=" xs:boolean [0..1] ?"
Holding_Time=" xs:string [0..1] ?"
Holding_Time_Units=" xs:string [0..1] ?"
Volume=" xs:string [0..1] ?"
ID=" xs:string [1] ?" />
Schema Component Representation
<xs:complexType name="Container">
<xs:attribute name="Name" type=" xs:string " use="required"/>
<xs:attribute name="Lab_Ref" type=" xs:string " use="optional"/>
<xs:attribute name="Colour" type=" xs:string " use="optional"/>
<xs:attribute name="Preservative" type=" xs:string " use="optional"/>
<xs:attribute name="Filtered" type=" xs:boolean " use="optional"/>
<xs:attribute name="Holding_Time" type=" xs:string " use="optional"/>
<xs:attribute name="Holding_Time_Units" type=" xs:string " use="optional"/>
<xs:attribute name="Volume" type=" xs:string " use="optional"/>
<xs:attribute name="ID" type=" xs:string " use="required"/>
</xs:complexType>
top

Complex Type: Containers

Super-types: None
Sub-types: None
Name Containers
Abstract no
XML Instance Representation
<...>
<local:Container> local:Container </local:Container> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Containers">
<xs:sequence>
<xs:element name="Container" type=" local:Container " minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: eCoC

Super-types: None
Sub-types: None
Name eCoC
Abstract no
XML Instance Representation
<...
Project_Number=" xs:string [1] ?"
Project_ID=" xs:string [1] ?"
SDG_ID=" xs:unsignedInt [1] ?"
CoC_Number=" xs:string [1] ?"
Destination_Lab=" xs:string [1] ?"
Lab_Contact_Name=" xs:string [1] ?"
Lab_Contact_Email=" xs:string [1] ?"
Lab_Contact_Phone=" xs:string [0..1] ?"
Client_Primary_Contact_Name=" xs:string [0..1] ?"
Client_Primary_Contact_Email=" xs:string [0..1] ?"
Client_Primary_Contact_Phone=" xs:string [0..1] ?"
Client_Secondary_Contact_Name=" xs:string [0..1] ?"
Client_Secondary_Contact_Email=" xs:string [0..1] ?"
Client_Secondary_Contact_Phone=" xs:string [0..1] ?"
Relinquished_By_Name=" xs:string [1] ?"
Relinquished_By_Date=" xs:dateTime [1] ?"
Relinquished_By_Company=" xs:string [1] ?"
Cooled=" xs:string [0..1] ?"
Number_Delivery_Boxes=" xs:unsignedInt [0..1] ?"
Conn_Note=" xs:string [1] ?"
AutomatedProcessingEmailAddress=" xs:string [0..1] ?"
AutomatedProcessingWebServiceUri=" xs:string [0..1] ?" >
<local:Additional_Contacts> local:Additional_Contacts </local:Additional_Contacts> [1] ?
<local:Sites> local:Sites </local:Sites> [1] ?
<local:Lab_Requests> local:Lab_Requests </local:Lab_Requests> [1] ?
</...>
Schema Component Representation
<xs:complexType name="eCoC">
<xs:sequence>
<xs:element name="Additional_Contacts" type=" local:Additional_Contacts "/>
<xs:element name="Sites" type=" local:Sites "/>
<xs:element name="Lab_Requests" type=" local:Lab_Requests "/>
</xs:sequence>
<xs:attribute name="Project_Number" type=" xs:string " use="required"/>
<xs:attribute name="Project_ID" type=" xs:string " use="required"/>
<xs:attribute name="SDG_ID" type=" xs:unsignedInt " use="required"/>
<xs:attribute name="CoC_Number" type=" xs:string " use="required"/>
<xs:attribute name="Destination_Lab" type=" xs:string " use="required"/>
<xs:attribute name="Lab_Contact_Name" type=" xs:string " use="required"/>
<xs:attribute name="Lab_Contact_Email" type=" xs:string " use="required"/>
<xs:attribute name="Lab_Contact_Phone" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Primary_Contact_Name" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Primary_Contact_Email" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Primary_Contact_Phone" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Secondary_Contact_Name" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Secondary_Contact_Email" type=" xs:string " use="optional"/>
<xs:attribute name="Client_Secondary_Contact_Phone" type=" xs:string " use="optional"/>
<xs:attribute name="Relinquished_By_Name" type=" xs:string " use="required"/>
<xs:attribute name="Relinquished_By_Date" type=" xs:dateTime " use="required"/>
<xs:attribute name="Relinquished_By_Company" type=" xs:string " use="required"/>
<xs:attribute name="Cooled" type=" xs:string " use="optional"/>
<xs:attribute name="Number_Delivery_Boxes" type=" xs:unsignedInt " use="optional"/>
<xs:attribute name="Conn_Note" type=" xs:string " use="required"/>
<xs:attribute name="AutomatedProcessingEmailAddress" type=" xs:string " use="optional"/>
<xs:attribute name="AutomatedProcessingWebServiceUri" type=" xs:string " use="optional"/>
</xs:complexType>
top

Complex Type: Lab_Request

Super-types: None
Sub-types: None
Name Lab_Request
Abstract no
Documentation A lab request includes a user defined (in LSPECS) group of analyses to be performed on the samples. User can send multiple lab (analyses) requests for the same batch of samples. This allow the user to request further analyses from the lab. LSPECS also supports multiple versions of the same request, allowing the user to correct mistakes when requesting the samples.
XML Instance Representation
<...
ID=" xs:unsignedInt [1] ?"
Number=" xs:unsignedInt [1] ?"
Version=" xs:unsignedInt [1] ?"
Turnaround_Date=" xs:string [0..1] ?"
IsFastTurnaround=" xs:boolean [0..1] ?"
Purchase_Order_Number=" xs:string [1] ?"
Org_To_Be_Billed=" xs:string [0..1] ?"
Bill_To_Name=" xs:string [0..1] ?"
Bill_To_Email=" xs:string [0..1] ?"
Submitted_By_Name=" xs:string [1] ?"
Submitted_By_Org=" xs:string [1] ?"
Submitted_By_Date=" xs:dateTime [1] ?"
Special_Instructions=" xs:string [0..1] ?" >
<local:Quotes> local:Quotes </local:Quotes> [1] ?
</...>
Schema Component Representation
<xs:complexType name="Lab_Request">
<xs:sequence>
<xs:element name="Quotes" type=" local:Quotes "/>
</xs:sequence>
<xs:attribute name="ID" type=" xs:unsignedInt " use="required"/>
<xs:attribute name="Number" type=" xs:unsignedInt " use="required"/>
<xs:attribute name="Version" type=" xs:unsignedInt " use="required"/>
<xs:attribute name="Turnaround_Date" type=" xs:string " use="optional"/>
<xs:attribute name="IsFastTurnaround" type=" xs:boolean " use="optional"/>
<xs:attribute name="Purchase_Order_Number" type=" xs:string " use="required"/>
<xs:attribute name="Org_To_Be_Billed" type=" xs:string " use="optional"/>
<xs:attribute name="Bill_To_Name" type=" xs:string " use="optional"/>
<xs:attribute name="Bill_To_Email" type=" xs:string " use="optional"/>
<xs:attribute name="Submitted_By_Name" type=" xs:string " use="required"/>
<xs:attribute name="Submitted_By_Org" type=" xs:string " use="required"/>
<xs:attribute name="Submitted_By_Date" type=" xs:dateTime " use="required"/>
<xs:attribute name="Special_Instructions" type=" xs:string " use="optional"/>
</xs:complexType>
top

Complex Type: Lab_Requests

Super-types: None
Sub-types: None
Name Lab_Requests
Abstract no
Documentation Collection of Lab Requests associated with the physical samples identified by this eCoC.
XML Instance Representation
<...>
<local:Lab_Request> local:Lab_Request </local:Lab_Request> [0..*] ?
</...>
Schema Component Representation
<xs:complexType name="Lab_Requests">
<xs:sequence>
<xs:element name="Lab_Request" type=" local:Lab_Request " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Method

Super-types: None
Sub-types: None
Name Method
Abstract no
XML Instance Representation
<...
Name=" xs:string [1] ?"
Code=" xs:string [1] ?"
Lab_Ref=" xs:string [1] ?"
Matrix=" xs:string [1] ?"
Description=" xs:string [0..1] ?" >
<local:Analytes> local:Analytes </local:Analytes> [0..1] ?
</...>
Schema Component Representation
<xs:complexType name="Method">
<xs:sequence>
<xs:element name="Analytes" type=" local:Analytes " minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Name" type=" xs:string " use="required"/>
<xs:attribute name="Code" type=" xs:string " use="required"/>
<xs:attribute name="Lab_Ref" type=" xs:string " use="required"/>
<xs:attribute name="Matrix" type=" xs:string " use="required"/>
<xs:attribute name="Description" type=" xs:string " use="optional"/>
</xs:complexType>
top

Complex Type: Methods

Super-types: None
Sub-types: None
Name Methods
Abstract no
XML Instance Representation
<...>
<local:Method> local:Method </local:Method> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Methods">
<xs:sequence>
<xs:element name="Method" type=" local:Method " minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Quote

Super-types: None
Sub-types: None
Name Quote
Abstract no
XML Instance Representation
<...
Quote_Number=" xs:string [1] ?"
Quote_Name=" xs:string [1] ?"
Expiry_Date=" xs:dateTime [0..1] ?"
Created_Date=" xs:dateTime [1] ?"
Client_Name=" xs:string [1] ?"
Client_Ref=" xs:string [1] ?"
Client_Manager=" xs:string [0..1] ?"
IsPrimaryQuote=" xs:boolean [0..1] ?" >
<local:Samples> local:Samples </local:Samples> [1]
</...>
Schema Component Representation
<xs:complexType name="Quote">
<xs:sequence>
<xs:element name="Samples" type=" local:Samples "/>
</xs:sequence>
<xs:attribute name="Quote_Number" type=" xs:string " use="required"/>
<xs:attribute name="Quote_Name" type=" xs:string " use="required"/>
<xs:attribute name="Expiry_Date" type=" xs:dateTime " use="optional"/>
<xs:attribute name="Created_Date" type=" xs:dateTime " use="required"/>
<xs:attribute name="Client_Name" type=" xs:string " use="required"/>
<xs:attribute name="Client_Ref" type=" xs:string " use="required"/>
<xs:attribute name="Client_Manager" type=" xs:string " use="optional"/>
<xs:attribute name="IsPrimaryQuote" type=" xs:boolean " use="optional"/>
</xs:complexType>
top

Complex Type: Quotes

Super-types: None
Sub-types: None
Name Quotes
Abstract no
Documentation Any special instructions for the laboratory, associated with the analyses request.
XML Instance Representation
<...>
<local:Quote> local:Quote </local:Quote> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Quotes">
<xs:sequence>
<xs:element name="Quote" type=" local:Quote " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Sample

Super-types: None
Sub-types: None
Name Sample
Abstract no
XML Instance Representation
<...
Sample_ID=" xs:string [1] ?"
Matrix_Type=" xs:string [1] ?"
DateTime=" xs:dateTime [1] ?"
Comments=" xs:string [1] ?"
Hold=" xs:boolean [0..1] ?" >
<local:Analysis_Requests> local:Analysis_Requests </local:Analysis_Requests> [1] ?
<local:Containers> local:Containers </local:Containers> [0..1] ?
</...>
Schema Component Representation
<xs:complexType name="Sample">
<xs:sequence>
<xs:element name="Analysis_Requests" type=" local:Analysis_Requests "/>
<xs:element name="Containers" type=" local:Containers " minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Sample_ID" type=" xs:string " use="required"/>
<xs:attribute name="Matrix_Type" type=" xs:string " use="required"/>
<xs:attribute name="DateTime" type=" xs:dateTime " use="required"/>
<xs:attribute name="Comments" type=" xs:string " use="required"/>
<xs:attribute name="Hold" type=" xs:boolean " use="optional"/>
</xs:complexType>
top

Complex Type: Samples

Super-types: None
Sub-types: None
Name Samples
Abstract no
XML Instance Representation
<...>
<local:Sample> local:Sample </local:Sample> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Samples">
<xs:sequence>
<xs:element name="Sample" type=" local:Sample " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Schedule_Suite

Super-types: None
Sub-types: None
Name Schedule_Suite
Abstract no
XML Instance Representation
<...
WasSelectedAtThisLevel=" xs:boolean [1] ?"
Name=" xs:string [1] ?"
Description=" xs:string [0..1] ?" >
<local:Methods> local:Methods </local:Methods> [0..1] ?
</...>
Schema Component Representation
<xs:complexType name="Schedule_Suite">
<xs:sequence>
<xs:element name="Methods" type=" local:Methods " minOccurs="0"/>
</xs:sequence>
<xs:attribute name="WasSelectedAtThisLevel" type=" xs:boolean " use="required"/>
<xs:attribute name="Name" type=" xs:string " use="required"/>
<xs:attribute name="Description" type=" xs:string " use="optional"/>
</xs:complexType>
top

Complex Type: Schedule_Suites

Super-types: None
Sub-types: None
Name Schedule_Suites
Abstract no
Documentation Collection of Analysis Suites in cluded in the Analysis Group.
XML Instance Representation
<...>
<local:Schedule_Suite> local:Schedule_Suite </local:Schedule_Suite> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Schedule_Suites">
<xs:sequence>
<xs:element name="Schedule_Suite" type=" local:Schedule_Suite " minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
top

Complex Type: Site

Super-types: None
Sub-types: None
Name Site
Abstract no
XML Instance Representation
<.../>
Schema Component Representation
<xs:complexType name="Site"/>
top

Complex Type: Sites

Super-types: None
Sub-types: None
Name Sites
Abstract no
Documentation Sites Associated with the submitted samples.
XML Instance Representation
<...>
<local:Site> xs:string </local:Site> [0..*]
</...>
Schema Component Representation
<xs:complexType name="Sites">
<xs:sequence>
<xs:element name="Site" type=" xs:string " maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
top

Legend

Complex Type:

Schema Component Type

AusAddress

Schema Component Name
Super-types: Address < AusAddress (by extension)
Sub-types:
  • QLDAddress (by restriction)
If this schema component is a type definition, its type hierarchy is shown in a gray-bordered box.
Name AusAddress
Abstract no
The table above displays the properties of this schema component.
XML Instance Representation
<... country="Australia" >
<unitNo> string </unitNo> [0..1]
<houseNo> string </houseNo> [1]
<street> string </street> [1]
Start Choice [1]
<city> string </city> [1]
<town> string </town> [1]
End Choice
<state> AusStates </state> [1]
<postcode> string <<pattern = [1-9][0-9]{3}>> </postcode> [1] ?
</...>

The XML Instance Representation table above shows the schema component's content as an XML instance.

  • The minimum and maximum occurrence of elements and attributes are provided in square brackets, e.g. [0..1].
  • Model group information are shown in gray, e.g. Start Choice ... End Choice.
  • For type derivations, the elements and attributes that have been added to or changed from the base type's content are shown in bold.
  • If an element/attribute has a fixed value, the fixed value is shown in green, e.g. country="Australia".
  • Otherwise, the type of the element/attribute is displayed.
    • If the element/attribute's type is in the schema, a link is provided to it.
    • For local simple type definitions, the constraints are displayed in angle brackets, e.g. <<pattern = [1-9][0-9]{3}>>.
  • If a local element/attribute has documentation, it will be displayed in a window that pops up when the question mark inside the attribute or next to the element is clicked, e.g. <postcode>.
Schema Component Representation
<complexType name="AusAddress">
<complexContent>
<extension base=" Address ">
<sequence>
<element name="state" type=" AusStates "/>
<element name="postcode">
<simpleType>
<restriction base=" string ">
<pattern value="[1-9][0-9]{3}"/>
</restriction>
</simpleType>
</element>
</sequence>
<attribute name="country" type=" string " fixed="Australia"/>
</extension>
</complexContent>
</complexType>
The Schema Component Representation table above displays the underlying XML representation of the schema component. (Annotations are not shown.)
top

  • Contact
  • 100% of environmental professionals saved time when using Esdat Environmental Data Software. Over 50% of professionals achieved time savings of at least 40%.
  • © 2017