/*
Versão do modelo eq_modelo.m

VERSÃO PARA O DYNARE
Lembrar de add o dynare
addpath c:\dynare\4.4.3\matlab
*/

var psi Uc Rj pi int J U c A lab w pstar zn zd mu pitarg y ybar ;
    
varexo ea ei ealpha epi;

parameters beta chi gamma delta theta lambda chi0 pibar rhoi phipi phiy xi rhoybar rhoa rhoalpha rhopi alphabar varpi sigmaa 
            sigmai sigmaalpha sigmapi labss intss css Uss Ucss Rjss Jss wss muss yss Ass pstarss znss zdss psiss ;

beta = 0.99;
chi = 3.0534;
gamma = 2.0047;
delta = .7;
theta = 0.6921;
lambda = 1.1261;
xi = 0.9055;       
rhoi = 0.9;
phipi = 7.5343;
phiy = 1.0093;
rhoybar = 0.8850;
rhoa = 0.9868;
rhoalpha = 0.9193;
alphabar = 10.0210;
rhopi = 0.8000;
varpi = 0.8;
sigmaa = .005;    sigmai = .003;    sigmaalpha = .05;
sigmapi = .02; 

pibar = 1.008; 
//chi0 = (theta*delta/lambda)*3^((1-theta)/theta-theta*gamma)*(2^chi);
chi0 = (theta*delta/lambda)*3^(1-chi+theta*(gamma-1))*(2^chi);
labss = 1/3;          intss = 1/beta + pibar -1 ;
css = 3^(-theta);     Uss = css^(1-gamma)/(1-gamma) + chi0*(1-labss)^(1-chi)/(1-chi);
Ass = 1;

/*
Agora colocar os steady states
*/

psiss = 1 - alphabar;
Ucss = delta*css^(-gamma);
Rjss = 1/beta;
piss = pibar;
Jss = Uss/( Ucss*(1-beta) );
yss = css;
wss = chi0*(1-labss)^(-chi)*yss^(gamma)/delta;
muss = 1/lambda;
ybarss = yss;
Ass = 1; 
pstarss = 1;
znss = yss*muss/(1-xi*beta); zdss = yss/(1-xi*beta);
pitargss = pibar; 


model;
// 1
// Uc^psi = beta^psi*Uc(+1)^psi*Rj(+1)^(psi-1)*int/pi(+1) ;
psiss*Uc = psiss*Uc(+1) + (psiss-1)*Rj(+1) + int - pi(+1);

//2
// Rj = J/( J(-1) - U(-1)*Uc(-1)^(-1) );
Rj = J - 1/beta*J(-1) + (1-beta)/beta*U(-1) - (1-beta)/beta*Uc(-1);

//3
// Uc^psi = beta^psi*Uc(+1)^psi*Rj(+1)^psi;
Uc(-1) = Uc + Rj;

//4
// U = c^(delta*(1-gamma))*c(-1)^((1-delta)*(1-gamma))/(1-gamma) + chi0*A^(1-gamma)*(1-lab)^(1-chi)/(1-chi);  //  
Uss*U = delta*css^(1-gamma)*c + (1-delta)*css^(1-gamma)*c(-1) + chi0*(1-gamma)*(1-labss)^(1-chi)/(1-chi)*A - chi0*(1-labss)^(-chi)*labss*lab ;

//5
// Uc = delta*c^(delta*(1-gamma)-1)*c(-1)^((1-delta)*(1-gamma));
Uc = (delta*(1-gamma)-1)*c + (1-delta)*(1-gamma)*c(-1);

//6
// w = chi0*A^(1-gamma)*(1-lab)^(-chi)/Uc;     // 
w = (1-gamma)*A + labss*chi/(1-labss)*lab - Uc;

//7
// (xi-1)*pstar^(1/(1-lambda)) + 1 = xi*pi^(1/(lambda-1))*pi(-1)^(varpi/(1-lambda))*pibar^((1-varpi)/(1-lambda)) ;
(xi-1)/(1-lambda)*pstar = xi/(lambda-1)*pi + xi*varpi/(1-lambda)*pi(-1);

//8
// pstar = lambda*zn/zd;
pstar = zn - zd;

//9
// zn = mu*y + xi*beta^psi*(Uc(+1)/Uc)^psi*Rj(+1)^(psi-1)*pi(+1)^(lambda/(lambda-1))*pi(-1)^(lambda*varpi/(1-lambda))*pibar^(lambda*(1-varpi)/(1-lambda))*zn(+1) ;
psiss*Uc = psiss*Uc(+1) + (psiss-1)*Rj(+1) + lambda/(lambda-1)*pi(+1) + lambda*varpi/(1-lambda)*pi + zn(+1) - pibar*(xi*beta)*zn +
            (1-beta*xi)/(xi*beta)*mu + (1-beta*xi)/(xi*beta)*y;

//10
// zd = y + xi*beta^psi*(Uc(+1)/Uc)^psi*Rj(+1)^(psi-1)*pi(+1)^(1/(lambda-1))*pi(-1)^(varpi/(1-lambda))*pibar^((1-varpi)/(1-lambda))*zd(+1) ;
psiss*Uc = psiss*Uc(+1) + (psiss-1)*Rj(+1) + 1/(lambda-1)*pi(+1) + varpi/(1-lambda)*pi + zd(+1) - pibar*(xi*beta)*zn +
            (1-beta*xi)/(xi*beta)*y;

//11
// mu = w*y^((1-theta)/theta)/(theta*A^(1/theta));
mu = w + (1-theta)*y - 1/theta*A;

//12
// y = c;
y = c;

//13
// y = A*lab^theta;
y = A + theta*lab;

//14
// log(A) = rhoa*log(A(-1)) + ea;
A = rhoa*A(-1) + ea;

//15
// int = int(-1)^rhoi*( intss*(pi/pitarg)^phipi*(y/ybar)^(phiy) )^(1-rhoi)*exp(ei);  
int = rhoi*int(-1) + (1-rhoi)*phipi*pi - (1-rhoi)*phipi*pitarg + (1-rhoi)*phiy*y - (1-rhoi)*phiy*ybar + ei;  

//16
// log(ybar) = rhoybar*log(ybar(-1)) + (1 - rhoybar)*log(y);   
ybar = rhoybar*ybar(-1) + (1-rhoybar)*y;

//17
// pitarg = (1-rhopi)*pibar + rhopi*pitarg(-1) + epi - 0.3*ea;   
pitarg = rhopi*pitarg(-1) + epi - 0.3*ea;

//18
// psi = (1-rhoalpha)*(1-alphabar) + rhoalpha*psi(-1) - ealpha ;
psi = rhoalpha*psi(-1) - ealpha;
end;


initval;   // steady_state_model ou initval;

psi = 0;    Uc = 0;    Rj = 0;    int = 0;  
pi = 0;     J = 0;     U = 0;      lab = 0;
w = 0;      c = 0;     mu = 0;     y = 0;    ybar = 0;
A = 0;     pstar = 0;            zn = 0;   zd = 0;
pitarg = 0;       
end;
// steady;

// resid;
//steady(solve_algo = 0);
check ;


shocks;
var ea;
stderr sigmaa;
var ei;
stderr sigmai;
var ealpha;
stderr 0;
var epi;
stderr 0;
end;

model_diagnostics;
//  nograph,  nocorr, nofunctions
// stoch_simul(order=1, irf=40, nograph, periods = 200);
//stoch_simul(order=1, irf=30, nograph) ;




