from SpectrumCommon.Const.PC import *
import SpectrumCommon.Const.PC.PCTags as pcmvt
from SpectrumCommon.Modvars.GB.GBDefs import *

pc_program_area_types_dim = 'program_area_types'
pc_program_area_types_ids = {
    IH_MATERNAL_NEWBORN_HEALTH_MST_ID : 'IH_MATERNAL_NEWBORN_HEALTH_MST_ID'   ,
    IH_SEXUAL_REPROD_HEALTH_MST_ID    : 'IH_SEXUAL_REPROD_HEALTH_MST_ID',
    UH_ChildHealthMstID               : 'UH_ChildHealthMstID',
    UH_VaccinationMstID               : 'UH_VaccinationMstID',
    UH_MalariaMstID                   : 'UH_MalariaMstID',
    IH_TB_MST_ID                      : 'IH_TB_MST_ID',
    IH_HIV_AIDS_MST_ID                : 'IH_HIV_AIDS_MST_ID',
    UH_NutritionMstID                 : 'UH_NutritionMstID',
    UH_WASHMstID                      : 'UH_WASHMstID',
    IH_NCD_MST_ID                     : 'IH_NCD_MST_ID',
    UH_MentalNueroSubsUseDisMstID     : 'UH_MentalNueroSubsUseDisMstID',
    UH_AdolescentHealthMstID          : 'UH_AdolescentHealthMstID',
    IH_NTD_MST_ID                     : 'IH_NTD_MST_ID'
}


pc_main_rows_dim = "pc_main_rows_dim"
pc_main_rows_ids = {
        PC_PROG_SPEC_HR_HEADER_ROW_CURR_ID         : 'PROG_SPEC_HR_HEADER_ROW',
        PC_NAT_LEVEL_STAFF_ROW_CURR_ID	  	   : 'NAT_LEVEL_STAFF_ROW',
        PC_REG_LEVEL_STAFF_ROW_CURR_ID   	   : 'REG_LEVEL_STAFF_ROW',
        PC_DIST_LEVEL_STAFF_ROW_CURR_ID	 	   : 'DIST_LEVEL_STAFF_ROW',
        PC_TRAIN_HEADER_ROW_CURR_ID                : 'TRAIN_HEADER_ROW',
        PC_INSERV_REFRESH_TRAIN_ROW_CURR_ID        : 'INSERV_REFRESH_TRAIN_ROW',
        PC_TRAIN_OF_TRAIN_ROW_CURR_ID              : 'TRAIN_OF_TRAIN_ROW',
        PC_DEV_TRAIN_PROG_MAT_ROW_CURR_ID          : 'DEV_TRAIN_PROG_MAT_ROW',
        PC_CHANGE_PRESERV_TRAIN_CURRIC_ROW_CURR_ID : 'CHANGE_PRESERV_TRAIN_CURRIC_ROW',
        PC_SUPP_ACT_ROW_CURR_ID                    : 'SUPP_ACT_ROW',
        PC_SUPERVIS_HEADER_ROW_CURR_ID             : 'SUPERVIS_HEADER_ROW',
        PC_COORD_MEET_ROW_CURR_ID                  : 'COORD_MEET_ROW',
        PC_NAT_STAFF_VISIT_LOCAL_ROW_CURR_ID       : 'NAT_STAFF_VISIT_LOCAL_ROW',
        PC_MONITOR_EVAL_HEADER_ROW_CURR_ID         : 'MONITOR_EVAL_HEADER_ROW',
        PC_DESIGN_ME_FRAME_SYS_ROW_CURR_ID         : 'DESIGN_ME_FRAME_SYS_ROW',
        PC_DESIGN_QC_QA_ROW_CURR_ID                : 'DESIGN_QC_QA_ROW',
        PC_DESIGN_REV_DATA_MGMT_SYS_ROW_CURR_ID    : 'DESIGN_REV_DATA_MGMT_SYS_ROW',
        PC_DATA_COLLECT_ANALYSIS_ROW_CURR_ID       : 'DATA_COLLECT_ANALYSIS_ROW',
        PC_QC_QA_ROW_CURR_ID                       : 'QC_QA_ROW',
        PC_INFRA_EQUIP_HEADER_ROW_CURR_ID          : 'INFRA_EQUIP_HEADER_ROW',
        PC_SIT_ASSESS_INFRA_ROW_CURR_ID            : 'SIT_ASSESS_INFRA_ROW',
        PC_EQUIP_UPGRADES_LOW_TIER_ROW_CURR_ID     : 'EQUIP_UPGRADES_LOW_TIER_ROW',
        PC_EQUIP_UPGRADES_HOSP_ROW_CURR_ID         : 'EQUIP_UPGRADES_HOSP_ROW',
        PC_TRANSPORT_HEADER_ROW_CURR_ID            : 'TRANSPORT_HEADER_ROW',
        PC_SIT_ASSESS_TRANSPORT_ROW_CURR_ID  	   : 'SIT_ASSESS_TRANSPORT_ROW',
        PC_NEW_VEHIC_PURCHASE_ROW_CURR_ID 	   : 'NEW_VEHIC_PURCHASE_ROW',
        PC_VEHIC_OP_MAINT_ROW_CURR_ID       	   : 'VEHIC_OP_MAINT_ROW',
        PC_COMM_MEDIA_HEADER_ROW_CURR_ID           : 'COMM_MEDIA_HEADER_ROW',
        PC_DEV_COMM_STRAT_ROW_CURR_ID              : 'DEV_COMM_STRAT_ROW',
        PC_MASS_MEDIA_COMM_ROW_CURR_ID             : 'MASS_MEDIA_COMM_ROW',
        PC_PRINTED_MATS_ROW_CURR_ID                : 'PRINTED_MATS_ROW',
        PC_SOCIAL_OUTR_ACTIV_ROW_CURR_ID           : 'SOCIAL_OUTR_ACTIV_ROW',
        PC_ADVOC_HEADER_ROW_CURR_ID                : 'ADVOC_HEADER_ROW',
        PC_PLAN_ADVOC_STRAT_ROW_CURR_ID            : 'PLAN_ADVOC_STRAT_ROW',
        PC_ADVOC_ACTS_ROW_CURR_ID                  : 'ADVOC_ACTS_ROW',
        PC_ADVOC_MATS_ROW_CURR_ID                  : 'ADVOC_MATS_ROW',
        PC_GEN_PROG_MGMT_HEADER_ROW_CURR_ID        : 'GEN_PROG_MGMT_HEADER_ROW',
        PC_DESIGN_REV_COUNTRY_STRAT_ROW_CURR_ID    : 'DESIGN_REV_COUNTRY_STRAT_ROW',
        PC_DEV_REVIEW_ANNUAL_WORKPLAN_ROW_CURR_ID  : 'DEV_REVIEW_ANNUAL_WORKPLAN_ROW',
        PC_DEV_REVIEW_HR_PLAN_ROW_CURR_ID	   : 'DEV_REVIEW_HR_PLAN_ROW',
        PC_PROG_COORD_MEET_ROW_CURR_ID             : 'PROG_COORD_MEET_ROW',
        PC_COMMOD_REG_POL_ROW_CURR_ID              : 'COMMOD_REG_POL_ROW',
        PC_SIT_ANALYSIS_ROW_CURR_ID                : 'SIT_ANALYSIS_ROW',
        PC_OFFICE_EQUIP_SUPP_ROW_CURR_ID           : 'OFFICE_EQUIP_SUPP_ROW',
        PC_UTIL_ROW_CURR_ID                        : 'UTIL_ROW',
        PC_OTHER_HEADER_ROW_CURR_ID                : 'OTHER_HEADER_ROW',
        PC_DBL_CLICK_ADD_OTHER_ITEMS_ROW_CURR_ID   : 'DBL_CLICK_ADD_OTHER_ITEMS_ROW'
}
pc_main_hiv_rows_dim = "pc_main_hiv_rows_dim"
pc_main_hiv_rows_ids = {
    
        PC_PROG_SPEC_HR_HEADER_ROW_CURR_ID         : 'PROG_SPEC_HR_HEADER_ROW',
        PC_NAT_LEVEL_STAFF_ROW_CURR_ID	  	   : 'NAT_LEVEL_STAFF_ROW',
        PC_REG_LEVEL_STAFF_ROW_CURR_ID   	   : 'REG_LEVEL_STAFF_ROW',
        PC_DIST_LEVEL_STAFF_ROW_CURR_ID	 	   : 'DIST_LEVEL_STAFF_ROW',
        PC_TRAIN_HEADER_ROW_CURR_ID                : 'TRAIN_HEADER_ROW',
        PC_INSERV_REFRESH_TRAIN_ROW_CURR_ID        : 'INSERV_REFRESH_TRAIN_ROW',
        PC_TRAIN_OF_TRAIN_ROW_CURR_ID              : 'TRAIN_OF_TRAIN_ROW',
        PC_DEV_TRAIN_PROG_MAT_ROW_CURR_ID          : 'DEV_TRAIN_PROG_MAT_ROW',
        PC_CHANGE_PRESERV_TRAIN_CURRIC_ROW_CURR_ID : 'CHANGE_PRESERV_TRAIN_CURRIC_ROW',
        PC_SUPP_ACT_ROW_CURR_ID                    : 'SUPP_ACT_ROW',
        PC_SUPERVIS_HEADER_ROW_CURR_ID             : 'SUPERVIS_HEADER_ROW',
        PC_COORD_MEET_ROW_CURR_ID                  : 'COORD_MEET_ROW',
        PC_NAT_STAFF_VISIT_LOCAL_ROW_CURR_ID       : 'NAT_STAFF_VISIT_LOCAL_ROW',
        PC_MONITOR_EVAL_HEADER_ROW_CURR_ID         : 'MONITOR_EVAL_HEADER_ROW',
        PC_DESIGN_ME_FRAME_SYS_ROW_CURR_ID         : 'DESIGN_ME_FRAME_SYS_ROW',
        PC_DESIGN_QC_QA_ROW_CURR_ID                : 'DESIGN_QC_QA_ROW',
        PC_DESIGN_REV_DATA_MGMT_SYS_ROW_CURR_ID    : 'DESIGN_REV_DATA_MGMT_SYS_ROW',
        PC_DATA_COLLECT_ANALYSIS_ROW_CURR_ID       : 'DATA_COLLECT_ANALYSIS_ROW',
        PC_QC_QA_ROW_CURR_ID                       : 'QC_QA_ROW',
        PC_INFRA_EQUIP_HEADER_ROW_CURR_ID          : 'INFRA_EQUIP_HEADER_ROW',
        PC_SIT_ASSESS_INFRA_ROW_CURR_ID            : 'SIT_ASSESS_INFRA_ROW',
        PC_EQUIP_UPGRADES_LOW_TIER_ROW_CURR_ID     : 'EQUIP_UPGRADES_LOW_TIER_ROW',
        PC_EQUIP_UPGRADES_HOSP_ROW_CURR_ID         : 'EQUIP_UPGRADES_HOSP_ROW',
        PC_TRANSPORT_HEADER_ROW_CURR_ID            : 'TRANSPORT_HEADER_ROW',
        PC_SIT_ASSESS_TRANSPORT_ROW_CURR_ID  	   : 'SIT_ASSESS_TRANSPORT_ROW',
        PC_NEW_VEHIC_PURCHASE_ROW_CURR_ID 	   : 'NEW_VEHIC_PURCHASE_ROW',
        PC_VEHIC_OP_MAINT_ROW_CURR_ID       	   : 'VEHIC_OP_MAINT_ROW',
        PC_COMM_MEDIA_HEADER_ROW_CURR_ID           : 'COMM_MEDIA_HEADER_ROW',
        PC_DEV_COMM_STRAT_ROW_CURR_ID              : 'DEV_COMM_STRAT_ROW',
        PC_MASS_MEDIA_COMM_ROW_CURR_ID             : 'MASS_MEDIA_COMM_ROW',
        PC_PRINTED_MATS_ROW_CURR_ID                : 'PRINTED_MATS_ROW',
        PC_SOCIAL_OUTR_ACTIV_ROW_CURR_ID           : 'SOCIAL_OUTR_ACTIV_ROW',
        PC_ADVOC_HEADER_ROW_CURR_ID                : 'ADVOC_HEADER_ROW',
        PC_PLAN_ADVOC_STRAT_ROW_CURR_ID            : 'PLAN_ADVOC_STRAT_ROW',
        PC_ADVOC_ACTS_ROW_CURR_ID                  : 'ADVOC_ACTS_ROW',
        PC_ADVOC_MATS_ROW_CURR_ID                  : 'ADVOC_MATS_ROW',
        PC_GEN_PROG_MGMT_HEADER_ROW_CURR_ID        : 'GEN_PROG_MGMT_HEADER_ROW',
        PC_DESIGN_REV_COUNTRY_STRAT_ROW_CURR_ID    : 'DESIGN_REV_COUNTRY_STRAT_ROW',
        PC_DEV_REVIEW_ANNUAL_WORKPLAN_ROW_CURR_ID  : 'DEV_REVIEW_ANNUAL_WORKPLAN_ROW',
        PC_DEV_REVIEW_HR_PLAN_ROW_CURR_ID	   : 'DEV_REVIEW_HR_PLAN_ROW',
        PC_PROG_COORD_MEET_ROW_CURR_ID             : 'PROG_COORD_MEET_ROW',
        PC_COMMOD_REG_POL_ROW_CURR_ID              : 'COMMOD_REG_POL_ROW',
        PC_SIT_ANALYSIS_ROW_CURR_ID                : 'SIT_ANALYSIS_ROW',
        PC_OFFICE_EQUIP_SUPP_ROW_CURR_ID           : 'OFFICE_EQUIP_SUPP_ROW',
        PC_UTIL_ROW_CURR_ID                        : 'UTIL_ROW',
        #new rows for HIV costing
        PC_POLICY_BASED_INTERV_ROW_CURR_ID             : 'POLICY_BASED_INTERV_ROW',
        PC_SOC_ECON_SUPP_CHILD_ROW_CURR_ID             : 'SOC_ECON_SUPP_CHILD_ROW',
        PC_PREV_VIOL_WOMEN_ROW_CURR_ID                 : 'PREV_VIOL_WOMEN_ROW',
        PC_DECRIM_KEY_POP_BEHAV_ROW_CURR_ID            : 'DECRIM_KEY_POP_BEHAV_ROW',
        PC_PREV_STIGMA_DISCRIM_ROW_CURR_ID             : 'PREV_STIGMA_DISCRIM_ROW',
        PC_COMM_CIVIL_SOC_LEAD_ROW_CURR_ID             : 'COMM_CIVIL_SOC_LEAD_ROW',
        PC_LEGAL_POLICY_REFORMS_ROW_CURR_ID            : 'LEGAL_POLICY_REFORMS_ROW',
        PC_HIV_OTHER_HEADER_ROW_CURR_ID                : 'HIV_OTHER_HEADER_ROW',
        PC_HIV_DBL_CLICK_ADD_OTHER_ITEMS_ROW_CURR_ID   : 'HIV_DBL_CLICK_ADD_OTHER_ITEMS_ROW'
}

pc_cost_cat_records_dim = 'cost_cat_records_dim'
pc_cost_cat_records_ids = {
        1: 'Human Resources: Programme administration',
        12: 'Human Resources: Partners',
        3: 'Training costs',
        4: 'Meeting costs',
        5: 'External professional services',
        6: 'Communications and promotional materials',
        7: 'Supervision',
        8: 'Transport and vehicles',
        9: 'Indirect and overhead costs',
        10: 'Payment for results',
        11: 'Computer hardware and networking',
        13: 'Other'
}


pc_cost_inputs_records_dim = 'cost_input_records_dim'
pc_cost_inputs_records_ids = {
        1: 'Director',
        2: 'Manager',
        3: 'Officers',
        4: 'Support staff',
        111: 'Technical officer',
        112: 'Programmer',
        113: 'IT computing officer',
        114: 'Statistician',
        131: 'Administrative officer',
        132: 'Clerical officer',
        133: 'Secretary',
        134: 'Accountant',
        135: 'IT computing manager',
        136: 'Cleaner',
        137: 'Public health specialist',
        138: 'Public health officer',
        139: 'Health educator/trainer',
        140: 'Public relations manager',
        141: 'Public relations officer',
        142: 'Transport manager',
        143: 'Transport driver',
        46: 'Training: Participant per diem',
        47: 'Training: Cost of transportation: local',
        48: 'Training: Cost of transportation: regional',
        49: 'Training: Cost of transportation: national',
        50: 'Training: Per diem: national facilitator ',
        51: 'Training: Travel cost: national facilitator',
        52: 'Training: Per diem:  international facilitator ',
        53: 'Training: Travel cost: international facilitator',
        54: 'Training: Hotel stay',
        55: 'Training: Refreshments and lunch   ',
        56: 'Training: Room rental: small',
        57: 'Training: Room rental: medium',
        58: 'Training: Room rental: large',
        59: 'Training: Cost of stationary ',
        60: 'Training: Cost of training material ',
        61: 'Meeting: Participant per diem',
        62: 'Meeting: Cost of transportation: local',
        63: 'Meeting: Cost of transportation: regional',
        64: 'Meeting: Cost of transportation: national',
        65: 'Meeting: Per diem: national facilitator ',
        66: 'Meeting: Travel cost: national facilitator',
        67: 'Meeting: Per diem:  international facilitator ',
        68: 'Meeting: Travel cost: international facilitator',
        69: 'Meeting: Hotel stay',
        70: 'Meeting: Refreshments and lunch   ',
        71: 'Meeting: Room rental: small',
        72: 'Meeting: Room rental: medium',
        73: 'Meeting: Room rental: large',
        74: 'Meeting: Cost of stationary ',
        75: 'Meeting: Cost of meeting material ',
        76: 'Consultants: Domestic transport',
        77: 'Consultants: International transport',
        78: 'Consultant: per diem',
        117: 'Senior consultant: daily rate',
        118: 'Mid-level consultant: daily rate',
        119: 'Junior consultant: daily rate',
        79: 'Fiduciary agent: fees',
        80: 'Fiduciary agent: transport',
        81: 'External audit: fees',
        82: 'External audit: transport',
        83: 'Printing: general',
        84: 'Printing: brochure',
        128: 'Printing: form',
        129: 'Printing: registry',
        130: 'Printing: handbook',
        85: 'Radio spot development',
        86: 'Radio spot airing',
        87: 'TV ad development',
        88: 'TV ad airing',
        89: 'Mobile phone',
        90: 'Air time',
        91: 'Promotional materials: T-shirt',
        92: 'Promotional materials: Pin',
        93: 'Promotional materials: mug',
        155: 'Newspapers (100 word insert)',
        156: 'Wall posters',
        157: 'Flyers / leaflets / guidelines',
        158: 'Opinion poll',
        94: 'Cost per supervisory trip: national staff to regional level',
        95: 'Cost per supervisory trip: national staff to local level',
        115: 'Cost per supervisory trip: regional staff to district level',
        116: 'Cost per supervisory trip: district staff to facility level',
        96: 'Truck',
        97: 'Motorcycle',
        98: 'Bicycle',
        100: 'Sample transport',
        159: 'Car',
        101: 'Office rent',
        102: 'Office electricity',
        103: 'Office: Other utilities',
        104: 'Office: Telephone',
        105: 'Office Internet',
        106: 'Fuel',
        107: 'Office Security',
        108: 'Office Cleaning',
        109: 'Payment for result X',
        110: 'Activity based contract',
        99: 'Laptop computer',
        120: 'Desktop computer',
        121: 'Monitor',
        122: 'Server site (including servers, racks, and secure temperature-controlled facilities)',
        123: 'Site-level local area networks (LANs)',
        124: 'Level 1 peripherals: printers, scanners, Wi-Fi routers, etc.',
        125: 'Level 2 peripherals: copy machines, plotters, LCD projectors, large-screen LCD monitors',
        126: 'Internet connectivity',
        127: 'Cloud hosting',
        161: 'Printer',
        162: 'Photocopier ',
        163: 'IT monitoring device (production)',
        164: 'IT monitoring device (distribution)',
        144: 'Superintendent',
        145: 'Police officer',
        146: 'Lawyer',
        147: 'Legal officer',
        148: 'President / Prime Minister',
        149: 'Minister',
        150: 'Members of Parliament',
        151: 'Committee chair',
        152: 'Cabinet',
        153: 'Excise analyst',
        154: 'Tax enforcement officer',
        160: 'Air monitoring device',
}
pc_multi_key_dim = 'pc_multi_key'
pc_multi_key_ids = {
    1:'areaID',
    2:'costSectionID',
    3:'costSubsecionID',
}
pc_costing_sect_dim = 'pc_costing_sect_dim'
pc_costing_sect_ids = {
# 'TB_1': 'Personnel (administration)',
# 'TB_2': 'Training',
# 'TB_3': 'Supervision',
# 'TB_4': 'Monitoring and evaluation',
# 'TB_5': 'Quality control/Quality assurance',
# 'TB_6': 'Programme-specific transport cost',
# 'TB_7': 'Communication, media and outreach',
# 'TB_8': 'Advocacy',
# 'TB_9': 'General programme management and administration',
# 'TB_10': 'Research and innovation',
# 'TB_11': 'Community and civil society engagement, social participation ',
# 'TB_12': 'Multisectoral engagement',
# 'CS_1': 'Programme-specific human resources',
# 'CS_5': 'Infrastructure',
# 'CS_6': 'Transport',
# 'CS_7': 'Communication, media, and outreach',
# 'CS_9': 'General programme management',
# 'CS_10': 'Community health worker training',
# 'CS_11': 'Other',
# 'HS_1': 'Survey populations and health risks',
# 'HS_2': 'Count births, deaths and causes of death',
# 'HS_3': 'Optimize health service data to ensure equitable, quality services for all ',
# 'HS_4': 'Review progress and performance to make informed decisions',
# 'HS_5': 'Enable data use for policy and action',
# 4: 'General programme management and administration',
# 1: 'Tobacco control',
# 1: 'Reduction of harmful gender social norms',
# 2: 'Promoting gender equality by investing in gender-transformative approaches',
# 3: 'Enabling legal environments',
# 4: 'Reduction of stigma and discrimination',
# 5: 'Socioeconomic support for orphans and vulnerable children'
}
pc_admin_levels_dim = 'pc_admin_levels_dim'
pc_admin_levels_ids = {
        PC_PPLI_NATIONAL_ADMIN_LEVEL_CURR_ID : 'National',
        PC_PPLI_PROVINCE_ADMIN_LEVEL_CURR_ID : 'Province',
        PC_PPLI_DISTRICT_ADMIN_LEVEL_CURR_ID : 'District'
}

pc_num_phases_dim = 'pc_num_phases_dim'
pc_num_phases_ids = {
        PC_NO_ACTION_PHASE_0_PPLI_CURR_ID    : 'No action phase',
        PC_PLANNING_PHASE_0_PPLI_CURR_ID     : 'Planning phase',
        PC_EARLY_IMP_PHASE_25_PPLI_CURR_ID   : 'Early impact phase',
        PC_PARTIAL_IMP_PHASE_50_PPLI_CURR_ID : 'Partial impact phase',
        PC_FULL_IMP_PHASE_100_PPLI_CURR_ID   : 'Full impact phase',
}

pc_num_intensity_dim = 'pc_num_intensity_dim'
pc_num_intensity_ids = {
    PC_PHASE_ROW_PPLI_CURR_ID     : 'Phase row',
    PC_INTENSITY_ROW_PPLI_CURR_ID : 'Intensity row',
}

pc_result_shape = lambda d, **kwargs : gb_shape(d, type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                        'areaTypeID' : gb_int_shape('Area type ID'),
                                                        'areaID' :  gb_str_shape('Area ID'),
                                                        'costingSectionID' :  gb_str_shape('Costing section ID'),
                                                        'value' : gb_shape('Value', '1D float',
                                                                 dim= [gb_year_dim], 
                                                                 indices=[gb_year_indices])
                                                        },
                                                        has_default=False,
                                                        **kwargs
                                                )



PC_modvar_shapes = {
        pcmvt.PC_VERSION_TAG               : gb_int_shape('PC version, may be deprecated'),
        pcmvt.PC_DATA_CHANGED_TAG          : gb_bool_shape('Data changed, may be deprecated'), 
        pcmvt.PC_PROJ_VALID_TAG            : gb_bool_shape('Projection valid, may be deprecated'), 
        pcmvt.PC_FILE_NAME_TAG             : gb_str_shape('File name, may be deprecated'),                          
        pcmvt.PC_PROJ_VALID_DATE_TAG       : gb_str_shape('Projection valid date, may be deprecated'),    

        pcmvt.PC_AREA_DATA_TAG             : gb_shape('Program area records', type='1D dict', 
                                                 dim=[pc_program_area_types_dim],
                                                 indices=[pc_program_area_types_ids],
                                                 innerShape={
                                                     'areaTypeMstID'  : gb_int_shape('Master ID of program area type'),
                                                     'areaID'  : gb_shape('Program area ID', type='str'),
                                                     'mainRowCosts'  : gb_shape('Main costs', '2D float',
                                                                    dim=[pc_main_rows_dim, gb_year_dim], 
                                                                    indices=[pc_main_rows_ids,  gb_year_indices]),
                                                 },
                                                 has_default=False
                                             ), 
        
        pcmvt.PC_COST_CAT_RECORDS_TAG      : gb_shape('Cost category records', type='1D dict', 
                                                 dim=[pc_cost_cat_records_dim],
                                                 indices=[pc_cost_cat_records_ids],
                                                 innerShape={
                                                     'costCatID'  : gb_int_shape('ID of cost category'),
                                                     'name'  : gb_str_shape('name of cost category'),
                                                     'custom'  : gb_bool_shape('Custom category flag')
                                                 },
                                                 has_default=False
                                             ), 
        pcmvt.PC_COSTING_SECT_RECORDS_TAG  : gb_shape('Cost sector records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                     'areaTypeID' : gb_int_shape('area type ID'),
                                                     'areaID' :  gb_str_shape('area ID'),
                                                     'costingSectionID' :  gb_str_shape('costing section ID'),
                                                     'stringConstant':  gb_str_shape('strig constant'),
                                                     'name'  : gb_str_shape('name of cost sector category'),
                                                     'custom'  : gb_bool_shape('Custom category flag'),
                                                     'subsectionRecords'  : gb_shape('Subsection records', type='1D dict',
                                                                                     dim=[pc_costing_sect_dim],
                                                                                     indices=[pc_costing_sect_ids],
                                                                                innerShape={
                                                                                            'costingSubsectionID' : gb_str_shape('costing subsection ID'),
                                                                                            'name'  : gb_str_shape('name of costing subsection'),
                                                                                            'stringConstant':  gb_str_shape('strig constant'),
                                                                                            'custom'  : gb_bool_shape('Custom subsection flag'),
                                                                                            # 'costs': gb_shape('Costs', '1D float',
                                                                                            #                     dim= [gb_year_dim], 
                                                                                            #                     indices=[gb_year_indices])
                                                                                        }

                                                                                     )
                                                 },
                                                 has_default=False
                                             ),  
                                             
                                             
        pcmvt.PC_COST_INPUT_RECORDS_TAG    : gb_shape('Cost input records', type='1D dict', 
                                                 dim=[pc_cost_inputs_records_dim],
                                                 indices=[pc_cost_inputs_records_ids],
                                                 innerShape={
                                                     'costInputID'  : gb_int_shape('ID of cost input'),
                                                     'name'  : gb_str_shape('name of cost category'),
                                                     'stringConstant'  : gb_str_shape('string constant for cost input'),
                                                     'costCatID'  : gb_int_shape('ID of cost category'),
                                                     'custom'  : gb_bool_shape('Custom category flag'),
                                                     'note'  : gb_str_shape('Notes'),
                                                     'source'  : gb_str_shape('Source of data'),
                                                     'unitOfMeasure'  : gb_str_shape('Name of unit of measure'),
                                                     'unitOfMeasureStringConstant'  : gb_str_shape('string constant for unit of measure'),
                                                     'unitCost'  : gb_float_shape('Cost per unit')
                                                     
                                                 },
                                                 has_default=False
                                             ), 
        pcmvt.PC_ACT_RECORDS_TAG           : gb_shape('Act records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                           'areaTypeID' : gb_int_shape('area type ID'),
                                                           'areaID' :  gb_str_shape('area ID'),
                                                           'costingSectionID' :  gb_str_shape('costing section ID'),
                                                           'activityID' :  gb_str_shape('activity ID'),
                                                           'name'  : gb_str_shape('name of activity'),
                                                           'custom'  : gb_bool_shape('Custom activity flag')
                                                    },
                                                        has_default=False
                                                ),
        pcmvt.PC_ACT_LINE_ITEM_RECORDS_TAG : gb_shape('Act Line item records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                           'areaTypeID' : gb_int_shape('Area type ID'),
                                                           'areaID' :  gb_str_shape('Area ID'),
                                                           'costingSectionID' :  gb_str_shape('Costing section ID'),
                                                           'costingSubsectionID' :  gb_str_shape('Costing subsection ID'),
                                                           'activityID' :  gb_str_shape('Acitivity ID'),
                                                           'costInputID' :  gb_str_shape('Cost input ID'),
                                                           'frequency': gb_shape('frequency', '1D float',
                                                                                                dim= [gb_year_dim],     
                                                                                                indices=[gb_year_indices]
                                                                                                                                                                                               
                                                                                                ),
                                                        'numUnits': gb_shape('Number of units', '1D float',
                                                                             dim= [pc_admin_levels_dim], 
                                                                             indices=[pc_admin_levels_ids]),
                                                        'duration': gb_shape('Duration', '1D float',
                                                                             dim= [pc_admin_levels_dim], 
                                                                             indices=[pc_admin_levels_ids]),
                                                                                                
                                                    },
                                                 has_default=False
                                                ),

        pcmvt.PC_COSTING_SECT_RECORDS_PPLI_TAG  : gb_shape('Cost sector PPLI records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                     'areaTypeID' : gb_int_shape('area type ID'),
                                                     'areaID' :  gb_str_shape('area ID'),
                                                     'costingSectionID' :  gb_str_shape('costing section ID'),
                                                     'stringConstant':  gb_str_shape('strig constant'),
                                                     'name'  : gb_str_shape('name of cost sector category'),
                                                     'custom'  : gb_bool_shape('Custom category flag'),
                                                     'subsectionRecords'  : gb_shape('Subsection records', type='1D dict',
                                                                                     dim=[pc_costing_sect_dim],
                                                                                     indices=[pc_costing_sect_ids],
                                                                                innerShape={
                                                                                            'costingSubsectionID' : gb_str_shape('costing subsection ID'),
                                                                                            'name'  : gb_str_shape('name of costing subsection'),
                                                                                            'stringConstant':  gb_str_shape('strig constant'),
                                                                                            'custom'  : gb_bool_shape('Custom subsection flag'),
                                                                                            'raiseTaxesPrice'       : gb_year_shape('raiseTaxesPrice'      ),
                                                                                            'raiseTaxesExciseShare' : gb_year_shape('raiseTaxesExciseShare'),
                                                                                            'raiseTaxesTaxShare'    : gb_year_shape('raiseTaxesTaxShare'   ),
                                                                                            'phaseIntensityValues'  : gb_shape('Phase intensity values', '2D float',
                                                                                            dim=[pc_num_intensity_dim, gb_year_dim],
                                                                                            indices=[pc_num_intensity_ids, gb_year_indices]),

                                                                                            # 'costs': gb_shape('Costs', '1D float',
                                                                                            #                     dim= [gb_year_dim], 
                                                                                            #                     indices=[gb_year_indices])
                                                                                        }
                                                                                     )
                                                 },
                                                 has_default=False
                                             ),  
        pcmvt.PC_ACT_RECORDS_PPLI_TAG           : gb_shape('Act PPLI records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                           'areaTypeID' : gb_int_shape('area type ID'),
                                                           'areaID' :  gb_str_shape('area ID'),
                                                           'costingSectionID' :  gb_str_shape('costing section ID'),
                                                           'activityID' :  gb_str_shape('activity ID'),
                                                           'name'  : gb_str_shape('name of activity'),
                                                           'custom'  : gb_bool_shape('Custom activity flag')
                                                    },
                                                    has_default=False
                                                ),
        pcmvt.PC_ACT_LINE_ITEM_RECORDS_PPLI_TAG : gb_shape('Act Line item PPLI records', type='1D dict', 
                                                 dim=[pc_multi_key_dim],
                                                 indices=[pc_multi_key_ids],
                                                 innerShape={
                                                           'areaTypeID' : gb_int_shape('Area type ID'),
                                                           'areaID' :  gb_str_shape('Area ID'),
                                                           'costingSectionID' :  gb_str_shape('Costing section ID'),
                                                           'costingSubsectionID' :  gb_str_shape('Costing subsection ID'),
                                                           'activityID' :  gb_str_shape('Acitivity ID'),
                                                           'costInputID' :  gb_str_shape('Cost input ID'),
                                                           'quantityPerAdminRegYear': gb_shape('Quantity per admin reg year', '3D float',
                                                                                                dim= [pc_num_phases_dim, pc_admin_levels_dim, gb_year_dim],     
                                                                                                indices=[pc_num_phases_ids, pc_admin_levels_ids, gb_year_indices]
                                                                                                                                                                                               
                                                                                                ),
                                                        'numUnits': gb_shape('Number of units', '1D float',
                                                                             dim= [pc_admin_levels_dim], 
                                                                             indices=[pc_admin_levels_ids]),
                                                        'duration': gb_shape('Duration', '1D float',
                                                                             dim= [pc_admin_levels_dim], 
                                                                             indices=[pc_admin_levels_ids]),
                                                                                                
                                                    },
                                                 has_default=False
                                                ),

        pcmvt.PC_RES_COSTS_BY_SECT_TAG    : pc_result_shape('PC results costs by section'),
        pcmvt.PC_RES_COSTS_BY_ACT_TAG     : pc_result_shape('PC results costs by activity'),
        pcmvt.PC_RES_COSTS_BY_CAT_TAG     : pc_result_shape('PC results costs by category'),

        pcmvt.PC_RES_COSTS_BY_SECT_PPLI_TAG    : pc_result_shape('PC results costs by section PPLI'),
        pcmvt.PC_RES_COSTS_BY_SUBSECT_PPLI_TAG : pc_result_shape('PC results costs by subsection PPLI'),
        pcmvt.PC_RES_COSTS_BY_ACT_PPLI_TAG     : pc_result_shape('PC results costs by activity PPLI'),
        pcmvt.PC_RES_COSTS_BY_CAT_PPLI_TAG     : pc_result_shape('PC results costs by category PPLI'),

        pcmvt.PC_STD_ROW_INFO_META_TAG : gb_shape('Standard row info meta', type='1D dict',
                                                 dim=[pc_main_rows_dim],
                                                 indices=[pc_main_rows_ids],
                                                 innerShape={
                                                     'mstID' : gb_str_shape('Row ID'),
                                                     'name' : gb_str_shape('Row name'),
                                                     'stringConstant' : gb_str_shape('String constant for row'),
                                                     'isAggregate': gb_bool_shape('Aggregate row')
                                                 },
                                                 has_default=False
                                             ),
        pcmvt.PC_HIV_ROW_INFO_META_TAG : gb_shape('Standard row info meta', type='1D dict',
                                                 dim=[pc_main_hiv_rows_dim],
                                                 indices=[pc_main_hiv_rows_ids],
                                                 innerShape={
                                                     'mstID' : gb_str_shape('Row ID'),
                                                     'name' : gb_str_shape('Row name'),
                                                     'stringConstant' : gb_str_shape('String constant for row'),
                                                     'isAggregate': gb_bool_shape('Aggregate row'),
                                                     'isCost': gb_bool_shape('Cost row'),
                                                     'singleLine': gb_bool_shape('Single line row'),
                                                     'hasData': gb_bool_shape('Has data row')
                                                 },
                                                 has_default=False
                                             ),
        pcmvt.PC_ENTER_COSTING_SECT_COSTS_ALL_YEARS_CS_TAG:  gb_bool_shape('Enter costing section costs for all years in costing section mode'),
    
    
}