';
}
// Same .tc-room skeleton as renderRoomRow (avatar/info/top/bottom) so a group row matches the
// 1:1 rows visually — data-type="group" + data-gid instead of data-cid/data-uid is what the
// click-delegation in renderRooms() switches on. No online/typing indicator (doesn't apply to
// a group), and the avatar is a rounded square instead of a circle as the only visual cue
// distinguishing a group from a person, mirroring common chat-app convention.
function renderGroupRow(group) {
var gid = group.gid;
var name = group.name || '';
var lastMsg = group.lastMessage;
var preview = '';
if (lastMsg) {
preview = parseDisplayText(lastMsg.msm);
if (!preview) {
if (lastMsg.urlima && lastMsg.urlima.indexOf('public://') >= 0) preview = '📷';
else if (lastMsg.urlaudi && lastMsg.urlaudi.indexOf('public://') >= 0) preview = '🎵';
}
if (String(lastMsg.whosend) === String(userId)) preview = 'You: ' + preview;
} else {
preview = 'No messages yet';
}
var timeStr = group.updated ? fmtTime(unixToDbTimestamp(group.updated)) : '';
var unread = group.unreadCount > 0;
var active = activeGid === gid;
return '
';
}
var body = '';
if (msg.urlima === '_loading_') {
body += '
📷 Sending…
';
} else if (msg.urlima && msg.urlima.indexOf('public://') >= 0) {
var src = msg.urlima.replace('public://', FILES_BASE);
body += '';
}
if (msg.urlaudi && msg.urlaudi.indexOf('public://') >= 0) {
var asrc = msg.urlaudi.replace('public://', FILES_BASE);
body += '';
}
if (meta && meta.type === 'loc') {
body += locationLinkHtml(meta.lat, meta.lng);
} else if (!isSalt && text) {
body += '
' + linkifyText(escHtml(text)) + '
';
}
var time = fmtTime(msg.timestamp || '');
return '
'
+ metaHtml + body
+ '' + escHtml(time) + ''
+ '
';
}
// ── Render group messages ────────────────────────────────────────────────────
function renderGroupMessages(gid) {
var msgs = allGroupMsgs[gid] || [];
var $el = $('#tc-msgs');
var order = msgs.slice().reverse();
$el.html(order.map(renderGroupMsg).join(''));
$el.scrollTop($el[0].scrollHeight);
}
// Same shape as renderMsg(), plus a sender-name label on incoming bubbles — unlike a 1:1
// conversation, "not me" doesn't tell you who actually sent it. Reuses the identical
// urlima/urlaudi rendering, so images/audio sent from the Android app (or sendGroupImage()
// here) display correctly. Audio still has no send control in this web widget.
function renderGroupMsg(msg) {
var isMe = String(msg.whosend) === String(userId);
var side = isMe ? 'tc-out' : 'tc-in';
var parsed = parseInlineMeta(msg.msm || '');
var text = parsed.text;
var meta = parsed.meta;
var isSalt = (text.length === 18 && text.indexOf(' ') < 0);
var senderHtml = '';
if (!isMe) {
senderHtml = '
' + escHtml(msg.senderName || msg.whosend) + '
';
}
var metaHtml = '';
if (meta && meta.type === 'fwd') {
metaHtml = '
';
}
// ── Send (opc 11) ────────────────────────────────────────────────────────────
function sendMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeCid) return;
$('#tc-input').val('').focus();
isTyping = false;
post({ opc: '11', userid: userId, cid: activeCid, msm: text, fid: '0' })
.then(function (resp) {
if (!resp) return;
var ok = (resp.resp === 3 || resp.resp === '3' ||
resp.resp === 11 || resp.resp === '11');
if (!ok) return;
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: text,
urlima: '',
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift(msg);
renderMessages(activeCid);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: text,
type: 'text'
});
}
});
}
// ── Send group message ───────────────────────────────────────────────────────
// Purely socket-based — group-message-send both persists (tc_group_message, via the
// signaling server) and delivers, unlike 1:1's HTTP-then-socket-notify split. The server
// echoes the message back to the sender too (see group-message-send in signaling-server-2.js),
// so onGroupSocketMessage() is what actually appends it here — no optimistic local insert.
function sendGroupMessage() {
var text = $.trim($('#tc-input').val());
if (!text || !activeGid) return;
if (!socket || !socket.connected) return;
$('#tc-input').val('').focus();
isTyping = false;
socket.emit('group-message-send', {
gid: parseInt(activeGid, 10),
from: userId,
message: text,
type: 'text',
localId: 'web-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8)
});
}
// ── Send group image (group-message-send, type:"image") ─────────────────────
// Unlike 1:1 (HTTP upload then socket notify), groups have no HTTP upload endpoint —
// the server expects the raw file as a base64 string on the same socket event used for
// text (see group-message-send in signaling-server-2.js), and does its own resize/compress
// (sharp, 1024x1024 max, jpeg75) server-side before writing it and echoing "group-message"
// back to every member including the sender. That echo is what onGroupSocketMessage() uses
// to both confirm this optimistic placeholder (matched by localId) and actually display it.
function sendGroupImage(file) {
if (!activeGid) return;
if (!socket || !socket.connected) return;
if (pendingGroupImage) return; // one at a time — button is disabled meanwhile anyway
var gid = activeGid;
var localId = 'web-img-' + Date.now() + '-' + Math.random().toString(36).substr(2, 8);
pendingGroupImage = { gid: gid, localId: localId };
if (!allGroupMsgs[gid]) allGroupMsgs[gid] = [];
allGroupMsgs[gid].unshift({
id: localId, localId: localId, whosend: String(userId), senderName: myName,
msm: '', urlima: '_loading_', urlaudi: '', created: Math.floor(Date.now() / 1000)
});
renderGroupMessages(gid);
$('#tc-img-btn').attr('disabled', 'disabled');
// Safety net — if the server/socket never answers at all (disconnect mid-flight etc.),
// don't leave "Sending…" stuck forever (see the 1:1 image-send bug this mirrors).
var timeoutId = setTimeout(function () { onGroupMessageError({}); }, 20000);
compressImageIfNeeded(file, function (uploadFile) {
var reader = new FileReader();
reader.onload = function () {
clearTimeout(timeoutId);
if (!pendingGroupImage || pendingGroupImage.localId !== localId) return; // already cleared
var base64 = (reader.result || '').split(',')[1] || '';
if (!base64 || !socket || !socket.connected) { onGroupMessageError({}); return; }
socket.emit('group-message-send', {
gid: parseInt(gid, 10),
from: userId,
message: '',
type: 'image',
filedata: base64,
localId: localId
});
};
reader.onerror = function () {
clearTimeout(timeoutId);
onGroupMessageError({});
};
reader.readAsDataURL(uploadFile);
});
}
// Clears whatever group image send is currently in flight — used both for explicit
// "group-message-error" replies (bad file, not a member, rate-limited) and the
// client-side timeout above. Doesn't distinguish by localId: only one send is ever
// in flight at a time (the button is disabled meanwhile), so there's nothing to match.
function onGroupMessageError(data) {
if (!pendingGroupImage) return;
var gid = pendingGroupImage.gid;
var localId = pendingGroupImage.localId;
pendingGroupImage = null;
$('#tc-img-btn').removeAttr('disabled');
if (allGroupMsgs[gid]) {
allGroupMsgs[gid] = allGroupMsgs[gid].filter(function (m) { return m.localId !== localId; });
}
if (activeGid === gid && isOpen) renderGroupMessages(gid);
if (data && data.error) { console.warn('group image send failed:', data.error); }
}
// Resizes/re-encodes as JPEG when a file exceeds COMPRESS_THRESHOLD. Skips GIFs —
// redrawing to canvas would flatten an animated GIF to a single static frame.
// Falls back to the original file untouched if decoding/encoding fails for any reason.
function compressImageIfNeeded(file, callback) {
if (file.size <= COMPRESS_THRESHOLD || file.type === 'image/gif') {
callback(file);
return;
}
var img = new Image();
var url = URL.createObjectURL(file);
img.onload = function () {
URL.revokeObjectURL(url);
var scale = Math.min(1, COMPRESS_MAX_DIM / Math.max(img.width, img.height));
var canvas = document.createElement('canvas');
canvas.width = Math.round(img.width * scale);
canvas.height = Math.round(img.height * scale);
canvas.getContext('2d').drawImage(img, 0, 0, canvas.width, canvas.height);
canvas.toBlob(function (blob) {
callback(blob || file, !!blob);
}, 'image/jpeg', COMPRESS_QUALITY);
};
img.onerror = function () {
URL.revokeObjectURL(url);
callback(file);
};
img.src = url;
}
// ── Send image (opc 11I) ─────────────────────────────────────────────────────
function sendImage(file) {
if (!activeCid) return;
var tempId = '_img_' + Date.now();
if (!allMsgs[activeCid]) allMsgs[activeCid] = [];
allMsgs[activeCid].unshift({
id: tempId, whosend: String(userId), msm: '', urlima: '_loading_',
urlaudi: '', timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
});
renderMessages(activeCid);
// .attr()/.removeAttr(), not .prop() — this site's jQuery predates 1.6 (which is
// when .prop() was introduced), and every other call in this file sticks to
// pre-1.6-safe APIs already.
$('#tc-img-btn').attr('disabled', 'disabled');
compressImageIfNeeded(file, function (uploadFile, wasCompressed) {
var form = new FormData();
form.append('opc', '11I');
form.append('userid', String(userId));
form.append('cid', activeCid);
form.append('image', uploadFile, wasCompressed ? 'upload.jpg' : file.name);
fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (resp) {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
if (resp && (resp.resp === 3 || resp.resp === '3') && resp.urlima) {
var msg = {
id: resp.lastmid || String(Date.now()),
whosend: String(userId),
msm: '',
urlima: resp.urlima,
urlaudi: '',
timestamp: new Date().toISOString().replace('T', ' ').substr(0, 19)
};
allMsgs[activeCid].unshift(msg);
if (socket && socket.connected) {
socket.emit('send-message', {
id: resp.lastmid,
chatId: activeCid,
from: String(userId),
to: String(activeUid),
message: '',
urlima: resp.urlima,
type: 'image'
});
}
}
renderMessages(activeCid);
})
.catch(function () {
allMsgs[activeCid] = allMsgs[activeCid].filter(function (m) { return m.id !== tempId; });
renderMessages(activeCid);
})
.then(function () { $('#tc-img-btn').removeAttr('disabled'); });
});
}
// ── Inline meta parser ────────────────────────────────────────────────────────
function parseInlineMeta(raw) {
if (!raw) return { text: '', meta: null };
if (raw.substr(0, FWD_MARKER.length) === FWD_MARKER) {
var end = raw.indexOf(META_ETX);
if (end < 0) return { text: raw, meta: null };
var sender = raw.substring(FWD_MARKER.length, end);
return { text: raw.substring(end + 1), meta: { type: 'fwd', sender: sender } };
}
if (raw.substr(0, REPLY_MARKER.length) === REPLY_MARKER) {
var rend = raw.indexOf(META_ETX);
if (rend < 0) return { text: raw, meta: null };
var parts = raw.substring(REPLY_MARKER.length, rend);
var sep = parts.indexOf(META_SEP);
var rsender = sep >= 0 ? parts.substring(0, sep) : parts;
var orig = sep >= 0 ? parts.substring(sep + 1) : '';
return { text: raw.substring(rend + 1), meta: { type: 'reply', sender: rsender, orig: orig } };
}
// Shared location — same "lat" + META_SEP + "lng" encoding the Android app writes
// (see LOC_MARKER / sendLocationMessage() in ActivityChat.java). No trailing text.
if (raw.substr(0, LOC_MARKER.length) === LOC_MARKER) {
var lend = raw.indexOf(META_ETX);
if (lend < 0) return { text: raw, meta: null };
var coords = raw.substring(LOC_MARKER.length, lend);
var lsep = coords.indexOf(META_SEP);
var lat = lsep >= 0 ? coords.substring(0, lsep) : coords;
var lng = lsep >= 0 ? coords.substring(lsep + 1) : '';
return { text: raw.substring(lend + 1), meta: { type: 'loc', lat: lat, lng: lng } };
}
return { text: raw, meta: null };
}
function parseDisplayText(msm) {
var p = parseInlineMeta(msm || '');
var t = p.text;
if (p.meta && p.meta.type === 'loc') return '📍 ' + LOC_LABEL;
if (t.length === 18 && t.indexOf(' ') < 0) return '';
return (p.meta ? (p.meta.type === 'fwd' ? '↪ ' : '↩ ') : '') + t;
}
// ── Badge & notifications ─────────────────────────────────────────────────────
function updateBadge() {
var n = Object.keys(unreadCids).length;
Object.keys(allGroups).forEach(function (k) {
if (allGroups[k].unreadCount > 0) n++;
});
var $b = $('#tc-badge');
if (n > 0) { $b.text(n).removeClass('tc-hidden'); }
else { $b.addClass('tc-hidden'); }
}
function showNotif(title, body) {
if (!('Notification' in window)) return;
if (Notification.permission === 'granted') {
new Notification(title, {
body: body || '',
icon: 'https://www.taleoi.com/sites/default/files/taleoi.ico'
});
} else if (Notification.permission === 'default') {
Notification.requestPermission();
}
}
// ── HTTP ──────────────────────────────────────────────────────────────────────
function post(params) {
var form = new FormData();
Object.keys(params).forEach(function (k) { form.append(k, String(params[k])); });
return fetch(API_URL, { method: 'POST', body: form })
.then(function (r) { return r.ok ? r.json() : null; })
.catch(function () { return null; });
}
// ── Helpers ───────────────────────────────────────────────────────────────────
// Group timestamps (tc_group.updated, tc_group_message.created) are unix seconds, unlike
// 1:1's "YYYY-MM-DD HH:MM:SS" strings — converts to that same shape (local time) so both can
// share fmtTime() and the plain string comparison renderRooms() sorts by.
// Formatted with UTC getters, not local — fmtTime() (below) always treats this
// "YYYY-MM-DD HH:MM:SS" shape as UTC (appending 'Z' before parsing), matching the raw
// DB timestamp strings 1:1 chat passes it directly. Using local getters here would hand
// fmtTime() an already-local time it then re-shifts by the viewer's UTC offset again.
function unixToDbTimestamp(unixSec) {
if (!unixSec) return '0';
var d = new Date(unixSec * 1000);
function pad(n) { return (n < 10 ? '0' : '') + n; }
return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + ' '
+ pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds());
}
function fmtTime(ts) {
if (!ts) return '';
// DB timestamps are plain "YYYY-MM-DD HH:MM:SS" in UTC (MySQL TIMESTAMP column).
// Without a trailing 'Z', the JS Date parser treats a date-TIME string (unlike a
// date-only string) as local time, not UTC — silently shifting displayed times by
// the viewer's UTC offset. The 'Z' forces correct UTC interpretation.
var d = new Date(ts.replace(' ', 'T') + 'Z');
if (isNaN(d.getTime())) return '';
var now = new Date();
if (d.toDateString() === now.toDateString()) {
return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
}
return (d.getMonth() + 1) + '/' + d.getDate();
}
function escHtml(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&').replace(//g, '>')
.replace(/"/g, '"').replace(/'/g, ''');
}
function escAttr(s) { return escHtml(s); }
// Wraps http(s) URLs in a message's already-escaped text with clickable links. Must run
// AFTER escHtml() — matching against the escaped string is safe since escaping never
// introduces whitespace inside a URL run, and the entities it does introduce (e.g. "&"
// for a literal "&" in a query string) are exactly what a browser expects inside an href
// attribute anyway. target="_blank" + rel="noopener noreferrer" so following a link never
// navigates away from (or exposes window.opener to) the page the chat widget is floating on.
function linkifyText(escapedText) {
return escapedText.replace(/https?:\/\/[^\s<]+/g, function (url) {
var trail = '';
var m = url.match(/[.,!?:;)\]}'"]+$/);
if (m) { trail = m[0]; url = url.slice(0, -trail.length); }
if (!url) return trail;
return '' + url + '' + trail;
});
}
// A shared location (LOC_MARKER — see parseInlineMeta()) renders as a tappable card
// linking to Google Maps, matching how the Android app opens a geo: intent for the
// same coordinates. Uses an https:// maps URL instead since geo: isn't reliably
// clickable in desktop browsers.
function locationLinkHtml(lat, lng) {
var mapUrl = 'https://www.google.com/maps?q=' + encodeURIComponent(lat) + ',' + encodeURIComponent(lng);
return ''
+ '📍 ' + escHtml(LOC_LABEL) + '';
}
})(jQuery);
br| Page 59 | taleoi.com
🌟 Novena em Honra a São Sebastião - 7º Dia: 17/01/24 – Quarta-Feira 🙏✨
Confira as fotos do 7º dia da novena em honra a São Sebastião! 📸 Celebração Eucarística às 19h, presidida pelo Pe. Pedro. Tema: Eucaristia, Vivência na Comunidade. Convi...read more
🌟 Novena em Honra a São Sebastião - 7º Dia: 17/01/24 – Quarta-Feira 🙏✨
Confira as fotos do 7º dia da novena em honra a São Sebastião! 📸 Celebração Eucarística às 19h, presidida pelo Pe. Pedro. Tema: Eucaristia, Vivência na Comunidade. Convidados Especiais: Comunidade Nossa Senhora Aparecida e Imaculada Conceição.
Agradecemos a todos que participaram e contribuíram para este momento especial de fé e devoção.
Paróquia Santos Anjos/PASCOM
Diocese Do Alto Solimões
Pascom Brasil
Ampliam horário de entrega de documentos de identidade
Cartórios no Amazonas colombiano ampliam horário de funcionamento para o processamento e entrega de documentos de identidade
por Nailson Carlos R. Tenazor em 12 janeiro
Até o dia 29 de janeiro, o horário de funcionamento para o cidadã...read more
Cartórios no Amazonas colombiano ampliam horário de funcionamento para o processamento e entrega de documentos de identidade
por Nailson Carlos R. Tenazor em 12 janeiro
Até o dia 29 de janeiro, o horário de funcionamento para o cidadão processar e solicitar seu documento de identidade está estendido.
Os cidadãos podem se dirigir aos cartórios do departamento do Amazonas, de segunda a sexta-feira das 8h às 19h e aos sábados das 8h às 16h.
No total, são 3268 documentos de identidade que estão pendentes para serem entregues nos diferentes cartórios do Amazonas. O Registro Nacional de Estado Civil informa aos cidadãos que até o dia 29 de janeiro, o horário de funcionamento do Cartório Especial de Letícia e do Registro Municipal de Puerto Nariño, no Amazonas, está prorrogado, para que os cidadãos possam processar ou reivindicar seu documento de identidade.
No total, há 3268 documentos de identidade pendentes a reclamar em todo o departamento, dos quais 1725 correspondem a cartões de cidadania, tanto em versões digitais como amarelas com hologramas, e 1543 a bilhetes de identidade.
O Registro pede que os cidadãos se dirijam à sede onde processaram seu documento e o reivindiquem. É importante lembrar que as carteiras de cidadania e de identidade, após serem processadas e impressas para entrega, têm o prazo máximo de um ano para serem reclamadas, após esse tempo são destruídas.
Os cidadãos que desejarem processar ou solicitar seu documento de identidade podem se dirigir aos cartórios do Cartório no departamento do Amazonas de segunda a sexta-feira das 8h às 19h e aos sábados das 8h às 16h. Da mesma forma, eles podem acompanhar a solicitação para a tramitação do documento e verificar seu status, por meio do site da entidade, www.registraduria.gov.co, opção: Status do procedimento.
🌟 Contagem regressiva para o evento espetacular! ✨💃 As candidatas do Concurso Senhorita Benjamin 2024 estão radiantes e prontas para brilhar na passarela. A dedicação e a beleza delas vão tornar este momento ainda mais especial.
🌟 Contagem regressiva para o evento espetacular! ✨💃 As candidatas do Concurso Senhorita Benjamin 2024 estão radiantes e prontas para brilhar na passarela. A dedicação e a beleza delas vão tornar este momento ainda mais especial.
👑 Não perca a oportunidade de prestigiar e apoiar essas mulheres incríveis. 🎉
Bombeiros resgatam homem que ficou preso em cisterna por mais de 10h
(Corpo de Bombeiros/Divulgação)
O local onde o homem ficou preso tinha cerca de 10 metros de profundidade
Um homem de 64 anos foi resgatado pelo Corpo de Bombeiros após ficar preso por mais de 10 horas em um cisterna nas proximidades do km 245 da BR-381, na zona rural de ...read more
O local onde o homem ficou preso tinha cerca de 10 metros de profundidade
Um homem de 64 anos foi resgatado pelo Corpo de Bombeiros após ficar preso por mais de 10 horas em um cisterna nas proximidades do km 245 da BR-381, na zona rural de Santana do Paraíso, na região do Vale do Aço, na noite de quarta-feira (17).
De acordo com a corporação, a vítima saiu de casa pela manhã e, com o passar das horas, já à noite, o filho saiu à procura dele, e encontrou o carro do pai parado no acostamento da via.
"O filho da vítima parou após ver o carro do pai, ouviu gritos de socorro vindos do meio da vegetação e, ao atravessar um talude, viu seu pai caído no foço de uma altura aproximada de 10 metros", explicou o tenente Garcia.
A guarnição chegou no local por volta de 20h30, e realizou técnicas de salvamento terrestre com a utilização de tripé para acesso à vítima, que estava consciente, orientada e com suspeita de fratura no pé esquerdo, causado pela queda.
Prefeitura de Atalaia do Norte realiza 3 Corrida de São Sebastião
@Matheus Ravel
Prefeitura de Atalaia do Norte, realiza 3ª Corrida de São Sebastião 2024
Neste sábado, dia 20 de janeiro de 2024, acontece a 3ª Corrida de São Sebastião 2024, nas modalidades masculino, com percurso de 5 quilômetros, e modalidade feminina, ...read more
Prefeitura de Atalaia do Norte, realiza 3ª Corrida de São Sebastião 2024
Neste sábado, dia 20 de janeiro de 2024, acontece a 3ª Corrida de São Sebastião 2024, nas modalidades masculino, com percurso de 5 quilômetros, e modalidade feminina, com percurso de 3 quilômetros, com largada da BR-307, com chegada em frente a Matriz São Sebastião.
Campeões da 2ª edição
Os vencedores da 3ª Corrida de São Sebastião no ano passado, a vitória ficou com o atalaiense Welmison Rodrigues, o segundo lugar com o tabatinguense Samuel Santos, e o terceiro lugar com o benjaminense Darlan Garcia. Na modalidade feminina, a grande campeã foi Elina da Silva, o segundo lugar ficou com Anadibe Estela, e o terceiro lugar com Rosângela Mayuruna..
A 3ª Corrida de São Sebastião 2024, é uma realização da Prefeitura de Atalaia do Norte, por meio das Secretarias de Esportes e Paroquia São Sebastião.
Premiação:
1° Lugar 500,00
2° Lugar 300,00 partir das 7 horas da manhã,
3° Lugar 200,00.
As inscrições estão sendo feitas na Secretaria de Esportes.
É ótimo saber que a Unidade Básica de Saúde Fluvial de Tabatinga realizará mais uma viagem de atendimento aos ribeirinhos e uma grande ação de saúde básica ocorrerá na próxima sexta-feira, 26 de janeiro em Belém do Solimões, em parceria com o Depa...read more
É ótimo saber que a Unidade Básica de Saúde Fluvial de Tabatinga realizará mais uma viagem de atendimento aos ribeirinhos e uma grande ação de saúde básica ocorrerá na próxima sexta-feira, 26 de janeiro em Belém do Solimões, em parceria com o Departamento de Saúde Indígena do Alto-Solimões (DSEI-ARS).
O objetivo dessa iniciativa é levar um atendimento de saúde de qualidade aos ribeirinhos e às comunidades indígenas do município de Tabatinga. Serão oferecidos serviços médicos, enfermagem, odontológico, psicólogo, fisioterapia, biomedicina com exames laboratoriais, serviço social, nutricionista, dentre outros profissionais que fazem parte da equipe da UBS Fluvial e DSEI-ARS.
Essa ação é de extrema importância, pois leva os serviços de saúde até as comunidades que muitas vezes têm dificuldade de acesso aos cuidados médicos. Além disso, a parceria com o DSEI-ARS fortalece o atendimento às comunidades indígenas, garantindo uma assistência abrangente e de qualidade.
Parabenizo a Unidade Básica de Saúde Fluvial, o Departamento de Saúde Indígena do Alto-Solimões e a Prefeitura Municipal de Tabatinga por essa iniciativa. Esperamos que essa ação seja bem-sucedida e beneficie muitas pessoas, promovendo a saúde e o bem-estar das comunidades ribeirinhas e indígenas, disse o Vice-Prefeito Plínio Cruz.
PF intensifica patrulhamento na região dos portos no AM
PF intensifica patrulhamento na região dos portos no AM
Manaus/AM. A Polícia Federal intensificou, no último sábado (13/1), ação de fiscalização e patrulhamento de navios turísticos, em razão do início da alta temporada de cruzeiros, em reg...read more
PF intensifica patrulhamento na região dos portos no AM
Manaus/AM. A Polícia Federal intensificou, no último sábado (13/1), ação de fiscalização e patrulhamento de navios turísticos, em razão do início da alta temporada de cruzeiros, em regiões de portos no Amazonas.
Vale mencionar que no ano de 2023, o cais do Porto Público de Manaus cedeu e sua estrutura inteira afundou. Após as reformas realizadas, a Polícia Federal acompanha as atracações, a fim de verificar as condições do novo píer e garantir a segurança dos usuários e trabalhadores do serviço portuário.
Além disso, com a cheia do Rio Negro, a PF intensificará sua rotina de patrulhas e combate aos crimes ambientais, de tráfico de drogas e pirataria.
Via Comunicação Social da Polícia Federal no Amazonas
Matrículas para a rede pública de ensino do estado e município
Foto: Márcio Silva
Pelo menos 250 mil vagas para novos alunos foram disponibilizadas nesta quarta-feira (17), pelas Secretarias de Educação do Amazonas e de Manaus. As inscrições podem ser feitas através da internet ou presencialmente até a sexta-feira (19).
Pelo menos 250 mil vagas para novos alunos foram disponibilizadas nesta quarta-feira (17), pelas Secretarias de Educação do Amazonas e de Manaus. As inscrições podem ser feitas através da internet ou presencialmente até a sexta-feira (19).
O período de inscrições começou durante as primeiras horas destas quarta-feira. Os pais que optarem pelo procedimento online devem acessar o site https://matriculas.am.gov.br/pt-br, o mesmo canal para alunos da rede estadual ou municipal. Com exceção das vagas voltadas para as creches, não é necessário realizar qualquer tipo de cadastro no site.
O calendário de inscrições das duas secretarias começou no dia 10 de janeiro e durou 24 horas, com a prioridade para alunos com deficiência. No dia 12 do mesmo mês foi a vez das transferências, até o dia 16.
Denúncias
Todo o processo de matrícula dos novos alunos, seja presencial com apoio das escolas ou online é gratuito. Qualquer cobrança para reserva de vaga é ilegal e pode ser denunciada através do número 0800 0925050
Secretaria Municipal de Obras e Infraestrutura implementando melhorias
Prefeitura de Tabatinga
Transformando Tabatinga! 🏗️🌟
Nesta quinta-feira (11/01), a Secretaria Municipal de Obras e Infraestrutura está trabalhando incansavelmente na Rua Jacy Costa, implementando melhorias cruciais. 💪✨
Nesta quinta-feira (11/01), a Secretaria Municipal de Obras e Infraestrutura está trabalhando incansavelmente na Rua Jacy Costa, implementando melhorias cruciais. 💪✨
Estamos instalando novos bueiros para aprimorar o sistema de drenagem da cidade, garantindo maior segurança e prevenção contra enchentes. 🌧️✅
Além de proporcionar proteção, essa iniciativa é um passo importante para a sustentabilidade, direcionando as águas pluviais para lagos e rios, preservando o meio ambiente e evitando desperdícios. 💦🌿
🚧👷♂️ Boas Notícias para os Bairros Portobras, Brilhante e Dom Pedro I!
Na última quinta-feira (18/01), o Vice-Prefeito Plínio Cruz se reuniu com a RED Engenharia para tratar da retomada da pavimentação em concreto armado em nosso Municípi...read more
🚧👷♂️ Boas Notícias para os Bairros Portobras, Brilhante e Dom Pedro I!
Na última quinta-feira (18/01), o Vice-Prefeito Plínio Cruz se reuniu com a RED Engenharia para tratar da retomada da pavimentação em concreto armado em nosso Município. 🛣️✨
Neste primeiro momento, as ruas contempladas são: 13 de Maio, Santos Dumont, Marechal Rondon e Almirante Tamandaré. 🏡👏🏻
Em breve, as obras começarão, e pedimos a compreensão dos moradores, pois a empresa aguarda a chegada de alguns materiais.
Em breve, nossas ruas estarão renovadas e mais seguras! 🌟🏠 #DesenvolvimentoLocal #Infraestrutura #TabatingaEmObras
Nossos sentimentos a todos os familiares e amigos por essa perda inestimável
Professora Glaucelane trabalhava como Coordenadora Municipal da Educação Indígena. Será lembrada como uma grande profissional que alavancou o nome da educação, dedicando com muito amor, boa parte da sua vida, em prol da qualidade educacional das c...read more
Professora Glaucelane trabalhava como Coordenadora Municipal da Educação Indígena. Será lembrada como uma grande profissional que alavancou o nome da educação, dedicando com muito amor, boa parte da sua vida, em prol da qualidade educacional das comunidades ribeirinhas indígenas e não indígenas. 🖤
Ação de saúde básica ocorrerá na próxima sexta-feira, 26 de janeiro
É ótimo saber que a Unidade Básica de Saúde Fluvial de Tabatinga realizará mais uma viagem de atendimento aos ribeirinhos e uma grande ação de saúde básica ocorrerá na próxima sexta-feira, 26 de janeiro em Belém do Solimões, em parceria com o Departa...read more
É ótimo saber que a Unidade Básica de Saúde Fluvial de Tabatinga realizará mais uma viagem de atendimento aos ribeirinhos e uma grande ação de saúde básica ocorrerá na próxima sexta-feira, 26 de janeiro em Belém do Solimões, em parceria com o Departamento de Saúde Indígena do Alto-Solimões Read less
Ayuda humanitária para atingidos por incêndio no Centro de Manaus
Governo do Amazonas monta operação de ajuda humanitária para atingidos por incêndio no Centro de Manaus
O Governo do Amazonas montou uma operação de ajuda humanitária em apoio aos moradores da comunidade Bairro do Céu, no centro de Manaus, ...read more
Governo do Amazonas monta operação de ajuda humanitária para atingidos por incêndio no Centro de Manaus
O Governo do Amazonas montou uma operação de ajuda humanitária em apoio aos moradores da comunidade Bairro do Céu, no centro de Manaus, onde um incêndio atingiu cerca de 30 casas, na tarde deste sábado (20/01).
Assim que soube do incêndio, o governador do Amazonas, Wilson Lima, determinou que as equipes sociais do governo dessem todo o apoio necessário à Prefeitura de Manaus no atendimento aos desabrigados. Pelo menos 110 famílias já foram atendidas pela operação.
A força tarefa reúne diversos órgãos estaduais: Unidade Gestora de Projetos Especiais (UGPE), Secretaria de Estado de Justiça, Direitos Humanos e Cidadania (Sejusc), Defesa Civil, Corpo de Bombeiros, Secretaria de Estado de Assistência Social (Seas), Secretaria de Estado da Saúde (SES) e Superintendência Estadual de Habitação (Suhab).