SolutionGuidance / psm

Welcome to the Medicare/Medicaid Provider Enrollment Screening Portal
http://projectpsm.org/
Other
26 stars 18 forks source link

Write sample prose description of code/data flow for 1-2 common PSM use cases #559

Open brainwane opened 6 years ago

brainwane commented 6 years ago

Splitting off from #466.

I'll be turning a conversation I had with @jasonaowen today into a prose document, to be used in conjunction with an architecture diagram such as https://github.com/solutionguidance/psm/blob/master/team-notes/psm-architecture-for-stakeholders.odg , to help a developer understand code execution and data flow during the course of 1-2 common use cases.

brainwane commented 6 years ago

Use case: provider creating and submitting an application for enrollment

as you create an application entities created in db by way of hibernate Java objects taged as entities

at each step of enrollment process data on form -> converted into XML-defined Java data types [the controller asks for ... checking part lives in business process. bus process knows how to ask bus model to convert things] passed to Drools to run validation rules error reports converted back into info frontend can use figuring out: that error maps to this input field show errors at top of page

at end, when you hit Submit Enrollment entire enrollment, all data -> serialized to XML XML-defined datatypes know how to do that serialized version dumped into one of the jBPM tables (a queue) jBPM fires up, runs the enrollment business process (the only one we have) calls into our code to, for example, validate further Drools rules, call LEIE to check for exclusion -- this is cms-buiness-process world

And then, at end of that process, assuming no errors, status gets updated risk level gets set - on the enrollment (in the database)

and then it's ready for a reviewer to review!

[question: where does that state live? maybe jBPM is involved? & entry in our part of the database?]

see enrollment process.png

brainwane commented 6 years ago

Use case: User login

Spring is configured to only have 1 data source - has in the past been configured to, e.g., look at LDAP, and someday we would like to talk with SAML currently, only: the database

login code lives in cms-web

cms-web talks to Spring and Hibernate

one of the interfaces to find in services project: identity provider DAO

That's fulfilled by DB identity provider DAO

That was in cms-business-process

it knows how to do password hashing & talk to the database

user tries to login. post data. spring finds controller.... built-in .... custom authentication built in .... we configured Spring authentication manager with our primary database provider, fulfilled by domain database authentication provider, which has a reference to the registration service, which has a reference to identity provider, which knows how to talk to the database and do password hashing

delegates password hashing to Spring security

after successful login, redirected to /landing proceed as normal

after successful auth, we've configured Spring-Security to go to a specific URL normal from there on!