title: Designig an ERP system
body: <p>I am providing a top level technical design of an ERP system. I have come up with an draft , but would need help to decide if I am on the right track.</p>
  <p>I am taking baby steps, so I am concentrating on the HR module, as we all are familiar with it.</p>
  <p>An HR module mainly has Payroll, Leave, Appraisal, Employee Welfare. All the HR modules run as batch processes in the night.</p>
  <p>I would like to make the ERP cross - platform , so decided on python / C++ ( wxPython / wxWidgets come to my mind, or I may use normal Python /C++ )</p>
  <p>I am not sure what shall the middleware be, if someone can help me with that that would be great. if you can provide me with advantages/ disadvantages of the middle ware that would be excellent, otherwise please mention the name of the middle ware, I shall look up the rest.</p>
  <p>I possess skils in C, C++, and C#, so I am bit biased with C++, but your opinion counts .</p>
  <pre><code>   User Interface ( have not decided yet )
          |
          |
      Web Service ( my suggestion is Python.  )
          |
          |
     Business Logic ( my suggestion is C++ )
          | 
          |
     Middleware   ( need a message queue here, not sure what should it be, an open source middleware )
          |
          |
     Database Broker ( my suggestion is C++ )
          |
          |
     Data Base
  </code></pre>
  <p>Please feel free to provide your comments on the above design too.</p>
  <p><strong>Example</strong></p>
  <p>John is an employee of an organisation, which has 10,000 employees. John has a gross salary of 1000 USD.</p>
  <p>Lets forget the ERP stuff for sometime and think a design for the following :-</p>
  <ol>
  <li><p>HR enters Johns salary of 1000 in the UI</p>
  </li>
  <li><p>The data is passed to to the business layer via the Web service ( I think Python shall be a good choice)</p>
  </li>
  <li><p>The business layer is responsible for the deductions; not only for John but for the 10,000 employees who work in the organisation ( C++ is probably the language of choice ).</p>
  </li>
  <li><p>After deductions, the net salary is passed to the queue ( not sure of the middleware , please suggest)</p>
  </li>
  <li><p>The payroll process runs every month end, fetches data from the message queue and updates the database.</p>
  <p>Lets say while execution of the process , there is a power cut, so the process did not run completely, and the salary details for <em>some employees</em> were not updated. In this case the message queue should retain the unprocessed data, and before the next payroll process runs, the unprocessed data should be processed first.</p>
  </li>
  <li><p>The database stores the data. ( have not decided on the database yet )</p>
  </li>
  </ol>
  <p>Domain expertise is there , so I am looking for suggestion on betterment of the architectural design.</p>
  <p>You are welcome to say &quot;No, this is not the correct approach , you should do like XYZ&quot;. with a why is your approach better. This shall help me in comparing between your approach and mine.</p>