Distributed, fault tolerant, network-split resistant, performant, transactional intermediary processing.

Financial Language

The foundation of Spawnproc is strictly typed banking specific programming language, which has loans/deposits, cashbacks, grace periods as its primitives, all defined in clean manner.

Ontological Model

We define data model from the ground up. In top-level metainformation you are able to define rules for storing, displaying and handling the documents and other data.

Typed Schema

Spawnproc works with a range of database backends: Mnesia, Riak and KAI. The data scheme is automatically kept in sync with the ontological model.

Generated Forms

We automatically generates the visual forms for data assessment based on ontological model. These forms are fulfilled with native data for KVS storage.

Workflow Engine

The engine defines business flows according to industry standards. Each flow is accompanied by all relevant documents, such as approval forms, sing-off sheets, legal agreements.

Decision Trees

Data Pattern matching builds effective decision trees from business rules and can compete with Drools. See RETE algorithm.

Unified Messaging

Spawnproc supports a range of message buses, including AMQP and MQTT. Our messaging relay terminates the message flow using JSON, Binary, XML and TXT formatters.

Distributed XA/CR

SpawnProc ships with distributed transaction coordinator that turns any component to be transaction aware.

   Stub Amortising Swap Derivative

instrument 'Stub_Amort_Swap' parties name DB id PARTYAUS33 trade DB-0001 name Barclays id BARCGB2L trade SW2000 stream pay Barclays rate 'EUR-LIBOR-BBA' monthly 6 of notional range 06/14/1995 50000000 12/14/1995 40000000 12/14/1996 30000000 12/14/1997 20000000 12/14/1998 10000000 from 01/16/1995 to 12/14/1999 adjust NONE, MODFOLLOWING starting 06/14/1995 recalculate monthly 6 roll 14 reset 2 business days before monthly 6 adjust MODFOLLOWING initial stub interpolate rate from 4 months to 5 months fraction 'ACT/360' calendar GBLO stream pay DB rate 6% annual of notional range 06/14/1995 50000000 12/14/1995 40000000 12/14/1996 30000000 12/14/1997 20000000 12/14/1998 10000000 starting 12/14/1995 recalculate annual roll 14 calendar DEFR fraction '30E/360'

   Banking Credit Card Program

program 'M-PLA-CB' 'UAH' limit unknown grace 60 days penalty daily 100 currency convert 1% rate monthly 4.9% of credit fee monthly 12 once on init monthly 3% of debt limit min 50 max debt monthly 1.2% of debt monthly 24 status disabled 10 transaction cashin 0 cashout pos 'ATMOSPHERA' 0 cashout country 'UA' 5 + 1.5% _ 30 + 1% wire target local 0 wire 0.5% of amount limit min 5 max 500 accounts fee M-100001 rate M-100002 penalty M-100003

   Open Application Converted BPMN 2.0 Workflow

deposit_app() -> #process { name = 'Create Deposit Account', flows = [ #sequenceFlow{source='Init', target='Payment'}, #sequenceFlow{source='Payment', target='Signatory'}, #sequenceFlow{source='Payment', target='Process'}, #sequenceFlow{source='Process', target='Final'}, #sequenceFlow{source='Signatory', target='Process'}, #sequenceFlow{source='Signatory', target='Final'} ], tasks = [ #userTask { name='Init', module = deposit }, #userTask { name='Signatory', module = deposit}, #serviceTask { name='Payment', module = deposit}, #serviceTask { name='Process', module = deposit}, #endEvent { name='Final'} ], beginEvent = 'Init', endEvent = 'Final', events = [ #messageEvent{name="PaymentReceived"} ] }.

   One-Time Password Converted X-Form

document(Name,Phone) -> #document { name = Name, sections =[ #section { name= [<<"Input OTP sent to ">>, wf:to_list(Phone#phone.number)] } ], buttons =[ #button { name='decline', title = <<"Cancel">>, class=cancel, postback={'CloseOpenedForm', Name} }, #button { name='next', title = <<"Continue">>, class=[button,green], postback={'Spinner', {'OpenForm',Name}}, sources=[otp] } ], fields =[ #field { name='otp', type=otp, title= <<"Password">>, labelClass=label, fieldClass=column3} ] }.

   Autogenerated Forms

Success Stories

Deposits Application

Our aim was to provide smallest possible minimalistic application for PrivatBank customers, who are using deposit accounts. We've created fast and robust responsive web application that can fit any devices and provides modern secure features over the fast WebSocket channel using N2O, BPE, KVS, UPL and FORMS applications from Synrc stack.

Read More