Автоматизація щоденного журналу
Експортуйте та автоматизуйте щоденні будівельні журнали для ведення документації.
Огляд робочого процесу
Щоденний запис
Погода
Робоча сила
Обладнання
Роботи
Нотатки
Експорт
Дані JSON
Звіт CSV
Зведення PDF
Архів
Тижневий пакет
Місячний звіт
Історія проєкту
Запис → Експорт → Архів
Підхід через CLI
Експорт щоденних журналів
PROJECT_ID="b.project-id"
# Get logs for date range
START_DATE="2024-02-01"
END_DATE="2024-02-29"
raps acc dailylog list "$PROJECT_ID" \
--from "$START_DATE" \
--to "$END_DATE" \
--output json > daily-logs.json
Форматування для читання
cat daily-logs.json | jq -r '.[] |
"=== \(.date) ===",
"Weather: \(.weather.condition) (\(.weather.tempHigh)°/\(.weather.tempLow)°)",
"Manpower: \(.manpower.total) workers",
"",
"Activities:",
(.activities[] | " - \(.description)"),
"",
"Notes:",
" \(.notes)",
""
'
Експорт у CSV
# Daily summary CSV
cat daily-logs.json | jq -r '
["Date", "Weather", "Temp High", "Temp Low", "Workers", "Notes"],
(.[] | [
.date,
.weather.condition,
.weather.tempHigh,
.weather.tempLow,
.manpower.total,
.notes
]) | @csv
' > daily-log-summary.csv
# Activities detail CSV
cat daily-logs.json | jq -r '
["Date", "Activity", "Location", "Crew Size"],
(.[] | .date as $date | .activities[] | [
$date,
.description,
.location,
.crewSize
]) | @csv
' > activities-detail.csv
Тижневе зведення
# Group by week and summarize
cat daily-logs.json | jq '
group_by(.date[:10] | strptime("%Y-%m-%d") | strftime("%Y-W%V")) |
map({
week: .[0].date[:10] | strptime("%Y-%m-%d") | strftime("%Y-W%V"),
days: length,
totalWorkers: [.[].manpower.total] | add,
avgWorkers: ([.[].manpower.total] | add / length | floor),
activities: [.[].activities[].description] | unique
})'
CI/CD-конвеєр
# .github/workflows/dailylog-export.yml
name: Daily Log Export
on:
schedule:
- cron: '0 5 * * *' # Daily at 5 AM
workflow_dispatch:
inputs:
date_range:
description: 'Date range (e.g., "2024-02-01:2024-02-29")'
required: false
env:
PROJECT_ID: ${{ secrets.ACC_PROJECT_ID }}
jobs:
export-logs:
runs-on: ubuntu-latest
steps:
- name: Install RAPS
run: cargo install raps
- name: Authenticate
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
APS_ACCESS_TOKEN: ${{ secrets.APS_ACCESS_TOKEN }}
APS_REFRESH_TOKEN: ${{ secrets.APS_REFRESH_TOKEN }}
run: raps auth login --token "$APS_ACCESS_TOKEN" --refresh-token "$APS_REFRESH_TOKEN" --non-interactive
- name: Set date range
run: |
if [ -n "${{ inputs.date_range }}" ]; then
START=$(echo "${{ inputs.date_range }}" | cut -d: -f1)
END=$(echo "${{ inputs.date_range }}" | cut -d: -f2)
else
# Default to last 7 days
END=$(date +%Y-%m-%d)
START=$(date -d '7 days ago' +%Y-%m-%d)
fi
echo "START_DATE=$START" >> $GITHUB_ENV
echo "END_DATE=$END" >> $GITHUB_ENV
- name: Export daily logs
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
mkdir -p ./logs-export
raps acc dailylog list "$PROJECT_ID" \
--from "$START_DATE" \
--to "$END_DATE" \
--output json > ./logs-export/daily-logs.json
- name: Generate reports
run: |
# Summary report
echo "# Daily Log Report" > ./logs-export/report.md
echo "Period: $START_DATE to $END_DATE" >> ./logs-export/report.md
echo "" >> ./logs-export/report.md
DAYS=$(jq 'length' ./logs-export/daily-logs.json)
TOTAL_WORKERS=$(jq '[.[].manpower.total] | add' ./logs-export/daily-logs.json)
AVG_WORKERS=$(jq '[.[].manpower.total] | add / length | floor' ./logs-export/daily-logs.json)
echo "## Summary" >> ./logs-export/report.md
echo "- Days logged: $DAYS" >> ./logs-export/report.md
echo "- Total worker-days: $TOTAL_WORKERS" >> ./logs-export/report.md
echo "- Average daily workforce: $AVG_WORKERS" >> ./logs-export/report.md
echo "" >> ./logs-export/report.md
# Weather summary
echo "## Weather" >> ./logs-export/report.md
jq -r '
group_by(.weather.condition) |
map({condition: .[0].weather.condition, days: length}) |
.[] | "- \(.condition): \(.days) days"
' ./logs-export/daily-logs.json >> ./logs-export/report.md
# CSV export
jq -r '["Date","Weather","Workers","Notes"], (.[] | [.date, .weather.condition, .manpower.total, .notes]) | @csv' ./logs-export/daily-logs.json > ./logs-export/summary.csv
- name: Upload exports
uses: actions/upload-artifact@v4
with:
name: dailylog-export
path: ./logs-export/
Потік конвеєра
Щодня о 5:00
Розклад
→
Експорт
Визначення діапазону дат
Отримання щоденних журналів
→
Звіти
report.md
summary.csv
daily-logs.json
Інтеграція з MCP
Отримання нещодавніх журналів
User: "Show me this week's daily logs"
КористувачAI-асистентRAPS MCPACC Cloud
Корист.Щоденні журнали за цей тижденьAI
AI: Розрахунок діапазону дат (Пн-сьогодні)
AIaps_acc_dailylog_list(project_id, from, to)MCP
MCPОтримання щоденних журналівACC
ACCДані журналівMCP
AI: Форматування зведення
AIТижневе зведення журналуКорист.
Відповідь AI:
Щоденні журнали: 12-16 лютого 2024
Дата Погода Робітники Основні роботи Пн 12 Сонячно, 18° 45 Заливка фундаменту - Зона B Вт 13 Хмарно, 14° 52 Монтаж металоконструкцій - Рівень 2 Ср 14 Дощ, 9° 28 Лише внутрішні роботи Чт 15 Сонячно, 17° 55 Чорнові MEP-роботи - Рівень 1 Пт 16 Сонячно, 20° 58 Зовнішній каркас - Північ Зведення за тиждень:
- Всього людино-днів: 238
- Середня: 48 робітників/день
- Затримки через погоду: 1 день
Пошук у журналах
User: "Find days when we had concrete pours last month"
Відповідь AI:
Бетонні заливки у січні 2024:
Дата Робота Розташування Робітники 8 січ Заливка фундаменту Зона A 24 15 січ Заливка плити Рівень 1 32 22 січ Заливка колон Осі 3-5 18 29 січ Заливка плити Рівень 2 35 Зведення:
- 4 дні бетонних заливок
- 109 робітників загалом у дні заливок
- Усі завершені успішно
Шаблони звітів
Місячне зведення
# Generate monthly summary
MONTH="2024-02"
START="${MONTH}-01"
END="${MONTH}-28"
raps acc dailylog list "$PROJECT_ID" --from "$START" --to "$END" --output json | jq '
{
period: "'"$MONTH"'",
daysLogged: length,
totalMandays: [.[].manpower.total] | add,
averageDaily: ([.[].manpower.total] | add / length | floor),
weatherBreakdown: (group_by(.weather.condition) | map({condition: .[0].weather.condition, days: length})),
activitiesCount: [.[].activities | length] | add
}'
Звіт про вплив погоди
cat daily-logs.json | jq '
group_by(.weather.condition) |
map({
weather: .[0].weather.condition,
days: length,
avgWorkers: ([.[].manpower.total] | add / length | floor),
activities: [.[].activities | length] | add
}) |
sort_by(-.days)'
Тренд робочої сили
cat daily-logs.json | jq '
[.[] | {date: .date, workers: .manpower.total}] |
sort_by(.date)'