function get_compensation_output(companyId,include,compare,round,general_graphcode,filters,criteria):
{
    # 1. Extract Data  
    	panel_data = loadDataFromDatabase(compagny.id, compangy.include, filters)
		compagny_data = panel_data[panel_data[compagny.id==companyId]]

    # 2. Get datasets for comparison
		compared_data = buildComparisonDatasets(compare, panel_data, compagny_data)
 
    # 3. For each criteria, calcul graphs of each criteria
		criteriaResults = []
		for( criteria in response.criteria)
			if(criteria.best_matching = true)
				DF = bestmatching_DF()
			{
				result = null
				result = calcul_sheet_criteria(criteria,compared_data)        
				result = result[result["number_employee_panel"] > result["number_employee_company"]]
				result = result[result["number_employee_panel"] > 1]
				result = function calcul_graphs_criteria
			
				criteriaResults.append(result)
			}
    # 4. Compute global-level graphs
		globalGraphs = []
		if(response.graphs != null)
			for( graph in response.graphs)
				if(graph eq graph_gap_general)
					globalGraphs = calcul_graph_gap_general
				else if(graph eq general_internal_gap_fixed)
					globalGraphs = calcul_graph_general_internal_gap_fixed
				else ;

    # 5. Build final response
		return {
			"request": request,
			"response": {
				"criteria": criteriaResults,
				"graphs": globalGraphs
			}
		}
}

function loadDataFromDatabase(compagny.id, compangy.include, filters)

function buildComparisonDatasets(rawData,compare)

function calcul_sheet_criteria

function create_best_match_df

function get_compensation_graph_by_criteria

function get_compensation_general_graph


