//------------------------------
// Endogeneous Variables
//------------------------------

var w, c_r, c_nr, n_r, n_nr, c, n, delta_e, a, xi, mc, pi_h, pi_f, pi, y, i, 
b, g, T_c, T_w, T_b, q, psi, vartheta, y_star, i_star, pi_star;
//------------------------------
// Exogeneous variables
//------------------------------

varexo eps_a, eps_pi_h, eps_pi_f, eps_xi, eps_y, eps_i, eps_g, 
eps_tc, eps_tw, eps_tb, eps_y_star, eps_pi_star, eps_i_star;
//------------------------------
// Parameters
//-----------------------------
parameters beta, theta, theta_f sigma, varphi, h, mu, nu, gamma, tau_c, tau_w, 
tau_b, rho_a, rho_xi, rho_i, phi_pi, phi_e, phi_y, alpha1, alpha2, delta1, 
delta2, delta3, delta4, delta5, rho_g, phi_g, phi_bg, 
rho_tc, phi_tc, phi_bc, rho_tw, phi_tw, phi_bw, rho_tb, phi_tb, phi_tbb, eta,
rho_y_star, rho_i_star, rho_pi_star;



//-------------------------------
// Calibration
//------------------------------
theta=0.8;
theta_f=0.7;
beta=0.99;
sigma=1.5;
h=0.7;
varphi=2; 
mu=0.5; 
nu=0.5;
gamma=0.4;
tau_c=0.33;
tau_w=0.26;
tau_b=0.1;
rho_a=0.6;
rho_xi=0.8;
rho_i=0.5;
phi_pi=1.65;
phi_y=0.5;
phi_e=0.025;
alpha1=0.7;
alpha2=0.15;
eta=0.6;
delta1=2;
delta2=0.1;
delta3=0.9;
delta4=0.6;
delta5=1.5;
rho_g=0.5;
phi_g=1.18;
phi_bg=0.38;
rho_tc=0.5;
phi_tc=1.3;
phi_bc=0.38;
rho_tw=1.28;
phi_tw=0.4;
phi_bw=0.4;
rho_tb=0.5;
phi_tb=1.27;
phi_tbb=0.4;
rho_y_star=0.85;
rho_pi_star=0.5;
rho_i_star=0.8;
//-----------------------
//        MODEL
//-----------------------
model(linear);
# K = ((1-theta)*(1-beta*theta))/theta;
# K_s=((1-theta_f)*(1-beta*theta_f))/theta_f;

//------------------------------------------------
//             Households
//------------------------------------------------

// 1. Labor-consumption choice for Ricardian households
w=(tau_c/(1+tau_c))*T_c+(tau_w/(1-tau_w+tau_b))*T_w-(tau_b/(1-tau_w+tau_b))*T_b+varphi*n_r+(sigma/(1-h))*(c_r-h*c_r(-1));

// 2. Euler equation for Ricardian households
c_r=h*c_r(-1)+y_star(+1)-h*y_star-(1-h)/sigma*(i-pi(+1)-q(+1)+tau_c/(1+tau_c)*T_c-tau_c/(1+tau_c)*T_c(+1));

//3. Labor-consumption choice for Non-Ricardian households
//w=(tau_c/(1+tau_c))*T_c+(tau_w/(1-tau_w+tau_b))*T_w-(tau_b/(1-tau_w+tau_b))*T_b+varphi*n_nr+sigma*c_nr;
n_nr=(1-sigma)/(sigma+varphi)*(-(tau_w/(1-tau_w+tau_b))*T_w-(tau_b/(1-tau_w+tau_b))*T_b-(tau_c/(1+tau_c))*T_c+w);

// 4. Euler equation for Non-Ricardian Households
c_nr=((1+varphi)/(sigma+varphi))*(-(tau_w/(1-tau_w+tau_b))*T_w-(tau_b/(1-tau_w+tau_b))*T_b-(tau_c/(1+tau_c))*T_c+w);

// 5. Aggregate consumption 
c=(1-mu)*c_r+mu*c_nr;

// 6. Aggregate Labor
n=(1-nu)*n_r+nu*n_nr;

//7. Uncovered Interest parity
i=i_star+delta_e(+1)+xi;

//8. Risk Premium
xi=rho_xi*xi(-1)+eps_xi;

//---------------------------------------
//         Firms
//---------------------------------------

// 9. Production function
y = a + n;

// 10. Technology
a = rho_a*a(-1) + eps_a;

// 11. Marginal cost
mc=w-a;

// 12. New Keynesian Phillips curve for producers
pi_h= beta*(pi_h(+1))+ K*mc+eps_pi_h;

// 13. New Keynesian Phillips curve for importers

pi_f= beta*(pi_h(+1))+ K_s*psi+eps_pi_f;

// 14. Aggregate domestic inflation
pi=(1-gamma)*pi_h+gamma*pi_f;

//-----------------------------------------------
//      Market Clearing
//-----------------------------------------------
// 15. Market clearing condition
y=-eta*(alpha2*psi-(alpha1*gamma-alpha2)*vartheta)+alpha1*c+alpha2*y_star+(1-alpha1-alpha2)*g;


//------------------------------------------
//       Monetary Policy
//------------------------------------------

// 16. Taylor rule
i = rho_i*i(-1) + (1-rho_i)*(phi_pi*pi(+1) + phi_y*y(+1)+phi_e*delta_e(+1)) + eps_i;


//------------------------------------------
//         Fiscal Policy
//------------------------------------------

// 17. Government budget constraint
b=delta1*g+delta2*i(-1)+delta3*b(-1)-delta4*(T_c+c)+delta5*(tau_b*T_b-tau_w*T_w+(tau_b-tau_w)*(w+n));
// 18. Consumption Tax
T_c=rho_tc*T_c(-1)+(1-rho_tc)*(-phi_tc*y+phi_bc*b(-1))+eps_tc;

// 19. Income Tax
T_w=rho_tw*T_w(-1)+(1-rho_tw)*(-phi_tw*y+phi_bw*b(-1))+eps_tw;

// 20. Government Benefits
T_b=rho_tb*T_b(-1)+(1-rho_tb)*(phi_tb*y-phi_tbb*b(-1))+eps_tb;

// 21. Government Expenditures
g=rho_g*g(-1)+(1-rho_g)*(phi_g*y-phi_bg*b(-1))+eps_g;

//-----------------------------------------------
//         Closing The model
//-----------------------------------------------
// 22. Real exchange rate
q=psi-(1-gamma)*vartheta;
// 23. Law of one price Gap
psi-psi(-1)=delta_e+pi_star-pi_f;
// 24. Terms of trade
vartheta-vartheta(-1)= pi_h-pi_f;

//-------------------------------------------------
//             World
//-------------------------------------------------


// 25-27. AR(1) processes
y_star = rho_y_star*y_star(-1) + eps_y_star;
pi_star = rho_pi_star*pi_star(-1) + eps_pi_star;
i_star = rho_i_star*i_star(-1) + eps_i_star;


end;

steady;
check;

shocks;

var eps_pi_h; stderr 0.01;
var eps_a; stderr 0.01;
var eps_i; stderr 0.01;
var eps_g; stderr 0.01;
var eps_tc; stderr 0.01;
var eps_tw; stderr 0.01;
var eps_tb; stderr 0.01;
var eps_pi_f; stderr 0.01; 
var eps_xi; stderr 0.01; 
var eps_y; stderr 0.01; 
var eps_y_star; stderr 0.01; 
var eps_pi_star; stderr 0.01; 
var eps_i_star; stderr 0.01; 

end;

stoch_simul(irf=20, conditional_variance_decomposition=[1 5 20 100]);
