A core part of the Novulo data model relates to Contacts, Organizations and Persons.
These components come from M3019 and are produced here. This post explains the model and the logic behind.
Contacts, Persons, organizations
Persons and organizations inherit from the contacts.
That means:
- Every person is a contact
- Every organization is a contact
- A contact can must be an organization or a person, but is never both
Inheritance is a technical setup which is not used often in the Novulo components, but it is actively used in this very common record type.
It means that two database records are treated as one.
- For every person record, there is a contact record with the same ID
- For every organization record, there is a contact record with the same ID
- As a result, a person and organization will never have the same ID. These two tables have gaps in their ID range
Contacts
Contacts represent all legal entities, either persons or organizations (including companies, governments or institutions), in your application. In the Reference Architecture, itâs referred to as the concept N_Contact
A contact is always twinned with either a Person, either an Organization. Both records inherit from the Contact and share the same ID.
The contact record stores all data that is used for legal entities irrespective of it being a Person or Organization.
Example: Sales
One feature of the contact, is the checkbox whether or not the contact is active as a sales contact.
A product can be sold to both organizations as persons. In the data model, the customer of a sales is a Contact.
Persons
Persons are natural persons. Here, information about the person can be stored, like first and last name. A person inherits from the Contact and is always twinned with this record type.
In the Reference Architecture, the concept is N_Person
Organizations
Any legal entity, not being a natural person (human), used in your application. It is used for your own organizations, customers, suppliers, suspects and prospects and any other entity you need to register.
It stores data specifically linked to organizations, like the Chamber of Commerce number or VAT registration.
The concept is N_Organization
Connection contacts
As part of CRM functionality, it is possible to link contacts to each other. This is done using the âConnectionsâ functionality, with M3019 as the prime component producing this functionality.
There are three different possibilities to link contacts:
- To link Persons to Organizations. This is the most common used scenario, as itâs used to link employees to companies;
- To link Organizations to Organizations. This can be used to define relationships between organizations, like defining partnerships between organization, or that an organization is the holding company of another company;
- To link Persons to Persons. A typical use case is to define families or other relationships that can be relevant for products like insurance
This is done using a technical approach with two records of the same contact that mirror each other and are created automatically: The Connection contact, with the concept N_ContactContact.
Examples
John doe is employee of Novulo
Novulo is employer of John Doe
Fizor. is implementation partner of Novulo
Novulo is platform provider for Fizor.
John Doe is brother of Jack Doe
Jack Doe is brother of John Doe
Then, the two Connection Contacts refer to a Connection contact information. That record type is used to store data about the Connection. In a typical example for an employer, it stores the business e-mail of the Person. The concept is N_ContactContactInformation.
Example
John doe is employee of Novulo (Connection contact)
Novulo is employer of John Doe (Connection contact)
Business email: j.doe@novulo.com (Connection Information)
Types and configuration options
The Connection contacts have various types that can be set. This is related to the set-up above. Just like the Contacts and the information, there are two record types. Depending on the type, there are 2 or 3 records.
When the connection type has an âoppositeâ type (e.g. âemployer / employeeâ), there are 2 sub records to store the type.
When the connection is bilateral the same (e.g. brother/brother), there is no opposite type needed. In this case there are two settings records.
At the moment of writing (27 May 2024; M3019 r2167, thereâs discrepancy between the names of the record types in the application and the reference architecture. As soon as this is harmonized, this post will be updated.