I am in the process of building a new component for an existing application and I have a fairly specific scenario I need to design an interface for. The purpose of the tool is to allow a user to do a mass search of arbitrary data against an existing database and to return the best guess at a match if one or many are found. I have been looking all over for examples of something that is similar for inspiration, but I haven't found much that seems to get close. I will detail the entire process in the hopes someone can help me get unstuck :) The general workflow is as follows:
User uploads a CSV file containing rows of data about an individual. Each column of the file contains similar data (there may be a first name column, a last name column, email, etc). Once the file finishes uploading the user is taken to the next screen. There the "discovered" columns are presented by name. On the same screen a list of searchable fields is present. There are currently 15 of these fields and they are considered constants. They are listed by name (first name, last name, telephone, email etc). On this screen, the user maps their "discovered" fields to the searchable constants by dragging and dropping them. Their file may have any number of columns which will be ignored in the processing unless they map them at this stage. A user may choose to map as little as one field or as many as all 15. Once this stage is complete, the file is mapped and processed. During processing, for each row of data in the file a search is performed that attempts to find the best matches. Without getting too far into the details, a composite score is built that specifies the level of confidence there is that the input data matches some existing user. The top scoring items are returned and the absolute best match (if it exists) is marked as a match. After this is complete the user is directed to the third screen (This is the one I am having trouble with!!!). At this stage, the user needs to be able to quickly review each of the rows that were processed. It's at this stage that the confluence of constraints is preventing me from defining a working solution. I will list the constraints I have identified below (the term "row" refers to a file input row):
- For each row there may be 0, 1 or many matches
- For each row it must be obvious a match was picked (or that no match was found), what the match is, and the composite score for the match. These shouldn't be easily confused with the list of potential matches (those with a low composite score that didn't make the initial cut)
- The user must be able to quickly unmatch a result they deem incorrect
- a user must be able to replace a match with a "more correct" match from the list of matches (which are ranked by composite score)
- For every match that is returned, metadata (about 10 data points) will be included to help a user understand why a match was picked or why another match may be more correct (for example, people with the same name at living at the same address could be indecipherable, so we will include the matched item's date of birth to help the user make a judgement on which is more correct)
- Each search by user or file may be performed using a different number of arguments. For example search one may use first and last name, while a different users search may use up to 15 different characteristics
- It would be nice if the solution were not terribly ugly and extra bonus points if it could appear half way distinguishable on a mobile device
I think that's the best detail I can give at the moment. Please let me know if something is unclear. Thanks so much in advance for any help anyone can provide :)