Loading...
Loading...
Compare original and translation side by side
undefinedundefinedundefinedundefinedfrom enum import Enum
from dataclasses import dataclass
from typing import List
class CrisisLevel(Enum):
LEVEL_1 = "routine" # Single reporter can handle
LEVEL_2 = "elevated" # Editor involvement needed
LEVEL_3 = "major" # Multiple reporters, editor oversight
LEVEL_4 = "critical" # All hands, executive involvement
@dataclass
class BreakingEvent:
description: str
level: CrisisLevel
confirmed_facts: List[str]
unconfirmed_claims: List[str]
sources_contacted: List[str]
assigned_reporters: List[str]
def escalation_needed(self) -> bool:
"""Determine if event needs escalation."""
triggers = [
len(self.unconfirmed_claims) > 5, # Too many unknowns
"fatalities" in self.description.lower(),
"official" in self.description.lower(),
"government" in self.description.lower(),
]
return any(triggers)
ESCALATION_TRIGGERS = {
CrisisLevel.LEVEL_2: [
"Multiple fatalities confirmed",
"Major public figure involved",
"Legal/liability concerns",
"Significant local impact",
],
CrisisLevel.LEVEL_3: [
"National news potential",
"Active danger to public",
"Major institution affected",
"Coordinated misinformation detected",
],
CrisisLevel.LEVEL_4: [
"Mass casualty event",
"Government/democracy implications",
"Our organization directly involved",
"Imminent physical threat",
],
}from enum import Enum
from dataclasses import dataclass
from typing import List
class CrisisLevel(Enum):
LEVEL_1 = "routine" # Single reporter can handle
LEVEL_2 = "elevated" # Editor involvement needed
LEVEL_3 = "major" # Multiple reporters, editor oversight
LEVEL_4 = "critical" # All hands, executive involvement
@dataclass
class BreakingEvent:
description: str
level: CrisisLevel
confirmed_facts: List[str]
unconfirmed_claims: List[str]
sources_contacted: List[str]
assigned_reporters: List[str]
def escalation_needed(self) -> bool:
"""Determine if event needs escalation."""
triggers = [
len(self.unconfirmed_claims) > 5, # Too many unknowns
"fatalities" in self.description.lower(),
"official" in self.description.lower(),
"government" in self.description.lower(),
]
return any(triggers)
ESCALATION_TRIGGERS = {
CrisisLevel.LEVEL_2: [
"Multiple fatalities confirmed",
"Major public figure involved",
"Legal/liability concerns",
"Significant local impact",
],
CrisisLevel.LEVEL_3: [
"National news potential",
"Active danger to public",
"Major institution affected",
"Coordinated misinformation detected",
],
CrisisLevel.LEVEL_4: [
"Mass casualty event",
"Government/democracy implications",
"Our organization directly involved",
"Imminent physical threat",
],
}undefinedundefinedundefinedundefinedfrom dataclasses import dataclass
from datetime import datetime
from typing import Optional
from enum import Enum
class VerificationStatus(Enum):
UNVERIFIED = "unverified"
PARTIALLY_VERIFIED = "partially_verified"
VERIFIED = "verified"
DEBUNKED = "debunked"
UNCERTAIN = "uncertain"
@dataclass
class Claim:
text: str
source: str
first_seen: datetime
urgency: int # 1-5, higher = more urgent to verify
status: VerificationStatus = VerificationStatus.UNVERIFIED
verification_notes: str = ""
verifier: Optional[str] = None
class VerificationQueue:
"""Manage claims awaiting verification."""
def __init__(self):
self.claims = []
def add_claim(self, claim: Claim):
self.claims.append(claim)
self._sort_by_priority()
def _sort_by_priority(self):
"""Urgent claims first, then by time seen."""
self.claims.sort(
key=lambda c: (-c.urgency, c.first_seen)
)
def next_claim(self) -> Optional[Claim]:
"""Get highest priority unverified claim."""
for claim in self.claims:
if claim.status == VerificationStatus.UNVERIFIED:
return claim
return None
def update_status(self, claim: Claim,
status: VerificationStatus,
notes: str,
verifier: str):
claim.status = status
claim.verification_notes = notes
claim.verifier = verifierfrom dataclasses import dataclass
from datetime import datetime
from typing import Optional
from enum import Enum
class VerificationStatus(Enum):
UNVERIFIED = "unverified"
PARTIALLY_VERIFIED = "partially_verified"
VERIFIED = "verified"
DEBUNKED = "debunked"
UNCERTAIN = "uncertain"
@dataclass
class Claim:
text: str
source: str
first_seen: datetime
urgency: int # 1-5, higher = more urgent to verify
status: VerificationStatus = VerificationStatus.UNVERIFIED
verification_notes: str = ""
verifier: Optional[str] = None
class VerificationQueue:
"""Manage claims awaiting verification."""
def __init__(self):
self.claims = []
def add_claim(self, claim: Claim):
self.claims.append(claim)
self._sort_by_priority()
def _sort_by_priority(self):
"""Urgent claims first, then by time seen."""
self.claims.sort(
key=lambda c: (-c.urgency, c.first_seen)
)
def next_claim(self) -> Optional[Claim]:
"""Get highest priority unverified claim."""
for claim in self.claims:
if claim.status == VerificationStatus.UNVERIFIED:
return claim
return None
def update_status(self, claim: Claim,
status: VerificationStatus,
notes: str,
verifier: str):
claim.status = status
claim.verification_notes = notes
claim.verifier = verifierundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedfrom dataclasses import dataclass
from datetime import datetime
from typing import List, Dict
from collections import Counter
@dataclass
class CrisisMention:
platform: str
content: str
author: str
timestamp: datetime
sentiment: str # positive, negative, neutral, misinformation
reach: int # followers/potential impressions
requires_response: bool = False
class CrisisMonitor:
"""Track crisis-related social mentions."""
def __init__(self, crisis_keywords: List[str]):
self.keywords = crisis_keywords
self.mentions: List[CrisisMention] = []
def add_mention(self, mention: CrisisMention):
self.mentions.append(mention)
def get_dashboard(self) -> dict:
"""Real-time crisis overview."""
recent = [m for m in self.mentions
if (datetime.now() - m.timestamp).seconds < 3600]
return {
'total_mentions_1h': len(recent),
'sentiment_breakdown': self._sentiment_counts(recent),
'top_platforms': self._platform_counts(recent),
'misinformation_count': len([
m for m in recent
if m.sentiment == 'misinformation'
]),
'high_reach_negative': [
m for m in recent
if m.sentiment == 'negative' and m.reach > 10000
],
'pending_responses': len([
m for m in self.mentions
if m.requires_response
])
}
def _sentiment_counts(self, mentions: List[CrisisMention]) -> Dict:
return dict(Counter(m.sentiment for m in mentions))
def _platform_counts(self, mentions: List[CrisisMention]) -> Dict:
return dict(Counter(m.platform for m in mentions))from dataclasses import dataclass
from datetime import datetime
from typing import List, Dict
from collections import Counter
@dataclass
class CrisisMention:
platform: str
content: str
author: str
timestamp: datetime
sentiment: str # positive, negative, neutral, misinformation
reach: int # followers/potential impressions
requires_response: bool = False
class CrisisMonitor:
"""Track crisis-related social mentions."""
def __init__(self, crisis_keywords: List[str]):
self.keywords = crisis_keywords
self.mentions: List[CrisisMention] = []
def add_mention(self, mention: CrisisMention):
self.mentions.append(mention)
def get_dashboard(self) -> dict:
"""Real-time crisis overview."""
recent = [m for m in self.mentions
if (datetime.now() - m.timestamp).seconds < 3600]
return {
'total_mentions_1h': len(recent),
'sentiment_breakdown': self._sentiment_counts(recent),
'top_platforms': self._platform_counts(recent),
'misinformation_count': len([
m for m in recent
if m.sentiment == 'misinformation'
]),
'high_reach_negative': [
m for m in recent
if m.sentiment == 'negative' and m.reach > 10000
],
'pending_responses': len([
m for m in self.mentions
if m.requires_response
])
}
def _sentiment_counts(self, mentions: List[CrisisMention]) -> Dict:
return dict(Counter(m.sentiment for m in mentions))
def _platform_counts(self, mentions: List[CrisisMention]) -> Dict:
return dict(Counter(m.platform for m in mentions))undefinedundefinedundefinedundefinedfrom dataclasses import dataclass
from typing import List, Optional
from datetime import datetime
@dataclass
class CrisisTeamMember:
name: str
role: str
phone: str
email: str
backup: Optional['CrisisTeamMember'] = None
@dataclass
class CrisisLog:
"""Maintain record of all crisis decisions."""
entries: List[dict] = None
def __post_init__(self):
self.entries = self.entries or []
def log(self, action: str, decision_maker: str,
rationale: str, outcome: str = "pending"):
self.entries.append({
'timestamp': datetime.now().isoformat(),
'action': action,
'decision_maker': decision_maker,
'rationale': rationale,
'outcome': outcome
})
def export_for_postmortem(self) -> str:
"""Generate timeline for after-action review."""
lines = ["# Crisis Response Timeline\n"]
for entry in self.entries:
lines.append(
f"**{entry['timestamp']}** - {entry['action']}\n"
f"- Decision by: {entry['decision_maker']}\n"
f"- Rationale: {entry['rationale']}\n"
f"- Outcome: {entry['outcome']}\n"
)
return '\n'.join(lines)from dataclasses import dataclass
from typing import List, Optional
from datetime import datetime
@dataclass
class CrisisTeamMember:
name: str
role: str
phone: str
email: str
backup: Optional['CrisisTeamMember'] = None
@dataclass
class CrisisLog:
"""Maintain record of all crisis decisions."""
entries: List[dict] = None
def __post_init__(self):
self.entries = self.entries or []
def log(self, action: str, decision_maker: str,
rationale: str, outcome: str = "pending"):
self.entries.append({
'timestamp': datetime.now().isoformat(),
'action': action,
'decision_maker': decision_maker,
'rationale': rationale,
'outcome': outcome
})
def export_for_postmortem(self) -> str:
"""Generate timeline for after-action review."""
lines = ["# Crisis Response Timeline\n"]
for entry in self.entries:
lines.append(
f"**{entry['timestamp']}** - {entry['action']}\n"
f"- Decision by: {entry['decision_maker']}\n"
f"- Rationale: {entry['rationale']}\n"
f"- Outcome: {entry['outcome']}\n"
)
return '\n'.join(lines)undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined| Field | Value |
|---|---|
| Version | 1.0.0 |
| Created | 2025-12-26 |
| Author | Claude Skills for Journalism |
| Domain | Communications, Journalism |
| Complexity | Advanced |
| 字段 | 值 |
|---|---|
| 版本 | 1.0.0 |
| 创建时间 | 2025-12-26 |
| 作者 | Claude Skills for Journalism |
| 领域 | 传播、新闻 |
| 复杂度 | 高级 |