/* 
 * Log-linearized model
 * DSGE with 3 sectors:
 * [1] Tradable goods and services
 * [2] Not-tradable goods and services
 * [3] Public services (state, education, health)
 *  3 types of jobs:
 * [A] High-skilled
 * [B] Low-skilled in tradable sector and public sector
 * [C] Low-skilled in non-tradable sector
 * Paul Cahu
 * Version 1.0: March 2017
 */

/******************************* LIST OF ENDOGENOUS VARIABLES ************/
var lA,lB,lC,pA,pB,pC,wA,wB,wC,
q2,q3,q,
l1,l2,l3,
y1,y2,
inv1,inv2,inv3,di11,di12,di13,di21,di22,di23,mi1,mi2,mi3,
dz11,dz12,dz13,dz21,dz22,dz23,mz1,mz2,mz3,
y_c,tr,
tax,tax_P,tax_K,tax_L,tax_C,
mc_c,mc_o,dc1_o,dc2_o,dc1_c,dc2_c,qx_o,qc_o,qx_c,qc_c,
nA,nB,
GDP,
H_C,H_A,H_B,HC_A,HC_B,HC_C,
mc1,mc2,GammaP,
l1A,l1B,l2A,l3A,l3B,
e_rate,
FB,iratef,irate,GammaPf,GammaP2,
c_o,lambda,mu,k,k1,k2,k3,inv,def,det,g3,
wA_bar,wB_bar,wC_bar,
A1,Gamma,
cs,
gi_obs,ginv_obs,gc_obs,gg3_obs,gq2_obs,gy1_obs,gy2_obs,gGammaP_obs,gw_obs,gl_obs,
qi,R,qz1,qz2,qz3;

//EXOGENOUS VARIABLES
varexo e_a1,e_a2,e_e,e_x,e_nA,e_nB,e_c,e_if,e_g,e_h,e_wu,e_G;

/******************************* DEFINITION OF PARAMETERS ****************/

parameters varsigmaA,varsigmaB,varsigmaC,pA_star,pB_star,pC_star,nA_star,nB_star,lA_star,lB_star,lC_star,varpiU_A,varpiU_B,varpiU_C,tau_o_star,tau_c_star,wU_A_star,wU_B_star,wU_C_star,beta,chiC_star,chiB_star,wA_star,wB_star,wC_star,
varsigmaA_star,varsigmaB_star,varsigmaC_star,chiA_star,betaC_star,betaB_star,betaA_star,q2_star,q3_star,qz1_star,qz2_star,qz3_star,
varpiP_A,varpiP_B,varpiP_C,varpi_A,varpi_B,varpi_C,zeta_1,zeta_2,zeta_3,varpiF_B,varpiF_C,
theta1_star,theta2_star,psi_1,psi_2,psi_3,gamma1,gamma2,gamma3,
iota_1,iota_2,sq_3,sg_1,sg_2,sg_3,sf_1,sf_2,sf_3,eta_i,eta_ix,
tau_k_star,tau_P_star,tau_m_star,tau_C_star,
sigma,sA1,sA2,sB13,wage1,wage2,wage3,
eta_z1,eta_z2,eta_x1,eta_x2,eta_z3,eta_x3,
nu0,nu0_star,nu1A_star,nu1B_star,nu2A_star,nu2B_star,nu3A_star,nu3B_star,yc_star,tr_star,
tax_star,a_txk,a_C1,a_C2,aL1,aL2,aL3,aL4,aL5,inv3_star,def_star,interest_star,
y1_star,y2_star,y3_star,
tax_L_star,tax_P_star,tax_C_star,tax_K_star,
dc1_o_star,dc2_o_star,dc1_c_star,dc2_c_star,mc_o_star,mc_c_star,eta_m,eta_c,
x_star,mi1_star,mi2_star,mi3_star,mz1_star,mz2_star,mz3_star,eta_x,
di11_star,di12_star,di13_star,di21_star,di22_star,di23_star,
dz11_star,dz12_star,dz13_star,dz21_star,dz22_star,dz23_star,dz33_star,g3_star,
ax1,tax_L2_star,tax2_star,
UA_star,UB_star,U_star,c_star,
HC_B_star,HC_C_star,HC_A_star,ldA_1,ldA_2,ldB_1,ldB_2,ldC_1,ldC_2,
aT1,aT2,aT3,Gamma_star,delta,GammaP_star,
rho_tr,eta_tr,rho_g,eta_g,rho_e,
xi,phi_K,qi_star,irate_star,phi_C,
iratef_star,eta_FB,k1_star,k2_star,k3_star,d_star,thetam,thetax,
rho_P,alpha_P,rho_P2,alpha_P2,rho_W,alpha_W,rho_theta,rho_i,varalpha_P,varalpha_Y,
rho_a1,rho_G,rho_c,
//parameters that may be shocked
betaA,betaB,betaC,chiA,chiB,chiC;

/**************************** Long-term settings *************************/
beta=0.995;
Gamma_star=1.02;
GammaP_star=1.06;
delta=0.02;
xi=0.02;
irate_star=Gamma_star*GammaP_star/beta-1;
iratef_star=irate_star;
d_star=0.4;
rho_i=0.8;
varalpha_P=1.5;
varalpha_Y=0.1;

/**************************** Prices parameter ***************************/
//Share of equipment in investment
iota_2=0.478;
//Share of domestic investment
iota_1=0.449;

//Share of inputs in production
psi_1=0.64;
psi_2=0.47;
psi_3=0.313;

//share of public services in inputs
sq_3=0.05;

//Shares of goods in inputs
sg_1=0.858;
sg_2=0.816;
sg_3=0.885;

//Share of imported goods in inputs
sf_1=0.274;
sf_2=0.273;
sf_3=0.273;

//capital shares
gamma1=0.252;
gamma2=0.46;
gamma3=0.218;

//elasticity of skilled and unskilled workers
sigma=0.5;
//share of skilled workers in sector 1
sA1=0.352;
//share of skilled workers in sector 2
sA2=0.386;
//share of unskilled workers in sector 1 (over 3)
sB13=0.815;

//Wage shares to skilled workers by sector
wage1=0.741;
wage2=0.815;
wage3=0.903;

//investment elasticities
eta_i=0.6;
eta_ix=0.9;

//input elasticities
eta_z1=0.6;
eta_x1=0.9;
eta_z2=0.6;
eta_x2=0.9;
eta_z3=0.6;
eta_x3=0.9;

//export elasticity
eta_x=1.4;

//import elasticity
eta_m=0.9;
eta_c=0.7;

/**************************** Labour supply parameters *******************/
varsigmaA_star=0.19;
varsigmaB_star=0.24;
varsigmaC_star=0.24;

wU_A_star=12135;
wU_B_star=3501;
wU_C_star=526;

chiA_star=0.645;
chiB_star=0.744;
chiC_star=0.166;

betaA_star=49905;
betaB_star=28014;
betaC_star=9687;

/**************************** Consumption parameters *********************/
nu0_star=0.917;
nu1A_star=0.274;
nu2A_star=0.267;
nu3A_star=0.213;
nu1B_star=0.688;
nu2B_star=0.770;
nu3B_star=0.674;

/**************************** Fiscal parameters **************************/

tau_o_star=0.191;
tau_c_star=0.035;
tau_k_star=0.25;
tau_P_star=0.25;
tau_C_star=0.147;
tau_m_star=0.036;
tau_i_star=0.011;
tau_z_star=0.024;

/**************************** Competition parameters *********************/
theta1_star=8.7;
theta2_star=7.1;
thetam=10;
thetax=7;

/**************************** Short-term adjustment parameters ***********/
phi_K=5;       //Capital adjustment costs
phi_C=0.9;      //Consumption habits
eta_FB=0.001;   //Foreign debt elasticity
rho_tr=0.8;
eta_tr=0.9;
rho_g=0.7;
eta_g=0.000;
rho_P=0.1;    //Price adjustment costs in sector 1
alpha_P=0.5;
rho_P2=0.1;   //Price adjustment costs in sector 2
alpha_P2=0.5;
rho_W=0.1;    //Wage adjustemnt
alpha_W=0.5;
rho_theta=0.5;
rho_e=0.99;
rho_a1=0.9;
rho_G=0.9;
rho_c=0.9;

/**************************** Steady state values ************************/
q2_star=1;
q3_star=1;
qz1_star=1;
qz2_star=1;
qz3_star=1;
q_star=1;
qi_star=1;

lA_star=8167905;
lB_star=3955962;
lC_star=3804485;
nA_star=10349496;
nB_star=10930710;

wA_star=45965;
wB_star=17382;
wC_star=5895;

y1_star=4758;
y2_star=2338;
y3_star=1058;

mc_c_star=67.7;
mc_o_star=158.4;
C_star=2134;
c_star=2134;

dc1_o_star=789;
dc2_o_star=557;
dc1_c_star=356;
dc2_c_star=308;

di11_star=71;
di12_star=99;
di13_star=34;
di21_star=130;
di22_star=181;
di23_star=63;

dz11_star=1720;
dz12_star=487;
dz13_star=119;
dz21_star=676;
dz22_star=429;
dz23_star=115;
dz33_star=53;

mi1_star=71;
mi2_star=99;
mi3_star=34;
mz1_star=649;
mz2_star=183;
mz3_star=44;
mc_c_star=70;
x_star=1275;

k1_star=gamma1*y1_star*(1-psi_1);//2572;
k2_star=gamma2*y2_star*(1-psi_2);//3657;
k3_star=gamma3*y3_star*(1-psi_3);//1412;

g3_star=820;
tax_star=1131;
tr_star=165;
tax_L_star=235;
inv3_star=130;
def_star=116;
interest_star=132;

//DISPLAY parameters
UA_star=21.1;
UB_star=29;
U_star=100-100*(lA_star+lB_star)/(lA_star/(1-UA_star/100)+lB_star/(1-UB_star/100));

/**************************** Shocked parameters *************************/

varsigmaA=varsigmaA_star;
varsigmaB=varsigmaB_star;
varsigmaC=varsigmaC_star;

chiA=chiA_star;
chiB=chiB_star;
chiC=chiC_star;

betaA=betaA_star;
betaB=betaB_star;
betaC=betaC_star;

nu0=nu0_star;

/**************************** Computed parameters ************************/

pA_star=varsigmaA*lA_star/((varsigmaA-1)*lA_star+nA_star);
pB_star=varsigmaB*lB_star/((varsigmaB-1)*lB_star+(varsigmaC-1)*lC_star+nB_star);
pC_star=varsigmaC*lC_star/((varsigmaB-1)*lB_star+(varsigmaC-1)*lC_star+nB_star);

varpiU_A=wU_A_star/(1-tau_o_star)/wA_star;
varpiU_B=wU_B_star/(1-tau_c_star)/wB_star;
varpiU_C=wU_C_star/(1-tau_c_star)/wC_star;

HC_A_star=betaA_star*pA_star^(1/2)*q2_star;
HC_B_star=betaB_star*pB_star^(1/2)*q2_star;
HC_C_star=betaC_star*pC_star^(1/2)*q2_star;

varpi_A=1/(1-beta*(1-varsigmaA_star)*(1-pA_star));
varpi_B=chiB_star/(1-chiB_star)*HC_B_star/(chiB_star/(1-chiB_star)*HC_B_star-beta*chiB_star/(1-chiB_star)*(1-varsigmaB_star)*(1-pB_star)*HC_B_star-beta*chiC_star/(1-chiC_star)*(1-varsigmaC_star)*pC_star*HC_C_star);
varpiF_B=beta*chiB_star/(1-chiB_star)*(1-varsigmaB_star)*(1-pB_star)*HC_B_star/(chiB_star/(1-chiB_star)*HC_B_star-beta*chiB_star/(1-chiB_star)*(1-varsigmaB_star)*(1-pB_star)*HC_B_star-beta*chiC_star/(1-chiC_star)*(1-varsigmaC_star)*pC_star*HC_C_star);
varpi_C=chiC_star/(1-chiC_star)*HC_C_star/(1-beta*chiC_star/(1-chiC_star)*(1-varsigmaC_star)*(1-pC_star)*HC_C_star-beta*chiB_star/(1-chiB_star)*(1-varsigmaB_star)*pB_star*HC_B_star);
varpiF_C=beta*chiC_star/(1-chiC_star)*(1-varsigmaC_star)*(1-pC_star)*HC_C_star/(chiC_star/(1-chiC_star)*HC_C_star-beta*chiC_star/(1-chiC_star)*(1-varsigmaC_star)*(1-pC_star)*HC_C_star-beta*chiB_star/(1-chiB_star)*(1-varsigmaB_star)*pB_star*HC_B_star);

varpiP_A=beta/(1-beta*(1-varsigmaA_star)*(1-pA_star));
varpiP_B=beta/(1-beta*(1-varsigmaB_star)*(1-pB_star));
varpiP_C=beta/(1-beta*(1-varsigmaC_star)*(1-pC_star));

zeta_1=(theta1_star-1)/((theta1_star-1)-psi_1*qz1_star);
zeta_2=(theta2_star-1)/((theta2_star-1)*q2_star-psi_2*qz2_star);
zeta_3=q3_star/(q3_star-psi_3*qz1_star);

yc_star=793.2;

tax2_star= tau_P_star*(y1_star/theta1_star+q2_star*y2_star/theta2_star)+tau_k_star*(gamma1*y1_star*((1-1/theta1_star)-psi_1*qz1_star)+gamma2*y2_star*((1-1/theta2_star)-psi_2*qz2_star))+lA_star*wA_star*((nu1A_star+nu2A_star+nu3A_star)*tau_c_star+(1-nu1A_star+nu2A_star+nu3A_star)*tau_o_star)+lB_star*wB_star*((nu1B_star+nu3B_star)*tau_c_star+(1-nu1B_star+nu3B_star)*tau_o_star)+lC_star*wC_star*(tau_c_star*nu2B_star+(1-nu2B_star)*tau_o_star)+tau_m_star*(mc_c_star+mc_o_star)*q_star+tau_C_star*C_star;
tax_P_star=tau_P_star*(y1_star/theta1_star+q2_star*y2_star/theta2_star);

tax_C_star=tau_m_star*(mc_c_star+mc_o_star)*q_star+tau_C_star*C_star;
tax_K_star=tau_k_star*(gamma1*y1_star*((1-1/theta1_star)-psi_1*qz1_star)+gamma2*y2_star*((1-1/theta2_star)-psi_2*qz2_star));

tax_L2_star=lA_star*wA_star*((nu1A_star+nu2A_star+nu3A_star)*tau_c_star+(1-nu1A_star+nu2A_star+nu3A_star)*tau_o_star)+lB_star*wB_star*((nu1B_star+nu3B_star)*tau_c_star+(1-nu1B_star+nu3B_star)*tau_o_star)+lC_star*wC_star*(tau_c_star*nu2B_star+(1-nu2B_star)*tau_o_star);

a_txk=(gamma1*y1_star*((1-1/theta1_star)-psi_1*qz1_star)/(gamma1*y1_star*((1-1/theta1_star)-psi_1*qz1_star)+gamma2*y2_star*((1-1/theta2_star)-psi_2*qz2_star)));
a_C1=(tau_m_star*(mc_c_star+mc_o_star)*q_star/(tau_m_star*(mc_c_star+mc_o_star)*q_star+tau_C_star*C_star));
a_C2=mc_c_star/(mc_c_star+mc_o_star);

aL1=(lA_star*wA_star*((nu1A_star+nu2A_star+nu3A_star)*tau_c_star+(1-nu1A_star+nu2A_star+nu3A_star)*tau_o_star))/tax_L2_star;
aL2=(lB_star*wB_star*((nu1B_star+nu3B_star)*tau_c_star+(1-nu1B_star+nu3B_star)*tau_o_star))/tax_L2_star;
aL3=(nu1A_star+nu2A_star+nu3A_star)*tau_c_star/((nu1A_star+nu2A_star+nu3A_star)*tau_c_star+(1-nu1A_star+nu2A_star+nu3A_star)*tau_o_star);
aL4=(nu1B_star+nu3B_star)*tau_c_star/((nu1B_star+nu3B_star)*tau_c_star+(1-nu1B_star+nu3B_star)*tau_o_star);
aL5=tau_c_star*nu2B_star/(tau_c_star*nu2B_star+(1-nu2B_star)*tau_o_star);

aT1=nu0_star*tr_star/yc_star;
aT2=(nu1A_star+nu2A_star+nu3A_star)*lA_star*wA_star*(1-tau_c_star)/((nu1A_star+nu2A_star+nu3A_star)*lA_star*wA_star*(1-tau_c_star)+(nu1B_star+nu3B_star)*lB_star*wB_star*(1-tau_c_star)+nu2B_star*lC_star*wC_star*(1-tau_c_star));
aT3=(nu1B_star+nu3B_star)*lB_star*wB_star*(1-tau_c_star)/((nu1A_star+nu2A_star+nu3A_star)*lA_star*wA_star*(1-tau_c_star)+(nu1B_star+nu3B_star)*lB_star*wB_star*(1-tau_c_star)+nu2B_star*lC_star*wC_star*(1-tau_c_star));

ax1=tr_star/tax_star;

ldA_1=wA_star/(wA_star+HC_A_star*(1-beta*(1-varsigmaA_star)));
ldB_1=wB_star/(wB_star+HC_B_star*(1-beta*(1-varsigmaB_star)));
ldC_1=wC_star/(wC_star+HC_C_star*(1-beta*(1-varsigmaC_star)));
ldA_2=HC_A_star/(wA_star+HC_A_star*(1-beta*(1-varsigmaA_star)));
ldB_2=HC_B_star/(wB_star+HC_B_star*(1-beta*(1-varsigmaB_star)));
ldC_2=HC_C_star/(wC_star+HC_C_star*(1-beta*(1-varsigmaC_star)));


model(linear);

/****** Block A: Forward looking equations *******************************/

//Equation 1: Foreign bonds
(iratef)/(1+iratef_star)=Gamma(1)+GammaP(1)+lambda-lambda(1)+eta_FB*FB;

//Equation 2: Domestic bonds
(irate)/(1+irate_star)=Gamma(1)+GammaP(1)+lambda-lambda(1);

//Marginal costs: Price setting equation (Calvo pricing with dynamic indexation)
//Inflation in sector 1
GammaP/GammaP_star=rho_P*(GammaP(-1)/GammaP_star)+beta*(GammaP(1)/GammaP_star-rho_P*(GammaP/GammaP_star))+(1-beta*alpha_P)*(1-alpha_P)/alpha_P*(mc1);

//Inflation in sector 2
GammaP2/GammaP_star=rho_P2*(GammaP2(-1)/GammaP_star)+beta*(GammaP2(1)/GammaP_star-rho_P2*(GammaP2/GammaP_star))+(1-beta*alpha_P2)*(1-alpha_P2)/alpha_P2*(mc2-q2);

//Labour demand
//Sector 1, type A
(mc1*(1-1/theta1_star)-psi_1*qz1*qz1_star)/((1-1/theta1_star)-psi_1*qz1_star)+y1-(1-1/sigma)*l1-1/sigma*l1A=ldA_1*wA+ldA_2*HC_A+(1-ldA_1-ldA_2)*(HC_A(1));
//Sector 1, type B
(mc1*(1-1/theta1_star)-psi_1*qz1*qz1_star)/((1-1/theta1_star)-psi_1*qz1_star)+y1-(1-1/sigma)*l1-1/sigma*l1B=ldB_1*wB+ldB_2*HC_B+(1-ldB_1-ldB_2)*(HC_B(1));
//Sector 2, type A
(mc2*(1-1/theta2_star)-psi_2*qz2*qz2_star)/((1-1/theta2_star)*q2_star-psi_2*qz2_star)+y2-(1-1/sigma)*l2-1/sigma*l2A=ldA_1*wA+ldA_2*HC_A+(1-ldA_1-ldA_2)*(HC_A(1));
//Sector 2, type C
(mc2*(1-1/theta2_star)-psi_2*qz2*qz2_star)/((1-1/theta2_star)*q2_star-psi_2*qz2_star)+y2-(1-1/sigma)*l2-1/sigma*lC=ldC_1*wC+ldC_2*HC_C+(1-ldC_1-ldC_2)*(HC_C(1));
//Sector 3, type A
(q3-psi_3*qz3*qz3_star)/(q3_star-psi_3*qz3_star)+g3-(1-1/sigma)*l3-1/sigma*l3A=ldA_1*wA+ldA_2*HC_A+(1-ldA_1-ldA_2)*(HC_A(1));
//Sector 3, type B
(q3-psi_3*qz3*qz3_star)/(q3_star-psi_3*qz3_star)+g3-(1-1/sigma)*l3-1/sigma*l3B=ldB_1*wB+ldB_2*HC_B+(1-ldB_1-ldB_2)*(HC_B(1));

//Capital cost
mu=beta*(1-delta)/Gamma_star*(mu(1)-Gamma)+(1-beta*(1-delta)/Gamma_star)*(lambda-Gamma+R);

//Wage bargaining: wage target
wA_bar=varpiU_A*(e_wu)+(1-varpiU_A)*(varpi_A*(HC_A)+(1-varpi_A)*(-pA(1)*pA_star/(1-pA_star)+HC_A(1)));
wB_bar=varpiU_B*(e_wu)+(1-varpiU_B)*(varpi_B*(HC_B)-varpiF_B*(-pB(1)*pB_star/(1-pB_star)+HC_B(1))+(1-varpi_B+varpiF_B)*(pC(1)+HC_C(1)));
wC_bar=varpiU_C*(e_wu)+(1-varpiU_C)*(varpi_C*(HC_C)-varpiF_C*(-pC(1)*pC_star/(1-pC_star)+HC_C(1))+(1-varpi_C+varpiF_C)*(pB(1)+HC_B(1)));

//Wage setting: Calvo
wA-wA(-1)+GammaP/GammaP_star-rho_W*(GammaP(-1)/GammaP_star)=beta*(wA(1)-wA+GammaP(1)/GammaP_star-rho_W*(GammaP/GammaP_star))+(1-beta*alpha_W)*(1-alpha_W)/alpha_W*(wA_bar-wA);
wB-wB(-1)+GammaP/GammaP_star-rho_W*(GammaP(-1)/GammaP_star)=beta*(wB(1)-wB+GammaP(1)/GammaP_star-rho_W*(GammaP/GammaP_star))+(1-beta*alpha_W)*(1-alpha_W)/alpha_W*(wB_bar-wB);
wC-wC(-1)+GammaP/GammaP_star-rho_W*(GammaP(-1)/GammaP_star)=beta*(wC(1)-wC+GammaP(1)/GammaP_star-rho_W*(GammaP/GammaP_star))+(1-beta*alpha_W)*(1-alpha_W)/alpha_W*(wC_bar-wC);

/************** Block B: Autoregressive processes ************************/
//Public debt dynamics
det=(det(-1)+GDP-GDP(-1)-(GammaP/GammaP_star))/(Gamma_star*GammaP_star)+(1-1/(Gamma_star*GammaP_star))*def;

//Dynamics of hiring
lA=(1-varsigmaA)*lA(-1)+varsigmaA*H_A;
lB=(1-varsigmaB)*lB(-1)+varsigmaB*H_B;
lC=(1-varsigmaC)*lC(-1)+varsigmaC*H_C;

//Hiring probabilities
pA=H_A-pA_star*(1-1/varsigmaA)*lA(-1)-(1-pA_star*(1-1/varsigmaA))*nA(-1);
pB=H_B-pC_star*(1-1/varsigmaC)*lC(-1)-pB_star*(1-1/varsigmaB)*lB(-1)-(1-pB_star*(1-1/varsigmaB)-pC_star*(1-1/varsigmaC))*nB(-1);
pC=H_C-pC_star*(1-1/varsigmaC)*lC(-1)-pB_star*(1-1/varsigmaB)*lB(-1)-(1-pB_star*(1-1/varsigmaB)-pC_star*(1-1/varsigmaC))*nB(-1);

//Participation reacts to employment
nA=0.9*nA(-1)+0.04*lA(-1)+e_nA;
nB=0.9*nB(-1)+0.06*lB(-1)+e_nB;

//Hiring costs
HC_A=1/2*pA+q2+(betaA/betaA_star-1)+e_h;
HC_B=1/2*pB+q2+(betaB/betaB_star-1)+e_h;
HC_C=1/2*pC+q2+(betaC/betaC_star-1)+e_h;

//Shadow price of consumption
lambda=cs-qc_o-(c_o-phi_C*c_o(-1))/(1-phi_C);

//Shadow price of capital
mu=lambda+qi+phi_K*(inv-k(-1));

//Capital accumulation
k=(1-delta)/Gamma_star*k(-1)+(1-(1-delta)/Gamma_star)*inv;

//exchange rate
e_rate=rho_e*e_rate(-1)+e_e;

//SHOCKS DYNAMICS
//Productivity in sector 1
A1=rho_a1*A1(-1)+e_a1;

//Productivity growth
Gamma=rho_G*Gamma(-1)+e_G;

//Consumption shock
cs=rho_c*cs(-1)+e_c;

/************** Block C: Variables definition ****************************/
//Equation 4: Real exchange rate
q=q(-1)+GammaPf-GammaP+e_rate-e_rate(-1);

//Definition of inflation in sector 2
GammaP2=q2-q2(-1)+GammaP;

//Definition of aggregate labour demand by sector
l1=wage1*l1A+(1-wage1)*l1B;
l2=wage2*l2A+(1-wage2)*lC;
l3=wage3*l3A+(1-wage3)*l3B;

//Definition of labour demand by skill level
lA=sA1*l1A+sA2*l2A+(1-sA1-sA2)*l3A;
lB=sB13*l1B+(1-sB13)*l3B;

//Definition of the total capital stock
k=(k1*k1_star+k2*k2_star+k3*k3_star)/(k1_star+k2_star+k3_star);

//Definition of iquidity-constrained households income
y_c=aT1*tr+(1-aT1)*(aT2*(wA+lA)+aT3*(wB+lB)+(1-aT2-aT3)*(wC+lC));

//Definition of taxes
tax_P=((y1)*(y1_star/theta1_star/(y1_star/theta1_star+q2_star*y2_star/theta2_star))+(y2)*(1-(y1_star/theta1_star/(y1_star/theta1_star+q2_star*y2_star/theta2_star))));
tax_K=((1-zeta_1)*qz1+y1)*a_txk+(1-a_txk)*(zeta_2*(q2)+(1-zeta_2)*qz2+y2);
tax_C=(q+(mc_c*a_C2+mc_o*(1-a_C2)))*a_C1+(1-a_C1)*((dc1_o*dc1_o_star+dc1_c*dc1_c_star+(dc2_o*dc2_o_star+dc2_c*dc2_c_star)*q2_star+q2*(dc2_c_star+dc1_c_star))/(dc1_c_star+dc1_o_star+q2_star*(dc2_c_star+dc2_o_star)));
tax_L=aL1*(lA+wA)+aL2*(lB+wB)+(1-aL1-aL2)*(wC+lC);

tax=(tax_P*tax_P_star+tax_K*tax_K_star+tax_C*tax_C_star+tax_L*tax_L_star)/tax_star;

//Public deficit definition
(def+GDP)*def_star+tax*tax_star=tr*tr_star+g3*g3_star+inv3*inv3_star+(irate(-1)/irate_star+det(-1)+GDP(-1)-GammaP/GammaP_star)*interest_star;

//Definition of GDP
GDP=(y1*y1_star-dz11*dz11_star-dz21*dz21_star+y2*y2_star-dz12*dz12_star-dz22*dz22_star+g3*y3_star-dz13*dz13_star-dz23*dz23_star-g3*dz33_star)/(y1_star-dz11_star-dz21_star+y2_star-dz12_star-dz22_star+y3_star-dz13_star-dz23_star-dz33_star);


/************** Block D: Optimal prices definition ***********************/
//Investment prices: 22
qi=iota_2*(1-iota_1)*q+(1-iota_2)*q2;

//Intermediate input prices: 24-26
qz1=(1-sg_1)*q2+(sg_1)*sf_1*q;
qz2=(1-sg_2)*q2+(sg_2)*sf_2*q;
qz3=sq_3*q3+(1-sq_3)*((1-sg_3)*q2+(sg_3)*sf_3*q);

//Production prices: 27-29
y1-l1=1/(1-gamma1)*(-gamma1*R+A1+gamma1*(mc1*(1-1/theta1_star)-psi_1*qz1*qz1_star)/((1-1/theta1_star)-psi_1*qz1_star));
y2-l2=1/(1-gamma2)*(-gamma2*R+e_a2+gamma2*(mc2*(1-1/theta2_star)-psi_2*qz2*qz2_star)/((1-1/theta2_star)*q2_star-psi_2*qz2_star));
g3-l3=1/(1-gamma3)*(-gamma3*R+gamma3*(q3-psi_3*qz3*qz3_star)/(q3_star-psi_3*qz3_star));

//Consumption prices for optimizing agents: 48 & 49
qx_o=(q)*mc_o_star/(mc_o_star+dc1_o_star);
qc_o=(mc_o_star+dc1_o_star)/((mc_o_star+dc1_o_star)+q2_star*dc2_o_star)*qx_o+(1-(mc_o_star+dc1_o_star)/((mc_o_star+dc1_o_star)+q2_star*dc2_o_star))*(q2);

//Consumption prices for liquidity-constrained agents" 53 & 54
qx_c=(q)*mc_c_star/(mc_c_star+dc1_c_star);
qc_c=(mc_c_star+dc1_c_star)/((mc_c_star+dc1_c_star)+q2_star*dc2_c_star)*qx_c+(1-(mc_c_star+dc1_c_star)/((mc_c_star+dc1_c_star)+q2_star*dc2_c_star))*(q2);

/************** Block E: Optimal demand definition ***********************/
//Capital demand
k1=y1+(mc1*(1-1/theta1_star)-psi_1*qz1*qz1_star)/((1-1/theta1_star)-psi_1*qz1_star)-R;
k2=y2+(mc2*(1-1/theta2_star)-psi_2*qz2*qz2_star)/((1-1/theta2_star)*q2_star-psi_2*qz2_star)-R;
k3=g3+(q3-psi_3*qz3*qz3_star)/(q3_star-psi_3*qz3_star)-R;

//Investment
k1=(1-delta)/Gamma_star*k1(-1)+(1-(1-delta)/Gamma_star)*inv1;
k2=(1-delta)/Gamma_star*k2(-1)+(1-(1-delta)/Gamma_star)*inv2;
k3=(1-delta)/Gamma_star*k3(-1)+(1-(1-delta)/Gamma_star)*inv3;

//Sector 1
di11=inv1+eta_i*qi+(eta_ix-eta_i)*(1-iota_1)*q;
di21=inv1+eta_i*(qi-q2);
mi1=inv1+eta_i*qi-(eta_ix*iota_1+eta_i*(1-iota_1))*q;

//sector 2
di12=inv2+eta_i*qi+(eta_ix-eta_i)*(1-iota_1)*q;
di22=inv2+eta_i*(qi-q2);
mi2=inv2+eta_i*qi-(eta_ix*iota_1+eta_i*(1-iota_1))*q;

//sector 3
di13=inv3+eta_i*qi+(eta_ix-eta_i)*(1-iota_1)*q;
di23=inv3+eta_i*(qi-q2);
mi3=inv3+eta_i*qi-(eta_ix*iota_1+eta_i*(1-iota_1))*q;

//Intermediate inputs
//sector 1
dz21=y1+eta_z1*(qz1-q2);
dz11=y1+eta_z1*qz1+(eta_x1-eta_z1)*sf_1*q;
mz1=y1+eta_z1*qz1-(eta_x1*(1-sf_1)+eta_z1*sf_1)*q;

//sector 2
dz22=y2+eta_z2*(qz2-q2);
dz12=y2+eta_z2*qz2+(eta_x2-eta_z2)*sf_2*q;
mz2=y2+eta_z2*qz2-(eta_x2*(1-sf_2)+eta_z2*sf_2)*q;

//Sector 3
dz23=g3+eta_z3*(qz3-q2);
dz13=g3+eta_z3*qz3+(eta_x3-eta_z3)*sf_3*q;
mz3=g3+eta_z3*qz3-(eta_x3*(1-sf_3)+eta_z3*sf_3)*q;

//consumption of optimizing agents 
dc1_o=mc_o+eta_m*(q);
dc2_o=mc_o+eta_m*(q-qx_o)+eta_c*(q2+qx_o);
c_o=(dc2_o*dc2_o_star+dc1_o*dc1_o_star+mc_o*mc_o_star)/(dc2_o_star+dc1_o_star+mc_o_star);

//consumption of constrained agents
dc1_c=y_c+eta_c*qc_c+(eta_m-eta_c)*qx_c;
dc2_c=y_c+eta_c*(qc_c-q2);
mc_c=y_c-eta_m*(q)+eta_c*qc_c+(eta_m-eta_c)*qx_c;

/************** Block F: Policy rules ************************************/

//Equation 3: Taylor rule for the domestic economy
(irate)=rho_i*(irate(-1))+varalpha_P*(GammaP)+varalpha_Y*(GDP-GDP(-1));

//Equation 5: Taylor rule for the foreign economy
iratef=0.8*iratef(-1)+1.5*(GammaPf)+e_if;

//Fiscal rule: Transfer
tr=rho_tr*tr(-1)-(1-rho_tr)*eta_tr*(det(-1));

//Fiscal rule: Spending
g3=rho_g*g3(-1)+(1-rho_g)*(-eta_g*(det(-1)))+e_g; 

/**************************** Bloc G: Market clearing ********************/
//Market clearing in sector 1
y1*y1_star=di11*di11_star+di12*di12_star+di13*di13_star+dz11*dz11_star+dz12*dz12_star+dz13*dz13_star+(e_x+eta_x*q)*x_star+dc1_c*dc1_c_star+dc1_o*dc1_o_star;

//Market clearing in sector 2
y2*y2_star=di21*di21_star+di22*di22_star+di23*di23_star+dz21*dz21_star+dz22*dz22_star+dz23*dz23_star+dc2_c*dc2_c_star+dc2_o*dc2_o_star;

//Trade account balance gives the import of optimizing agents
x_star*(e_x+(eta_x-1)*q)=mc_c_star*mc_c+mc_o*mc_o_star+mi1*mi1_star+mi2*mi2_star+mi3*mi3_star+mz1*mz1_star+mz2*mz2_star+mz3*mz3_star+FB*(1-(1+iratef_star)/(Gamma_star*GammaP_star));

/****************************** Bloc H: Observed variables ***************/
gi_obs=irate;
ginv_obs=inv;
gg3_obs=g3;
gy1_obs=y1;
gy2_obs=y2;
gq2_obs=q2;
gGammaP_obs=GammaP;
gw_obs=((wA+lA)*wA_star*lA_star+(wB+lB)*wB_star*lB_star+(wC+lC)*wC_star*lC_star)/(wA_star*lA_star+wB_star*lB_star+wC_star*lC_star);
gl_obs=(lA*lA_star+lB*lB_star+lC*lC_star)/(lA_star+lB_star+lC_star);
gc_obs=c_o*(1-yc_star/c_star)+(y_c-qc_c)*yc_star/c_star;

end;

initval;
lA=0;
lB=0;
lC=0;
pA=0;
pB=0;
pC=0;
wA=0;
wB=0;
wC=0;
q2=0;
q3=0;
q=0;
l1=0;
l2=0;
l3=0;
y1=0;
y2=0;
inv1=0;
inv2=0;
inv3=0;
di11=0;
di12=0;
di13=0;
di21=0;
di22=0;
di23=0;
mi1=0;
mi2=0;
mi3=0;
dz11=0;
dz12=0;
dz13=0;
dz21=0;
dz22=0;
dz23=0;
mz1=0;
mz2=0;
mz3=0;
y_c=0;
tr=0;
tax=0;
tax_P=0;
tax_K=0;
tax_L=0;
tax_C=0;
mc_c=0;
mc_o=0;
dc1_o=0;
dc2_o=0;
dc1_c=0;
dc2_c=0;
qx_o=0;
qc_o=0;
qx_c=0;
qc_c=0;
nA=0;
nB=0;
GDP=0;
H_C=0;
H_A=0;
H_B=0;
HC_A=0;
HC_B=0;
HC_C=0;
mc1=0;
mc2=0;
GammaP=0;
l1A=0;
l1B=0;
l2A=0;
l3A=0;
l3B=0;
e_rate=0;
FB=0;
iratef=0;
irate=0;
GammaPf=0;
GammaP2=0;
c_o=0;
lambda=0;
mu=0;
k=0;
k1=0;
k2=0;
k3=0;
inv=0;
def=0;
det=0;
g3=0;
wA_bar=0;
wB_bar=0;
wC_bar=0;
qi=0;
R=0;
qz1=0;
qz2=0;
qz3=0;
A1=0;
Gamma=0;

end;



steady;
//resid(1);
//check;
stoch_simul;


estimated_params;
phi_C, beta_pdf, 0.95, 0.1; 
phi_K, normal_pdf, 10, 2;
//eta_FB, normal_pdf, 0.001, 0.01;
rho_g, normal_pdf, 0.35, 0.2;
eta_g, beta_pdf, 0.5, 0.2;
rho_P, beta_pdf, 0.6, 0.2;
alpha_P, beta_pdf, 0.5, 0.2;
rho_P2, beta_pdf, 0.65, 0.2;
alpha_P2, beta_pdf, 0.5, 0.2;
rho_W, beta_pdf, 0.5, 0.2;
alpha_W, beta_pdf, 0.55, 0.2;
rho_i, beta_pdf, 0.5, 0.2;
varalpha_P, normal_pdf, 1.9, 0.5;
varalpha_Y, normal_pdf, 0.01, 0.5;
rho_a1, beta_pdf, 0.9, 0.1;
rho_G,beta_pdf, 0.9, 0.1;
 
stderr e_a1, inv_gamma_pdf, 0.02, inf;
stderr e_a2, inv_gamma_pdf, 0.02, inf;
stderr e_nA, inv_gamma_pdf, 0.02, inf;
stderr e_nB, inv_gamma_pdf, 0.02, inf;
stderr e_x, inv_gamma_pdf, 0.04, inf;
stderr e_e, inv_gamma_pdf, 0.05, inf;
stderr e_c, inv_gamma_pdf, 0.02, inf;
stderr e_if, inv_gamma_pdf, 0.03, inf;
stderr e_g, inv_gamma_pdf, 0.03, inf;
stderr e_h, inv_gamma_pdf, 0.1, inf;
stderr e_wu, inv_gamma_pdf, 0.1, inf;
stderr e_G, inv_gamma_pdf, 0.02, inf;
end;

varobs gi_obs ginv_obs gy1_obs gy2_obs gGammaP_obs gg3_obs gl_obs gw_obs gc_obs gq2_obs;
 
model_info;
identification;




