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 = loadDataFromDatabase(compagny.id)

    # 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)
		{
			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
			if(criteria.best_matching = true)
				result = bestmatching_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 bestmatching_criteria

function calcul_graphs_criteria

	function calcul_graph_repartition_gap

	function calcul_graph_repartition_data_bf

	function calcul_graph_repartition_data_bt

function calcul_graph_gap_general

function calcul_graph_general_internal_gap_fixed






