Ometa has defined a new SharePoint Workflow template that supports the most complex approval workflow requirements.
Instead of the standard approvals on record level, the Ometa solution makes field level approvals possible. 

How does it work?

It starts by grouping the fields of a SharePoint list in types. Each type has a defined list of authorized users and approvers.

When an authorized user updates a field belonging to a certain type a workflow is started to the approvers of that type. Parallel workflows are possible when the updated fields of a record belong to different types. When all approvals are received, the field value is updated.

When a non-authorized user updates a field, no workflow is started and the field value is not updated. 

Example:

A customer list is maintained in SharePoint. The data fields can be grouped in 2 types: the first group of data (Type A) is more finance related, the second (Type B) more sales related.

The finance administrators are the authorized users for Type A-fields and the approvers are the Finance Director and the Sales Director.

For Type B-fields the account executives are the authorized users and the Sales Director must approve the changes. 

History list

All information related to the workflow is stored in a history list. This ensures an audit trail of all past changes to the data. 

Segregation of Duties (SOD)

When the person that updates the field is the same as the person that must approve the update, a notification can be sent to the SOD responsible for further follow up. 

Ometa Integrator Framework

In a lot of cases the advanced workflow solution is offered to the customer together with the Ometa Integrator Framework. This framework enables the use of business applications (ERP, CRM,..) in a MS SharePoint Portal.

Updates/inserts to business application data is now initiated in SharePoint. It gets approved via the Ometa Advanced Workflows solution and when all approvals are received, the update/insert is done in the business application. 

Screen shot on how to group fields in types: