File size: 11,569 Bytes
1d78adb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
document.addEventListener('DOMContentLoaded', function() {
    const documentInput = document.getElementById('documentInput');
    const frameworksInput = document.getElementById('frameworksInput');
    const analyzeBtn = document.getElementById('analyzeBtn');
    const analysisSection = document.getElementById('analysisSection');
    const uploadedDocuments = document.getElementById('uploadedDocuments');
    const documentsList = document.getElementById('documentsList');
    let uploadedFiles = [];

    // Show documents section when files are selected
    documentInput.addEventListener('change', function() {
        if (this.files.length > 0) {
            uploadedFiles.push({
                name: this.files[0].name,
                type: 'Documento',
                date: new Date().toLocaleString()
            });
            updateDocumentsList();
            uploadedDocuments.classList.remove('hidden');
        }
    });
    
    frameworksInput.addEventListener('change', function() {
        if (this.files.length > 0) {
            Array.from(this.files).forEach(file => {
                uploadedFiles.push({
                    name: file.name,
                    type: 'Marco',
                    date: new Date().toLocaleString()
                });
            });
            updateDocumentsList();
            uploadedDocuments.classList.remove('hidden');
        }
    });

    function updateDocumentsList() {
        documentsList.innerHTML = '';
        uploadedFiles.forEach((file, index) => {
            const row = document.createElement('tr');
            row.className = 'hover:bg-gray-50';
            row.innerHTML = `
                <td class="px-6 py-4 whitespace-nowrap">
                    <div class="flex items-center">
                        <i data-feather="${file.type === 'Documento' ? 'file-text' : 'book'}" class="w-5 h-5 text-blue-500 mr-2"></i>
                        <span class="text-sm font-medium text-gray-900">${file.name}</span>
                    </div>
                </td>
                <td class="px-6 py-4 whitespace-nowrap">
                    <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full ${file.type === 'Documento' ? 'bg-green-100 text-green-800' : 'bg-purple-100 text-purple-800'}">
                        ${file.type}
                    </span>
                </td>
                <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">${file.date}</td>
                <td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                    <button onclick="removeDocument(${index})" class="text-red-600 hover:text-red-900 mr-3">
                        <i data-feather="trash-2" class="w-4 h-4"></i>
                    </button>
                    <button onclick="viewDocument(${index})" class="text-blue-600 hover:text-blue-900">
                        <i data-feather="eye" class="w-4 h-4"></i>
                    </button>
                </td>
            `;
            documentsList.appendChild(row);
        });
        feather.replace();
    }

    window.removeDocument = function(index) {
        uploadedFiles.splice(index, 1);
        updateDocumentsList();
        if (uploadedFiles.length === 0) {
            uploadedDocuments.classList.add('hidden');
            analysisSection.classList.add('hidden');
        }
    };

    window.viewDocument = function(index) {
        alert(`Visualizando documento: ${uploadedFiles[index].name}`);
        // In a real app, this would open a document viewer
    };
// Analyze button functionality
    analyzeBtn.addEventListener('click', function() {
        if (!documentInput.files[0] || !frameworksInput.files[0]) {
            alert('Por favor sube ambos: el documento a analizar y los marcos funcionales');
            return;
        }
        
        // Simulate analysis (in a real app, this would call an API)
        simulateAnalysis();
    });
    function simulateAnalysis() {
        analyzeBtn.disabled = true;
        analyzeBtn.innerHTML = '<i data-feather="loader" class="animate-spin mr-2"></i> Analizando iniciativas...';
        feather.replace();
        
        // Simulate processing delay
        setTimeout(() => {
            // Generate mock initiatives analysis
            const initiatives = [
                { 
                    name: 'Digitalizaci贸n de procesos', 
                    pdiObjectives: ['OE1. Transformaci贸n digital', 'OE3. Eficiencia operativa'],
                    cfirAspects: ['Intervenci贸n', 'Contexto interno'],
                    match: 82,
                    details: [
                        { aspect: 'Alineaci贸n con OE1', match: 90, comment: 'Excelente cobertura de objetivos de digitalizaci贸n' },
                        { aspect: 'Alineaci贸n con OE3', match: 75, comment: 'Podr铆a incluir m谩s m茅tricas de eficiencia' },
                        { aspect: 'CFIR: Intervenci贸n', match: 80, comment: 'Buen dise帽o de la intervenci贸n' },
                        { aspect: 'CFIR: Contexto interno', match: 65, comment: 'Necesita mayor an谩lisis del contexto actual' }
                    ]
                },
                { 
                    name: 'Capacitaci贸n continua', 
                    pdiObjectives: ['OE2. Desarrollo de talento', 'OE4. Cultura organizacional'],
                    cfirAspects: ['Caracter铆sticas individuales', 'Proceso de implementaci贸n'],
                    match: 78,
                    details: [
                        { aspect: 'Alineaci贸n con OE2', match: 85, comment: 'Cubre bien los objetivos de desarrollo' },
                        { aspect: 'Alineaci贸n con OE4', match: 70, comment: 'Podr铆a fortalecer aspectos culturales' },
                        { aspect: 'CFIR: Caracter铆sticas individuales', match: 82, comment: 'Buena consideraci贸n de competencias' },
                        { aspect: 'CFIR: Proceso de implementaci贸n', match: 60, comment: 'Falta plan detallado de implementaci贸n' }
                    ]
                }
            ];
            
            const recommendations = [
                'Priorizar la iniciativa de digitalizaci贸n por su alto alineamiento estrat茅gico',
                'Reforzar el an谩lisis de contexto organizacional en todas las iniciativas',
                'Establecer indicadores claros para medir impacto en cultura organizacional'
            ];
            // Display initiatives analysis
            displayInitiativesAnalysis(initiatives, recommendations);
analyzeBtn.disabled = false;
            analyzeBtn.innerHTML = '<i data-feather="refresh-cw" class="mr-2"></i> Reanalizar';
            feather.replace();
        }, 3000);
    }
    function displayInitiativesAnalysis(initiatives, recommendations) {
        const pdiContainer = document.getElementById('pdiResults');
        const cfirContainer = document.getElementById('cfirResults');
        const recContainer = document.getElementById('recommendations');
        
        // Clear previous results
        pdiContainer.innerHTML = '';
        cfirContainer.innerHTML = '';
        recContainer.innerHTML = '';
        
        // Display initiatives analysis
        initiatives.forEach(initiative => {
            const initiativeCard = document.createElement('div');
            initiativeCard.className = 'mb-6 p-4 bg-white border rounded-lg shadow-sm analysis-result';
            initiativeCard.innerHTML = `
                <div class="flex justify-between items-start mb-3">
                    <div>
                        <h3 class="font-semibold text-lg text-gray-800">${initiative.name}</h3>
                        <div class="flex items-center mt-1">
                            <span class="text-sm font-medium mr-2">Alineamiento general:</span>
                            <span class="text-sm font-semibold ${initiative.match > 75 ? 'text-green-600' : initiative.match > 50 ? 'text-yellow-600' : 'text-red-600'}">${initiative.match}%</span>
                        </div>
                    </div>
                    <div class="flex space-x-2">
                        <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800">
                            ${initiative.pdiObjectives.length} objetivos PDI
                        </span>
                        <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
                            ${initiative.cfirAspects.length} aspectos CFIR
                        </span>
                    </div>
                </div>
                
                <div class="grid md:grid-cols-2 gap-4">
                    <div>
                        <h4 class="font-medium text-gray-700 mb-2">Objetivos PDI relacionados:</h4>
                        <ul class="list-disc list-inside text-sm text-gray-600 space-y-1">
                            ${initiative.pdiObjectives.map(obj => `<li>${obj}</li>`).join('')}
                        </ul>
                    </div>
                    <div>
                        <h4 class="font-medium text-gray-700 mb-2">Aspectos CFIR:</h4>
                        <ul class="list-disc list-inside text-sm text-gray-600 space-y-1">
                            ${initiative.cfirAspects.map(aspect => `<li>${aspect}</li>`).join('')}
                        </ul>
                    </div>
                </div>
                
                <div class="mt-4">
                    <h4 class="font-medium text-gray-700 mb-2">Detalles de alineaci贸n:</h4>
                    <div class="space-y-3">
                        ${initiative.details.map(detail => `
                            <div>
                                <div class="flex justify-between mb-1 text-sm">
                                    <span>${detail.aspect}</span>
                                    <span class="font-semibold">${detail.match}%</span>
                                </div>
                                <div class="w-full bg-gray-200 rounded-full h-2">
                                    <div class="h-2 rounded-full ${detail.aspect.includes('OE') ? 'bg-green-500' : 'bg-blue-500'}" style="width: ${detail.match}%"></div>
                                </div>
                                <p class="text-xs mt-1 text-gray-500">${detail.comment}</p>
                            </div>
                        `).join('')}
                    </div>
                </div>
            `;
            pdiContainer.appendChild(initiativeCard);
        });
        
        // Display recommendations
        const recHeader = document.createElement('h3');
        recHeader.className = 'font-medium text-yellow-700 mb-3 flex items-center';
        recHeader.innerHTML = '<i data-feather="alert-triangle" class="mr-2"></i> Recomendaciones estrat茅gicas';
        recContainer.appendChild(recHeader);
        
        recommendations.forEach((rec, index) => {
            const recItem = document.createElement('div');
            recItem.className = 'mb-3 p-3 bg-yellow-50 border border-yellow-100 rounded-lg flex items-start analysis-result';
            recItem.innerHTML = `
                <span class="flex-shrink-0 bg-yellow-100 text-yellow-800 rounded-full w-6 h-6 flex items-center justify-center mr-3 text-sm font-medium">${index + 1}</span>
                <span class="text-yellow-700">${rec}</span>
            `;
            recContainer.appendChild(recItem);
        });
}
});